git diff的/a/b前缀的原因是什么
我已经使用git好几年了,一直想知道为什么git diff会在修改过的文件名前面加上a/和b/。我希望最终会偶然发现一个有用的用例,但直到现在,它总是令人讨厌,而且从来没有帮助过 它有什么好处?为什么默认情况下会启用此选项?在哪些情况下有用?如中所述,a/et b/表示用于区分源和目标的前缀 实际上,您可以选择:git diff的/a/b前缀的原因是什么,git,git-diff,Git,Git Diff,我已经使用git好几年了,一直想知道为什么git diff会在修改过的文件名前面加上a/和b/。我希望最终会偶然发现一个有用的用例,但直到现在,它总是令人讨厌,而且从来没有帮助过 它有什么好处?为什么默认情况下会启用此选项?在哪些情况下有用?如中所述,a/et b/表示用于区分源和目标的前缀 实际上,您可以选择: --no-prefix 不显示任何源或目标前缀 --src前缀= 显示给定的源前缀,而不是“a/” ——dst前缀= 显示给定的目标前缀,而不是“b/” 这是为了区分来源和目的地
--no-prefix
不显示任何源或目标前缀
--src前缀=
显示给定的源前缀,而不是“a/”
——dst前缀=
显示给定的目标前缀,而不是“b/”
这是为了区分来源和目的地。您还可以将其更改为更有意义: --src前缀=
--dst前缀=
如果您觉得它没有用,可以通过以下方式将其关闭:
git config --global diff.noprefix true
这些目录前缀基本上是为了兼容性而存在的,并被选为合理的默认值。解释如下 git之前 在git(和其他)之前,为多个文件创建修补程序的工作流可能是,例如,以下内容:
[diff]
noprefix = true
- 假设您在目录
中有一个项目asdf source.latest
的源代码asdf
- 您可以将目录复制到新目录(例如,
,最好是其中的文件)asdf source.new
- 现在,您可以在
asdf source.new中进行所有更改,尝试编译代码、测试代码等
- 完成后,使用例如
。输出也随着时间的推移而变化。除其他外,git默认使用“统一”输出,可以使用diff的diff-r asdf-source.latest asdf-source.new>new_功能创建补丁。补丁
参数获取-u
应用补丁的人(或构建脚本等)将使用
patch
,而不是使用git-apply
或git-am
。为了让命令找到正确的文件,必须使用修补程序的-pN
选项从路径中删除目录名(N显示要删除的目录名和分隔符的数量)。在上述情况下,使用的命令可以是patch-p1,如果要手动将git diff--no prefix
添加到.gitconfig中,只需添加以下内容:
[diff]
noprefix = true
@马诺兹:谢谢,反正我们几乎是在同一时间写的。注意:提到diff机器的路径前缀过去是通过硬连线连接到“a/
”作为源前缀,而“b/
”作为目标前缀。@Denji您在OS X上使用的是什么版本的Git?我喜欢Git上所有东西的默认值有多糟糕<代码>a
和b
用于起点和终点。。。这怎么清楚?无论如何,您也可以使用git config--global diff.noprefix true
永久禁用git add--patch
显示的前缀?@JFlo不确定:diff.noprefix配置会有帮助吗?()对于git,您的声明/“强制开发人员使用0目录不是很好”/毫无意义。没有a对b/“让修补程序查找文件可能很危险(因为它可能会找到不同的文件)”/也没有意义,因为没有旧的目录a和新的目录b<代码>-p0是补丁的默认值。使用-p1
,您必须键入更多。因此,diff.noprefix true
是一个有意义的默认值。所谓“强制开发人员使用0目录”,我指的是在本节开头解释的用例。我更容易将它放在两个目录中,然后使用-p1
应用默认输出。关于“查找不同的文件”,这当然不是那么容易,但是拥有-p0
并不意味着保留和处理完整路径(例如/etc/hosts
)。当然,这是在当前的补丁实现中处理的。@rurban根据补丁(1)版本2.7.1的手册页,默认值不是-p0
。完全不使用-p
(或-strip
)选项将剥离所有目录名,因此使用/u/howard/src/blurfl/blurfl.c
“完全不指定-p只会给您带来blurfl.c。”您是对的-p0是必需的。很抱歉使用diff.noprefix true
也更容易复制和粘贴文件。你们两人在1分钟内创建了几乎相同的答案!但是没有永久性地将其设置为有意义的属性?如果在使用git add--patch
时可以看到类似的diff选项,那就太好了。我喜欢dbl点击这些名称快速粘贴到konsole中,但总是要修剪这个愚蠢的、无用的前缀,这很烦人。这很有效,但通过创建不可用的git diff
s打破了git apply
;看---git是迟钝的。
Show the given destination prefix instead of "b/".
git config --global diff.noprefix true
[diff]
noprefix = true