parentdirectory
childdirectory(这是git repo)
changedfile
使用git diff,是否可以输出相对于不同目录的文件更改?如果我在childdirectory上运行git diff --name-status,它将输出:
M changedfile
我需要输出:
M childdirectory / changedfile
我正在使用Git钩子并将更改传递给依赖于相对于父目录的文件路径的程序。我无法将父目录硬编码到文件路径,因为修改后的文件可能比1目录更深。
编辑:为了澄清为什么我不想硬编码 - 我计划重复使用这个钩子,许多,许多repos都将有来自parentdirectory的路径。它可能是唯一的解决方案(我希望不是),我只需要进行某种配置。
编辑:我更新了输出并澄清了我需要它以git diff --name-status
标志运行。
答案 0 :(得分:0)
如果您要输出git diff --name-status
的输出,为什么不简单地在管道中添加sed
来调整路径?
$ git diff --name-status HEAD^ HEAD
M Documentation/RelNotes/2.5.0.txt
$ git diff --name-status HEAD^ HEAD | sed $'s,[ACDMRTUX]\t,&dir/,'
M dir/Documentation/RelNotes/2.5.0.txt
($'...'
表单允许使用\t
对标签进行编码。通常在脚本中我设置变量 - TAB=$'\t'
- 然后根据需要使用双引号和${TAB}
插入标签。通常在脚本中我也需要扩展其他变量,所以这让我以一致和清晰的方式使用它们,而不是切换一堆形式:
cmd "arg $VAR"$'\t'"$ANOTHER"$'\r\n'"$MORE etc"
在任何情况下,这里的要点是--name-status
有一个很好的已知输出形式,带有嵌入式标签,所以我们可以关闭它。)