2015-10-09 96 views
-1

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

childdirectory(這是git倉庫)

changedfile

使用git的差異,是有可能的輸出變化相對於文件一個不同的目錄?如果我在childdirectory運行git的差異--name狀態,它會輸出:

中號changedfile

我需要它輸出:

中號childdirectory/changedfile

我使用一個Git掛鉤並將管道更改爲依賴於相對於父目錄的文件路徑的程序。我無法將父目錄硬編碼到文件路徑,因爲修改後的文件可能比1個目錄更深。

編輯:爲了說明爲什麼我不想硬編碼 - 我打算重複使用這個鉤子來做很多很多的回購,這些回購都將有自己的父路徑路徑。這可能是唯一的解決方案(我不希望),我只需要做一些配置。

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

+0

'-src-prefix'和'--dst-prefix'是否不夠? – torek

+0

我已更新我的問題,以表明我需要使用'--name-status'標誌。 '--src-prefix'和'--dst-prefix'似乎對'--name-status'標誌沒有任何影響。 –

回答

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與嵌入式標籤一個很好已知的輸出形式,所以我們可以把它關掉。)