2017-11-30 4 views
1

私は現在モノレポスで遊んでいて、特定のコミット後に影響を受ける1レベルのサブフォルダをすべてリストから取得しようとしています。gitモノレポの最近のコミットの影響を受けるすべての第1レベルのディレクトリのリストを取得します。

これまでのところ、私は唯一のフォルダ名を取得するために管理しgit diff --name-only $COMMIT_ID..head | xargs -L1 dirnameを使用しgit diff --name-only $COMMIT_ID..head

を使用して影響を受けたすべてのファイルを取り出すことができます。私はミックスにsort | uniqを追加したすべての重複削除する

:私は今、必要なのは、私が唯一の最初のレベルのフォルダを検索確保することであるgit diff --name-only $COMMIT_ID..head | xargs -L1 dirname | sort | uniq

は、私はいくつかを試してみましたproject1ないproject1/srcproject1/lib

、すなわち私はこれまで1つのライナーとしてそれを保つことはできませんでした。ここ

答えて

1

awk

git diff --name-only $COMMIT_ID | awk -F'/' 'NF!=1{print $1}' | sort -u 
  • -F'/'と溶液ラインがスラッシュを含む場合は、最初のレベルのディレクトリ名で最初のフィールド外/
  • NF!=1{print $1}プリントを削減するためにデリミタフィールドを設定している/ 、これは第1レベルに存在するファイルをフィルタリングします。

    readme.md   NF==1 
    project1/file  NF==2 
    project2/src/file NF==3 
    
  • sort -u組み合わせ並べ替えとユニーク

+0

パーフェクト!私はawkの 'NF!= 1'を見逃していました。ありがとうございました! – Coyote

+0

@Coyote喜んで助けてください! 'git diff'の' --dirstat'オプションは、各ディレクトリ内の変更のパーセンテージを表示したい場合にも役立ちますが、これにはサブディレクトリも含まれます – etopylight

関連する問題