CVS样式在git中区别

时间:2012-02-13 16:16:41

标签: git cvs

有没有办法让git diffs的输出格式像cvs样式差异?我发现git diffs的可读性较差。此外,more中出现的git差异很烦人 - 如何禁用此功能?

3 个答案:

答案 0 :(得分:6)

默认情况下,

git diff使用“通用”格式diff -ucvs diff使用较早的标准差异格式(标有<的已删除行,添加了标有>的行,每个差异都没有上下文。)

例如,您可以使用git diff -cgit diff -C5来获取“上下文差异”,以获得5行上下文而非默认值3。

diff --normal(至少如果您使用的是GNU diffutils)会生成旧式差异,但git diff似乎无法识别--normal选项。

就个人而言,我发现上下文差异比旧式差异更具可读性,因此我从未发现需要使用git diff的旧式差异。尝试git diff -c(以及haggai_e建议禁用寻呼机)。

如果你真的想要旧式差异(<>,没有上下文),可能有办法实现。

编辑:

如果git diff没有达到你想要的效果,你可以提取文件修订版的副本,并使用你喜欢的任何差异工具。我自己的get-versions工具可以从git(或从RCS或CVS)提取文件的多个版本。

这是另一个解决方案,虽然它有点复杂。举个例子,我已经克隆了git本身的git repo。如果我想比较顶级README文件的两个连续版本,我可以这样做:

$ diff --normal <(git show 779d7e93773a0dcf918dc77023511fdc68161bd8:README) \
                <(git show 71ce415dc088f19a0b8d6c8567dfdd6d851842b2:README)
24,26c24,25
< compatible with the GPLv2).
< It was originally written by Linus Torvalds with help of a group of
< hackers around the net. It is currently maintained by Junio C Hamano.
---
> compatible with the GPLv2). It was originally written by Linus
> Torvalds with help of a group of hackers around the net.
$ 

将它包装在一个小脚本中会很容易。

请注意,:(上例中的README)后面的文件路径是相对于存储库的根目录而不是当前目录。您可以在名称前加./使其相对于当前目录。 (后者可能不适用于某些旧版本的git。)

答案 1 :(得分:5)

您可以通过将core.pager设置为空字符串来禁用寻呼机:

git config --global core.pager ''

答案 2 :(得分:1)

尝试使用标准差异格式:

git difftool -y -x "diff --unchanged-group-format='' --old-line-format='< %L' --new-line-format='> %L'"

这给出了类似CVS的换行符和换行符,没有上下文,但它不会在不同行的组之间插入额外内容。不太确定如何实现其余部分,因为我不知道您希望CVS格式化的程度。

man diff

了解更多信息

另见

git difftool -y -x "diff -n"

但我怀疑这会做你想要的。如果这对您有用,为了使每次使用git diff都能正常工作,请参阅Configuring diff tool with .gitconfig?,其中引用了接受答案中的http://jeetworks.com/node/90