2011-04-12 123 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。)

相关问题