Вот как я просто решил похожую проблему. Я запустил проект в квази-частном репозитории "misc", переименовал некоторые файлы, а затем я хотел загрузить проект в GitHub со https://github.com/kragen/aikidraw.
$ git clone misc aikidraw
$ cat > aikidraw-wanted
aikidraw.js
aikidraw.html
caposketchra.html
caposketchra.js
jquery-1.2.6.js
^D
$ cd aikidraw
$ git filter-branch --tree-filter 'bash -c "comm -23 <(/bin/ls | sort) <(sort ~/devel/aikidraw-wanted) | xargs rm -rf"' HEAD
Кажется, до сих пор это работало нормально, если не удалять точечные файлы (например, .git
, хорошо и .gitignore
, плохо), но, очевидно, моя версия Git (1.6.0.4) не имеет git filter-branch --prune-empty
, Итак, теперь я клонирую новый репозиторий меньшего размера (чтобы ускорить его копирование по сети) и копирую репо на другой компьютер с Git 1.7.2.5:
$ time git clone aikidraw aikidraw-smaller
$ du -sh aikidraw/.git aikidraw-smaller/.git
8.6M aikidraw/.git
1.2M aikidraw-smaller/.git
$ time rsync -Pav aikidraw-smaller panacea.canonical.org:devel/aikidraw/
real 1m23.251s
А потом на panacea.canonical.org:
$ cd ~/devel/aikidraw/aikidraw-smaller # Oops. I hate rsync sometimes.
$ git checkout # otherwise I get "Cannot rewrite branch(es) with a dirty working directory."
$ git filter-branch --prune-empty HEAD
$ cd ../..
$ mv aikidraw i-hate-rsync
$ mv i-hate-rsync/aikidraw-smaller/ aikidraw
Затем вернемся на мой нетбук:
$ mv aikidraw aikidraw-big
$ git clone panacea.canonical.org:devel/aikidraw
$ du -sh aikidraw/.git
268K aikidraw/.git
Теперь, если вы делали это с двумя каталогами, а не с пятью файлами, на этом этапе вы можете переименовать все содержимое оставшегося подкаталога в корень хранилища, используя git mv
. В моем случае я уже переименовал.
$ git remote add github git@github.com:kragen/aikidraw.git
$ git push github master
Надеюсь, это поможет!