diff.mnemonicprefix有什么作用?

rin*_*t.6 29 git

我注意到SourceTree使用此配置选项执行git命令:

git -c diff.mnemonicprefix=false 
Run Code Online (Sandbox Code Playgroud)

这就是git docs关于这个选项的说法:

diff.mnemonicprefix

如果设置,git diff使用的前缀对与标准"a /"和"b /"不同,具体取决于所比较的内容.当此配置生效时,反向差异输出也会交换前缀的顺序:

git diff 比较(i)ndex和(w)ork树;

git diff HEAD 比较(c)ommit和(w)ork树;

git diff --cached 比较a(c)ommit和(i)ndex;

git diff HEAD:file1 file2 比较(o)对象和(w)ork树实体;

git diff --no-index a b 比较两个非git的东西(1)和(2).

我还是不明白这意味着什么.谁能解释一下?

Chr*_*ris 32

git diff显示有关它正在比较的文件的一些元数据.通常你可能会看到这样的事情:

diff --git a/foo/bar.txt b/foo/bar.txt        <--
index abcd123..1234abc 100644
--- a/foo/bar.txt                             <--
+++ b/foo/bar.txt                             <--
Run Code Online (Sandbox Code Playgroud)

注意如何使用a/b/用箭头指示的三条线来区分文件.这是非助记符; 人物ab没有真正的意义.

diff.mnemonicprefix启用,为你所援引的文件中描述的被选择这些字符.例如,如果您对本地副本进行了更改并与索引进行比较(例如,与git diff),您会看到类似的内容

diff --git i/foo/bar.txt w/foo/bar.txt
index abcd123..1234abc 100644
--- i/foo/bar.txt
+++ w/foo/bar.txt
Run Code Online (Sandbox Code Playgroud)

代替.字符iw分别用于指示索引和工作副本.

文档中列出的其他案例的工作方式类似.

  • @Roberto,我不明白你在问什么.此选项仅影响差异的显示方式.它不应该阻止`fetch`,`commit`,`push`或`pull`工作(或使它们工作). (4认同)
  • 嗨@Chris,如果我只是从命令中删除"diff.mnemonicprefix = false"参数,fetch/commit/push/pull命令仍然可以工作吗? (2认同)