2012-08-01 136 views
3

我有以下來源結構的根目錄:更改Git倉庫

/dir1 
    file1 
    file2 
    file3 

dir1是不需要作爲倉庫本身可以像一個文件夾,所以我想我的git倉庫看起來像這樣:

file1 
file2 
file3 

我該怎麼做才能做到這一點?

+1

你不能只是移動文件,並做一個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

回答

5

免責聲明:這將重寫歷史記錄,併成爲已經克隆存儲庫的任何人的PITA。你不應該在發表的歷史上做。

也就是說,您應該可以使用Git的filter-branch命令來重寫所有樹。在使用它之前一定要了解所有含義(請閱讀聯機幫助文件;備份)。

git filter-branch \ 
    --subdirectory-filter dir1 \ 
    --tag-name-filter cat \ 
    -- --all 

NB。這個命令也會讓你的移植物更換並替換參考。

+1

@BoA:哼。我想我已經寫了一個免責聲明在我的答案的頂部。並建議您閱讀聯機幫助頁並瞭解此命令的含義。我對此不清楚嗎? – knittl 2012-08-01 17:15:38

+0

我的確看過了。我忘了爲'git push'添加'-f'標誌。 – 2012-08-01 19:51:41

1

你可以將你的.git移動到子目錄中(不要忘記你的.gitignore)。 然後運行git的init:

重要: 做運動前的最後一次提交(我會解釋它...)

mv .git ./dir1/. 
git init . 
git add . 
git commit 

它做的很重要的一個最後移動之前承諾:Git使用哈希的文件來識別它們。未更改的文件被視爲「重命名」。 如果你在移動之前有未經過處理的文件,它會爲每個修改過的文件記錄一對'已刪除''添加',你將失去對這些文件的記錄。