在 ~/.gitconfig 中进行如下配置(或者使用命令:git config --global diff.noprefix true):
[diff]
noprefix = true之后,Git 输出的 diff 内容,比较的文件名前将不再包含 a/ 和 b/ 这样的前缀。
举例来说,在配置前,使用 git diff 命令,看到的输出可能如下:
diff --git a/package.json b/package.json
index ac6f0b2..f937b7b 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,7 @@
"bugs": {
"url": "https://github.com/laysent/some-codemod/issues"
},
- "version": "0.1.2",
+ "version": "0.2.0",
"license": "MIT",
"scripts": {
"test": "jest"而进行了配置之后,输出如下:
diff --git package.json package.jsonindex ac6f0b2..f937b7b 100644
--- package.json
+++ package.json
@@ -13,7 +13,7 @@
"bugs": {
"url": "https://github.com/laysent/some-codemod/issues"
},
- "version": "0.1.2",
+ "version": "0.2.0",
"license": "MIT",
"scripts": {
"test": "jest"此时,无论是直接在终端复制这个文件名,还是直接点击文件名跳转打开,都比较容易。
需要注意的一点是,如果配置了 noprefix,那么在进行 git diff 创建 Patch 文件并通过 git apply 提交修改的时候,可能会遇到 Git 的报错:
error: git diff header lacks filename information when removing 1 leading pathname component (line 5)
原因就是生成的 Patch 文件,目录名称没有了前缀。针对这种情况,可以改用下面的方案进行 git apply:
git apply -p0 change.patch这里,-p0 表示 Git 在进行补丁操作的时候,需要先删除零层前缀字符,然后再读取真实的目录地址。这里,Git 会根据 / 字符将目录地址拆分开来,然后删除必要的层数,将剩下的部分作为文件地址。默认值是 1,也就是会将 a/package.json 当作 package.json 目录进行处理。如果改成 -p2,那么 a/dir/file 会被当成 file 目录进行处理。
相关的说明可以参考 Git 文档。