3

gitで、ブランチヘッドから戻って、特定のファイルを含む(必ずしもタッチする必要はない)すべてのコミットを見つけるにはどうすればよいですか?「touches」バージョンは次のように記述できます。

git log mybranch -- filename | grep "^commit" | awk '{print $2}'

しかし、私がやろうとしていること、つまり特定のファイル(a pom.xml)を含むすべてのリビジョンをビルドすることについては、これだけでは十分ではありません。何か案は?

4

2 に答える 2

6

別の方法として、これはさまざまなリビジョンをチェックする必要なしに機能するようです。

for REV in `git rev-list <mybranch>`
do
  HASPOM=`git ls-tree --name-only -r $REV | grep '<filename>'`
  echo "$REV $HASPOM" | awk 'NF==2{print $1}{}'
done
于 2013-05-19T08:54:29.200 に答える
2

これが手っ取り早いbashソリューションです。任意のブランチから到達可能なすべてのコミットIDのリストをフェッチし、それらを反復処理して、各コミットをチェックアウトします。コミットをチェックアウトした後にファイルが存在する場合は、そのコミットIDが出力されます。

これにより、を介して作業ディレクトリが破棄されますgit checkout -f。実行する前に変更を隠してください。

for x in `git log --all | grep -o "[a-z0-9]\{40\}"`
do
  git checkout -f $x &> /dev/null
  if [ -e "config/pom.xml" ]
  then
    echo $x
  fi  
done
于 2012-08-31T16:20:55.160 に答える