2017-07-14 403 views
1

它的工作原理是這樣的:如何在git diff命令中顯示相對路徑?

MYPC /d/home/project/some/path (master) 
$ git diff --name-only --cached 
root.txt 
some/path/relative.txt 

即它顯示來自GIT根目錄的路徑,但我需要從當前目錄的相對路徑。

預期的結果:

$ git diff --name-only --cached --AND_SOME_OPTION 
../../root.txt 
relative.txt 

在常理,它應該像git status

P.S. --relative選項不起作用,因爲它會顯示來自此目錄的文件。 在我們的例子中,它只會顯示relative.txt

P.P.S

使用--git-dir不起作用以及:

$ git --git-dir=$(git rev-parse --show-toplevel)/.git diff --cached --name-only 
root.txt 
some/path/relative.txt 
+0

的可能的複製[如何使相對於當前目錄的git的日誌顯示文件路徑?](HTTPS:/ /stackoverflow.com/questions/43750693/how-to-make-git-log-show-file-paths-relative-to-current-directory) – pyx

+0

@pyx,不,解決方案形式的問題不適合我。 – Kirby

回答

2

git status -s已經輸出可以很容易分離的相對路徑。

如果你需要使用git diff,可以通過管道輸出到realpath,如果有的話:

$ git diff --name-only | \ 
    xargs -I '{}' realpath --relative-to=. $(git rev-parse --show-toplevel)/'{}' 
../../root.txt 
relative.txt 
+0

是的,我絕對需要'git-diff',因爲有'--cached'這個選項適用於我。感謝帖子! – Kirby

0

到目前爲止,我沒有找到一種方法,通過使用git-diff使用相對路徑。

對我來說,唯一的工作方式:

$ git status -s | awk '{print $2}' 
../../root.txt 
relative.txt 

或者

$ git status -s | cut -c4- 

最後一種方法在How can I run "git status" and just get the filenames解釋。 。第一個非常相似。 :)

但它會很好找到非管道方式。看來,沒有辦法避免使用--cached。 所以,大多數情況下這不是一個答案。