为什么git diff --textconv使用路径两次?

时间:2019-06-03 13:43:15

标签: git

所以我试图让git diff为sqlite工作。基本上,我想让git比较文件,就好像它们是文本文件一样。在我的存储库中,我有一个@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 2) { if(resultCode == Activity.RESULT_OK){ String message=data.getStringExtra("MESSAGE"); Toast.makeText(getApplicationContext(), "Đã thêm danh bạ: " + message, Toast.LENGTH_SHORT).show(); } } } 文件,其中包含以下内容:

.gitattributes

然后在我的*.db diff=sqlite3 文件中添加以下内容:

.git/config

但这不起作用。我收到错误消息:

[diff "sqlite3"]
    textconv = sqlite3 "$1" .dump

因此,我尝试更改配置以仅回显其输入内容:

Error: near "/": syntax error
fatal: unable to read files to diff

然后我可以看到git diff起作用了,但是它输出如下:

[diff "sqlite3"]
    textconv = echo "$1"

这是路径的两倍,但是我似乎找不到关于为什么这样以及如何解决它的任何信息(无需使用正则表达式在空格处将其分割)。

我使用的是macOS 10.14.3,-/var/folders/mn/_1zkhxm93dq787rf0n1p_vyr0000gn/T//blFdBa_database.db /var/folders/mn/_1zkhxm93dq787rf0n1p_vyr0000gn/T//blFdBa_database.db +path/to/the/database/database.db path/to/the/database/database.db 给出了git --version

1 个答案:

答案 0 :(得分:1)

您可以简单地机械替换:

textconv = sqlite3 "$1" .dump

具有:

textconv = "f(){ sqlite3 \"$1\" .dump; }; f"

为什么

The gitattributes documentation谈到textconv

  

程序应采用一个参数,即要转换的文件名,并在stdout上生成结果文本。

然后以这个为例:

    [diff "jpg"]
            textconv = exif

通过添加$1,Git使用第一个参数运行命令,然后使用参数运行命令。参数包含一个参数,因此您会两次看到一个参数。如果参数由两个字符串组成,则您会看到第一个重复,然后第二个重复一次。

(此行为与Git别名相同。)

如果您需要使用{em>两个参数运行sqlite3,如sqlite3 name-of-file .dump一样,则必须发明一个采用 one 参数的中间命令,像command name-of-file中一样。然后,该中间命令可以简单地添加最终参数。

与别名一样,您可以使用shell函数来做到这一点:

[diff "odd"]
    textconv = "f(){ echo $1 extra; }; f"

$ git diff
diff --git a/.gitattributes b/.gitattributes
index 9fa72ad450..bf2ef674cb 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,6 +1,6 @@
 * whitespace=!indent,trail,space
 *.[ch] whitespace=indent,trail,space diff=cpp
-*.sh whitespace=indent,trail,space eol=lf
+*.sh whitespace=indent,trail,space eol=lf diff=odd
 *.perl eol=lf diff=perl
 *.pl eof=lf diff=perl
 *.pm eol=lf diff=perl
diff --git a/check-builtins.sh b/check-builtins.sh
index a0aaf3a347..089031a86e 100755
--- a/check-builtins.sh
+++ b/check-builtins.sh
@@ -1 +1 @@
-/tmp/fo3NBV_check-builtins.sh extra
+check-builtins.sh extra