[英]Setting default diff algorithm does not translate to default merge algorithm (patience)
我看過很多博客文章和堆棧溢出文章說git config --global diff.algorithm patience
將允許差異和合並使用帶有默認遞歸算法的耐心策略選項。
我發現情況並非如此,我擺出以下演示來說明原因。
git config --global diff.algorithm patience //mythical config statement
git clone https://github.com/kjlubick/PracticingGit.git
cd PracticingGit
git checkout origin/patience-merge-1 -t
git checkout -b merge_test //temp branch for merging
git diff origin/patience-merge-2
這個差異(圖片由meld 提供看起來很不錯。讓我們嘗試合並它。
git merge origin/patience-merge-2
嗯? 那個合並看起來很丑。 盡管第 9-19 行實際上沒有改變,但它們被標記為沖突/改變的方式與差異完全不同。
如果我們強制合並使用耐心策略選項:
git merge --abort
git merge origin/patience-merge-2 -X patience
這樣好多了。 沖突與我們之前所做的差異匹配並且在語義上是正確的。
我怎樣才能讓合並真正使用耐心設置,而不僅僅是差異?
我在黑暗中嘗試的其他鏡頭(未成功):
git config --global merge.algorithm patience
git config --global merge.diff.algorithm patience
系統信息:
視窗 8.1
git 版本 1.8.4.msysgit.0(通過 GitHub for Windows 2.0)
修補 git,如 Appleman1234 並不理想。 我希望這個功能在未來的版本中出現。
現在,我想我必須適應別名
git config --global alias.pmerge "merge -X patience --"
這讓我可以做
git pmerge origin/patience-merge-2
代替
git merge origin/patience-merge-2 -X patience
在我之前給出的例子中。
一種方法是修補 git 以添加您要求的功能。
一個未經測試、未編譯的builtin/merge.c補丁示例是
diff -Nar merge.c merge.c-new
77c77
< static const char *pull_twohead, *pull_octopus;
---
> static const char *pull_twohead, *pull_octopus,*diff_algorithm;
586a587,588
> else if (!strcmp(k, "diff.algorithm"))
> return git_config_string(&diff_algorithm, k, v);
1305a1308,1311
> int diff_algorithm_mask = 0;
> if (diff_algorithm != null){
> diff_algorithm_mask = parse_algorithm_value(diff_algorithm);
> }
1308a1315,1317
> if (diff_algorithm != null){
> add_strategies(diff_algorithm,diff_algorithm_mask);
> }
1310a1320,1322
> if (diff_algorithm != null){
> add_strategies(diff_algorithm,diff_algorithm_mask);
> }
請注意,我相信如果將這樣的補丁包含在 git 中,可能需要進行額外的工作來添加啟用和禁用此行為的配置值,因為文檔明確指出更改該值只會更改差異算法。 另一種方法是添加一個配置變量merge.algorithm,如果未設置,則讓它執行默認邏輯,如果設置,則執行merge.algorithm 中的算法。
另一種不需要更改代碼的替代方法是 shell 別名 git 命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.