2012-05-28 65 views
4

another question建議,以保持跟蹤,但在不同的分支不會合並,但低於我的使用情況下,似乎沒有工作的文件,以使用.gitattributes ..防止從主合併文件使用Git

mkdir git 
cd git 
git init 
echo "B" > b.txt 
git add b.txt 
git commit -m 'Initial commit' 

echo "b.txt merge=keepMine" > .gitattributes 
git add .gitattributes 
git config merge.keepMine.name "always keep mine during merge" 
git config merge.keepMine.driver "keepMine.sh %O %A %B" 
git commit -m 'Ignore b.txt' 

git checkout -b test # Create a branch 
git checkout master # Back to master and make change 
echo "Only in master" > b.txt 
git commit -a -m 'In master' 

git checkout test 
git merge master # The change in b.txt is being merged... 

任何想法?謝謝..

+0

這看起來像一個奇怪的願望合併一切只有一個文件。當所有內容都作爲一個整體來維護時,它違背了git意識形態。你能解釋一下用例嗎?你爲什麼需要它? –

回答

1

我懷疑它沒有工作,因爲沒有合併衝突。

但是,我可以確認git merge master --strategy=ours按預期工作。

這可能是你在找什麼:如果你要指定一個特定的文件中的特定合併策略How to tell Git to always select my local version

,你真正需要做的是編寫自定義合併駕駛員和指定您希望將合併驅動程序用作默認配置的存儲庫配置。請參閱上面的鏈接,瞭解如何使用它。

總之,它在你的用例中不起作用的原因是因爲你的用例不是合併。它只描繪了一個名爲test的臨時分支在master上的一系列更改,然後再將其移動到master。 當您在測試分支上時,您實際上從未實際引入提交。

+0

git merge master --strategy =我們的工作預期,但有時我們只需要將此策略應用於特定文件,而不是整個樹。看起來這是一個錯誤? – Ryan

+1

不,這不是一個錯誤。在你的問題中,合併太容易了,這就是爲什麼Git不會嘗試一種替代合併策略。這是一個簡單的實驗 - 在每個分支上對同一行進行不同的更改,然後嘗試合併。這會產生衝突,然後git會使用屬性文件來選擇你的。 – Carl

+0

所以有可能停止自動合併(只對每個文件,而不是全局) – Ryan

0

通過carleeto提到的定製合併司機「Tell git not to merge binary files but to choose」中解釋:

您可以在.gitattributes文件中聲明的那種合併的你想要的:

echo yourConfigFile merge=keepMine > parentDirectory\.gitattributes 
+0

我上面更新了我的命令日誌,仍然無法正常工作。至少git應該提示我缺少'keepMine.sh',但似乎只是簡單地忽略了.. – Ryan

+0

@Yoga:對,在沒有衝突的情況下不起作用(只有來自'master'分支的新修改) – VonC

+0

是的,所以似乎唯一的方法是使用'git merge master --strategy = ours' – Ryan