Kal*_*erg 5 git version-control merge build-process
我正在研究一种工具来分析合并许多主题分支的输出并生成详细的冲突报告.我遇到了一个小问题,因为有时Git会在merge命令的输出中产生一个截断的文件名,比如
Merge made by recursive.
.../somepath/anotherpath/toolong/default.css | 2 +-
Run Code Online (Sandbox Code Playgroud)
在其他情况下,它给出了完整的路径
Auto-merging thefullpath/to/myfile/default.jsp
Run Code Online (Sandbox Code Playgroud)
我想总是有完整的路径可用于匹配合并之间的文件.
我对你的最终目标有点困惑,但我想我无论如何都能提供答案。
如果您想在合并遇到冲突时获得良好的更改报告,即当所有内容仍未提交时,您应该使用git status --porcelain. 它提供了一个很好的、机器可读的所有文件及其状态(包括合并冲突状态)的列表,并且在联机帮助页中有详细记录。根据您的用例,您甚至可以使用git merge --no-commit来确保您有机会在继续(提交)之前检查合并结果。您还可以用来git diff HEAD --numstat获取按文件添加/删除的行数的机器可读报告。
如果您想在事后检查合并,那么这是一个非常好的用例git diff-tree:
git diff-tree -c --numstat <commit>
Run Code Online (Sandbox Code Playgroud)
告诉它对-c双亲进行差异合并提交,并且--numstat像以前一样为您提供一个很好的机器可读输出。
最后,如果您想生成极其详细的冲突报告,您可以传递-p而不是--numstat,为您提供完整的补丁输出。这是您将在 中看到的那种补丁gitk,其中每行开头有两个字符,指示该行是否相对于每个父级添加/删除。仅来自一个父级的更改只有一个符号(例如'+ ',,,' -'添加引号以使空格可见),而作为冲突解决的一部分手动更改的行将有两个(--,++)。如果确实需要的话,你可以自己解析它。--numstat(不幸的是,我不认为合并提交有什么类似的类固醇。)