如何使用git diff输出相对于非git目录的文件路径?

时间:2015-10-09 16:46:56

标签: git

  

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标志运行。

1 个答案:

答案 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有一个很好的已知输出形式,带有嵌入式标签,所以我们可以关闭它。)