2011-04-12 70 views
5

我正在研究一個工具來分析合併許多主題分支的輸出並生成詳細的衝突報告。我碰到的,有時Git的一個小問題會產生在合併命令的輸出截斷的文件名,如在git合併中獲取完整文件路徑

Merge made by recursive. 
.../somepath/anotherpath/toolong/default.css  | 2 +- 

當在其他情況下,它給出了完整路徑

Auto-merging thefullpath/to/myfile/default.jsp 

我希望始終具有完整路徑以便在合併之間匹配文件。

+1

'git diff --numstat branchA branchB'可用於機器消耗 – knittl 2011-04-12 16:28:10

回答

2

我對你的最終目標有些困惑,但我想我可以提供一個答案。

如果您想在合併發生衝突時得到一個很好的更改報告,即所有內容仍未提交,則應使用git status --porcelain。它給出了一個很好的,機器可讀的所有文件及其狀態列表(包括合併衝突狀態),並且有詳細記錄的in the manpage。根據您的使用情況,您甚至可以使用git merge --no-commit以確保在繼續(提交)之前有機會檢查合併結果。您還可以使用git diff HEAD --numstat來獲取按文件添加/刪除的行數的機器可讀報告。

如果你要檢查的事後合併,這是一個非常不錯的使用情況git diff-tree

git diff-tree -c --numstat <commit> 

-c它告訴給差異合併提交對陣雙方家長和--numstat讓你一個不錯的機器可讀的輸出像以前一樣。

最後,如果您想要生成非常詳細的衝突報告,您可以通過-p而不是--numstat,爲您提供完整的補丁輸出。這是您在gitk中會看到的一種補丁,每行開頭有兩個字符,表示該行是否相對於每個父代添加/刪除。僅來自一個父代的更改只有一個符號(例如'+ ',' -',爲使空格可見而添加的引號),而作爲衝突解決方案的一部分手動更改的行將有兩個(--,++)。如果你真的需要,你可以自己解析它。 (不幸的是,我不認爲在合併提交時類似於--numstat。)

相關問題