所以我试图让 git diff 适用于 sqlite。基本上我想让 git 比较文件,就好像它们是文本文件一样。在我的存储库中,我有一个.gitattributes包含以下内容的文件:
*.db diff=sqlite3
Run Code Online (Sandbox Code Playgroud)
然后在我的.git/config文件中添加了以下内容:
[diff "sqlite3"]
textconv = sqlite3 "$1" .dump
Run Code Online (Sandbox Code Playgroud)
但这行不通。我收到一条错误消息:
Error: near "/": syntax error
fatal: unable to read files to diff
Run Code Online (Sandbox Code Playgroud)
所以我尝试更改配置以仅回显它作为输入获得的内容:
[diff "sqlite3"]
textconv = echo "$1"
Run Code Online (Sandbox Code Playgroud)
然后我可以看到 git diff 工作,但它输出:
-/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
Run Code Online (Sandbox Code Playgroud)
这是路径两次,但我似乎找不到任何关于为什么会这样以及如何修复它的信息(不使用正则表达式在空格处分割它)。
我在 macOS 10.14.3 上并git --version给出git version 2.20.1 (Apple Git-117)
您可以简单地机械替换:
\n\n\n\n\nRun Code Online (Sandbox Code Playgroud)\ntextconv = sqlite3 "$1" .dump\n
和:
\n\ntextconv = "f(){ sqlite3 \\"$1\\" .dump; }; f"\nRun Code Online (Sandbox Code Playgroud)\n\n该gitattributes文档是这样说的textconv:
\n\n\n该程序应该采用单个参数,即要转换的文件的名称,并在标准输出上生成结果文本。
\n
然后给出这个例子:
\n\n\n\n\nRun Code Online (Sandbox Code Playgroud)\n[diff "jpg"]\n textconv = exif\n
通过添加,$1您可以让 Git 使用第一个参数运行命令,然后使用其他参数运行命令。这些参数由一个参数\xe2\x80\x94 组成,因此您会看到同一个参数两次。如果参数由两个字符串组成,您会看到第一个字符串重复,然后第二个字符串重复一次。
(此行为与 Git 的别名相同。)
\n\n如果您需要使用sqlite3两个参数运行(如 中),则必须发明一个采用一个参数的中间命令(如 中)。然后,该中间命令可以简单地添加最终参数。sqlite3 name-of-file .dumpcommand name-of-file
与别名一样,您可以使用 shell 函数来执行此操作:
\n\n[diff "odd"]\n textconv = "f(){ echo $1 extra; }; f"\n\n$ git diff\ndiff --git a/.gitattributes b/.gitattributes\nindex 9fa72ad450..bf2ef674cb 100644\n--- a/.gitattributes\n+++ b/.gitattributes\n@@ -1,6 +1,6 @@\n * whitespace=!indent,trail,space\n *.[ch] whitespace=indent,trail,space diff=cpp\n-*.sh whitespace=indent,trail,space eol=lf\n+*.sh whitespace=indent,trail,space eol=lf diff=odd\n *.perl eol=lf diff=perl\n *.pl eof=lf diff=perl\n *.pm eol=lf diff=perl\ndiff --git a/check-builtins.sh b/check-builtins.sh\nindex a0aaf3a347..089031a86e 100755\n--- a/check-builtins.sh\n+++ b/check-builtins.sh\n@@ -1 +1 @@\n-/tmp/fo3NBV_check-builtins.sh extra\n+check-builtins.sh extra\nRun Code Online (Sandbox Code Playgroud)\n