我有一個項目,其中最初使用的是某些從屬代碼的子模塊。事實證明子模塊並不適合這個項目(在實踐中它們很難使用),所以我將每個子模塊轉換爲子樹(使用新的git-subtree
功能)。將Git子模塊轉換爲子樹後合併錯誤
在我的工作存儲庫中,我已成功刪除每個子模塊,並將舊子模塊回購添加爲子樹。這沒有問題。
當我去到另一個克隆並嘗試從第一個拉,我從合併的步驟以下錯誤:
error: The following untracked working tree files would be overwritten by merge:
sub/.gitignore
sub/Makefile
sub/README
sub/src/main.c
... and so on for all files in sub/
Aborting
看來,這是因爲在sub/
文件從來沒有真正存在主存儲庫,當Git應用修補程序更新.gitmodules
時,它不會刪除包含子模塊文件的目錄。在處理下一個提交時,其中Git試圖創建sub/
中的新文件現在是現在是主要存儲庫的一部分,所有這些文件與sub/
中仍存在的文件相沖突。
我發現的解決方法是在git pull
之前使用rm -rf sub
,這可以避免此問題。
我的問題是,是否有任何命令行開關我可以git merge
,說使用「覆蓋這種情況發生在工作目錄中存在的任何文件」?更好的辦法是,git merge
將查看現有文件的內容,如果內容與它要創建的文件相同,則抑制錯誤消息並繼續。
UPDATE:我創建了Git存儲庫來演示這個問題,以準確地顯示我在說什麼。要重現:
$ git clone https://github.com/ghewgill/q14224966.git
$ cd q14224966
$ git submodule init
$ git submodule update
$ git merge origin/branch
這將導致錯誤消息
error: The following untracked working tree files would be overwritten by merge:
sub/Makefile
sub/README
sub/src/main.c
Please move or remove them before you can merge.
Aborting
你試試這個:http://goo.gl/z1XP9? – Efthymis
@Efthymis:完整的鏈接是http://stackoverflow.com/questions/1295171/git-merge-to-master-while-automatically-choosing-to-overwrite-master-files-with(請不要使用URL縮寫這裏)。我嘗試過'git merge -s遞歸-X他們的origin/master',並且發生同樣的錯誤。 –
對不起,關於那 – Efthymis