我已经使用git多年了,并且总是想知道为什么git diff用/和b /作为修改文件的名称前缀.我预计最终会偶然发现一个有用的用例,但直到现在它总是令人讨厌而且从来没有用过.
到底有什么好处呢?为什么默认启用?在哪些情况下有用?
Von*_*onC 46
如diff手册页中所述,/ et b /表示区分源和目标的前缀.
实际上,您有以下选择:
--no-prefix
Run Code Online (Sandbox Code Playgroud)
不显示任何源或目标前缀.
--src-prefix=<prefix>
Run Code Online (Sandbox Code Playgroud)
显示给定的源前缀而不是"a /".
--dst-prefix=<prefix>
Run Code Online (Sandbox Code Playgroud)
显示给定的目标前缀而不是"b /"
Wil*_*ard 33
如果您没有发现它有用,可以使用以下命令将其关闭:
git config --global diff.noprefix true
Run Code Online (Sandbox Code Playgroud)
ner*_*ert 16
这些目录前缀基本上是为了兼容性而选择作为合理的默认值.说明如下.
在git(和其他VCS)之前,为多个文件创建补丁的工作流程可能是,例如,以下内容:
asdf在目录中有项目的源代码asdf-source.latest.asdf-source.new,理想情况下硬链接内部文件).asdf-source.new,尝试编译代码,测试代码等.diff -r asdf-source.latest asdf-source.new >new_feature.patch.产出也随着时间的推移而演变.除了其他东西,git默认使用"统一"输出,可以使用diff的-u参数获取.现在,您可以使用目录名称看到修补程序包含已更改文件的路径.
然后,应用您的补丁的人(或构建脚本等)将使用patch而不是使用git apply或git am.为了使命令能够找到适当的文件,必须使用patch的-pN选项(N显示要删除的目录名和分隔符的数量)从路径中删除目录名.在上面的例子中,使用的命令可以是patch -p1 <new_feature.patch.这使得补丁创建者可以使用他/她自己的目录名.
如果您遇到过使用大量修补程序修补某个项目的脚本(例如,通常用于Linux发行版中稳定包版本的后端移植修补程序),则修补程序的格式可能会有所不同.该patch命令能够正确检测这些格式,但路径(要删除多少个目录)有点困难.有些问题:
patch查找文件可能是危险的(因为它可能会发现一个不同的文件).因此,让所有人发送可以应用的补丁patch -p1似乎是最合理的方式.
创建git时,它采用了合理的默认值(与大多数项目的提交指南(主要是内核)兼容)用于此类选项.多亏了这一点,你可以使用git并将一个格式正确的补丁发送给使用patch它的人,反之亦然(git也可以处理diff创建的补丁).将"a"和"b"作为前缀特别节省空间(以及一小部分带宽),同时保持一切正常.
您可以设置git config diff.mnemonicprefix truegit根据您比较的内容使用不同的前缀(git help config有关详细信息,请参阅参考资料).
If you want to add git diff --no-prefix to your .gitconfig manually, just add the following:
[diff]
noprefix = true
Run Code Online (Sandbox Code Playgroud)
它是为了区分来源和目的地.您还可以将其更改为更有意义:
--src前缀=
<prefix>Run Code Online (Sandbox Code Playgroud)Show the given source prefix instead of "a/".--dst前缀=
<prefix>Run Code Online (Sandbox Code Playgroud)Show the given destination prefix instead of "b/".
http://git-scm.com/docs/git-diff
| 归档时间: |
|
| 查看次数: |
13658 次 |
| 最近记录: |