2014-04-17 87 views
10

我想添加一個類似於在這一問題自定義合併策略:Git merge conflict to always take the newest filegit:如何添加自定義合併策略?

我已經保存腳本爲git-merge-latest.sh,並添加以下行.git/config

[merge "latest"] 
    name = select latest file merge driver 
    driver = git-merge-latest.sh %O %A %B 

然而,當我運行git pull --strategy latest,我得到的消息:

Could not find merge strategy 'latest'. 
Available strategies are: octopus ours recursive resolve subtree. 

我已經試過檢查git config merge.latest.driver,它返回預期的輸出。我還將driver的值更改爲true,以驗證查找腳本時不存在問題。

這發生在兩個運行git 1.8.2.2和1.7.9.5的不同系統上。我究竟做錯了什麼?

回答

18

在這種情況下,你沒有配置合併策略,您配置了合併司機

合併策略是確定如何將兩個(或更多)提交合併程序。默認情況下,git merge使用程序git-merge-recursive中的「遞歸」策略。通過將--strategy <strategy>標誌指定爲git-merge(或git-pull),您可以告訴它調用不同的策略。如果您想插入自己的合併策略,可以通過在您的路徑中創建一個可執行文件git-merge-mystrategy並運行git merge --strategy mystrategy

這與合併驅動程序不同。合併驅動程序是用於解決合併兩個提交時存在的文件衝突的機制。您可以通過配置merge.mydriver.driver設置以您所描述的方式插入自己的合併驅動程序。

要啓用特定文件的合併驅動程序,您需要配置該文件的驅動器.gitattributes

filename merge=mydriver 
+0

可能需要明確指出,將合併策略是修改'GIT中的問題'代碼 - 這不是通過配置更改(至少目前)可以完成的... – twalberg

+1

@twalberg - 你可以很容易地插入你自己的,實際上;如果你在你的路徑中有一個'git-merge-xyz',那麼如果你將'git merge --strategy xyz'合併,git會運行它。我會在答案中更清楚地說明。 –

+2

是如何編寫git merge策略可執行文件的規範?我應該對stdin預期什麼,輸出結果是什麼? –