簡體   English   中英

如何使用 git diff 輸出相對於非 git 目錄的文件路徑?

[英]How do I output file paths relative to a non-git directory with git diff?

父目錄

子目錄(這是 git repo)

更改文件

使用 git diff,是否可以輸出相對於不同目錄的文件更改? 如果我在子目錄上運行 git diff --name-status ,它將輸出:

M 更改文件

我需要它輸出:

M 子目錄/已更改文件

我正在使用 Git 鈎子並將更改傳送到依賴於相對於父目錄的文件路徑的程序。 我無法將父目錄硬編碼到文件路徑,因為修改后的文件可能比 1 個目錄更深。

編輯:為了澄清為什么我不想硬編碼 - 我計划將這個鈎子重用於很多很多存儲庫,這些存儲庫都有自己的父目錄路徑。 這可能是唯一的解決方案(我希望不是),我只需要對其進行某種配置即可。

編輯:我更新了輸出並澄清我需要它與git diff --name-status標志一起運行。

如果您正在通過管道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有一個很好的已知輸出形式,帶有嵌入的選項卡,因此我們可以關閉它。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM