我有以下來源結構的根目錄:更改Git倉庫
/dir1
file1
file2
file3
dir1
是不需要作爲倉庫本身可以像一個文件夾,所以我想我的git倉庫看起來像這樣:
file1
file2
file3
我該怎麼做才能做到這一點?
我有以下來源結構的根目錄:更改Git倉庫
/dir1
file1
file2
file3
dir1
是不需要作爲倉庫本身可以像一個文件夾,所以我想我的git倉庫看起來像這樣:
file1
file2
file3
我該怎麼做才能做到這一點?
免責聲明:這將重寫歷史記錄,併成爲已經克隆存儲庫的任何人的PITA。你不應該在發表的歷史上做。
也就是說,您應該可以使用Git的filter-branch
命令來重寫所有樹。在使用它之前一定要了解所有含義(請閱讀聯機幫助文件;備份)。
git filter-branch \
--subdirectory-filter dir1 \
--tag-name-filter cat \
-- --all
NB。這個命令也會讓你的移植物更換並替換參考。
@BoA:哼。我想我已經寫了一個免責聲明在我的答案的頂部。並建議您閱讀聯機幫助頁並瞭解此命令的含義。我對此不清楚嗎? – knittl 2012-08-01 17:15:38
我的確看過了。我忘了爲'git push'添加'-f'標誌。 – 2012-08-01 19:51:41
你可以將你的.git移動到子目錄中(不要忘記你的.gitignore)。 然後運行git的init:
重要: 做運動前的最後一次提交(我會解釋它...)
mv .git ./dir1/.
git init .
git add .
git commit
它做的很重要的一個最後移動之前承諾:Git使用哈希的文件來識別它們。未更改的文件被視爲「重命名」。 如果你在移動之前有未經過處理的文件,它會爲每個修改過的文件記錄一對'已刪除''添加',你將失去對這些文件的記錄。
你不能只是移動文件,並做一個git添加。 Git會知道這些文件是否相同。您將失去歷史記錄,但可以使用git log --follow/path/to/file來獲取它。看看http://stackoverflow.com/questions/2314652/is-it-possible-to-move-rename-files-in-git-and-maintain-their-history – 2012-08-01 17:05:16