2017-07-14 84 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

可能な複製(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のログを表示するファイルパスを作る方法]の

$ 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の使用を避ける方法はありません。 だから、それはほとんど答えではありません。

関連する問題