2012-07-04 109 views
16

我有一個特殊的分支(發佈分支),它是主分支的精確副本,並且刪除了一些文件和目錄。這個分支沒有發展,但它必須與主同步,所以主分區的更新必須不斷推送到該分支。Git合併策略忽略已刪除的文件

做一個正常的合併(git merge master)我經常得到這樣的(例如樣本README文件)衝突:

CONFLICT (delete/modify): README deleted in HEAD and modified in master

預計:我嘗試合併文件中的變化,我」已刪除。所以,要解決它們,我只能使用git rm README

爲了使它自動化,我儘管可以通過指定自動衝突解決方案來指定我們的-X。手冊頁表明這是一個正確的事情對我來說:

This option forces conflicting hunks to be auto-resolved cleanly by favoring our version. Changes from the other tree that do not conflict with our side are reflected to the merge result.

然而,當我做git merge -s recursive -X ours master我仍然得到同樣的未解決的刪除/修改衝突。我究竟做錯了什麼?是否有另一種自動解決衝突的方法?

+0

可能重複[如何設置git驅動程序忽略合併上的文件夾](http://stackoverflow.com/questions/3111515/how-to-setup-a-git-driver-to-忽略文件夾合併) - 並且有一個很好的答案。 – rescdsk

回答

2

通過在this question有一看,它看起來像遞歸戰略我們他們選項不考慮刪除的衝突。

你可以做的是使用this feature爲某些文件指定一個特定的策略。我敢打賭,我們的策略(不是選項)會做這些文件的伎倆。

編輯:

正如評論所說,你不能這樣做!

你應該definitly聯繫Git的郵件列表,如果這對你非常重要的特徵([email protected]

+0

似乎它可能是解決方案,但對我不起作用(或者我再次做錯了某些事情):在分支創建並提交.gitattribute文件,內容爲「README merge = ours」。當我做'混合主混合'時出現同樣的衝突 –

+1

嘗試創建一個。gitignore文件,並在其中放入'README'。相同的結果 –

+1

也許,自定義合併驅動程序是我需要的東西? http://stackoverflow.com/questions/928646/how-do-i-tell-git-to-always-select-my-local-version-for-conflicted-merges-on-as –

-1

可以使用衍合,而不是合併到具體化發佈分支。

+2

這將如何改變? –

11

有可能是一個更好的方式來做到這一點,但我做的合併(默認合併策略),然後運行

git status --porcelain | awk '{if ($1=="DU") print $2}' | xargs git rm 

在此之後解決了類似的問題,您應該解決其他衝突爲正常然後提交。

這只是刪除當前分支上已刪除的所有文件,我認爲這是你想要的。

+3

如果你真的想玩'git status',你應該使用'--porcelain'來獲得預測輸出。 –

+1

@MichałGórny[完成](http://stackoverflow.com/a/36470587/1485952) – fnkr

+0

編輯答案包括@ fnkr的調整。謝謝 –

3
git merge master 
git status --porcelain | awk '{if ($1=="DU") print $2}' | xargs git rm 
git commit