2016-12-16 8 views
1

これはかなり簡単な質問のようです、an answer hereと、それはないかなり私が探している答えです。2つのコミット間で変更されたファイルを、相対パスですべて表示するにはどうすればよいですか?

私は作業が行われたときdevelopとマージされた特徴の枝に私の開発のほとんどの操作を行います。

は、ここでの話です。 &を統合して機能ブランチを削除する前に、私が行ったことを確認したいと思います。私は確認する必要がありますファイルのリストを取得するには、私はこれを行う:

file1.js 
path1/file2.js 
path1/file3.js 

これは私が「と言われます:

git --no-pager diff --name-only develop..HEAD 

ので、例えば、私はこのようなものが表示されることがありますこれらのファイルを変更したので、私は&に行ってみる必要があります。

問題は、これらのファイルパスがすべてリポジトリのルートからの相対パスであることです。準備ができて、

git --no-pager diff --name-only develop..HEAD | xargs atom 

私は、リポジトリのルートに現在だ場合、これは原子内の別のタブにあるすべてのファイルを開きます:私は私のエディタで、関連するすべてのファイルを開くには、次の操作を実行したいです私はそれらを見直す。私は(私はpath1cd編何かをする場合、例えば)別のディレクトリにあることが起こる場合

しかし、私は存在しないファイルを開くために​​試みとして空のタブの束を取得します。レビューを開始する前に、cdをリポジトリのルートに戻しておく必要があります。

これは今朝私をあまりにも頻繁に苛立たせたので、私は解決策を探しに行った。私はそうのように、コマンドに--relativeオプションを追加することを示唆the answer cited aboveが見つかりました:

git --no-pager diff --relative --name-only develop..HEAD 

作品のこの種を、それだけで、または私はリポジトリにいるディレクトリの下に私のファイルを提供します。私はpath1cd編をしたのであれば、上記の例では、私が表示されます:

file2.js 
file3.js 

私が本当に見たいのですがどのようなものです:

に私を許す
../file1.js 
file2.js 
file3.js 

それを​​にパイプし、すべてのファイルを開きます。

私はdiffコマンドのgit helpドキュメントを読んでなかった、とを行い--relativeフラグを使用すると、パスを指定することができますが、それはまた、路外のファイルを除外します。

このような非常に長いコマンドラインの書き込みのショート:

pushd "$(git rev-parse --show-toplevel)" >/dev/null \ 
    && git --no-pager diff --name-only develop..HEAD | xargs atom \ 
    && popd > /dev/null 

は、現在のディレクトリに対して相対的であるパスを持つ2つのコミットの間で変更されたすべてのファイルの一覧を取得する方法はありますか?

答えて

0

Gitには何も組み込まれていませんが、スクリプトやエイリアスを書くのは簡単です。 git rev-parse --show-cdupがトップレベルに到達するために現在ディレクトリに追加するあなたの../ -esの文字列が表示されていることを

注意。既にトップレベルにいる場合、結果は空です。したがって:

git diff --name-only "[email protected]" | sed -e "s,^,$(git rev-parse --show-cdup)," 

あなたはそれだけでfile.jsを言うことができるときに生成../sub/file.jsを持つ気にしない場合は、十分なあなたは近くなります。 とすると、-e式では../../$whereIam/を何も置き換えずにの変数にgit rev-parse --show-toplevelpwdの差を入れて修正できます。

+0

ありがとうございました!それは私がやっていた厄介な 'pushd' /' popd'シャッフルよりもはるかに優れています。 – Kryten

関連する問題