私が使用しているのと同じ git リポジトリから発信された一連のファイルが送信されましたが、それらは古いコミットに対して開発されたものです。彼らが使用したコミットを見つける方法は? 差分の最小行のようなもの。
質問する
485 次
1 に答える
5
彼らが使用したコミットを見つける方法は? 差分の最小行のようなもの。
まさにそれを行うことができます: ターゲット ディレクトリに対して最小の差分を持つコミットを見つけます。リポジトリ内のすべてのコミットに対してループを実行し、それぞれについてターゲットディレクトリとの差分を計算し、差分が最小のものを覚えておいてください。
リポジトリが に./repo
あり、問題のファイルが にあるとします./target
。
#!/bin/sh
cd repo
HEAD=$(git rev-parse HEAD)
git log --pretty='%H' | while read rev; do
git checkout -q $rev
lines=$(diff -ruN -x .git . ../target | wc -l)
if ! [[ "$minlines" ]] || [[ $lines -lt $minlines ]]; then
minlines=$lines
commit=$rev
echo "$lines $rev"
fi
[[ $lines -eq 0 ]] && break
done | tail -1
git checkout $HEAD
長い歴史を持つリポジトリの場合、これにはしばらく時間がかかりますが、機能します。差分のサイズに続いて、差分が最小のコミットのコミット ID が出力されます。
このスクリプトの実行中に中断した場合は、適切なブランチ ヘッド (例: git checkout master
) をチェックアウトする必要があります。
于 2012-12-05T21:50:19.550 に答える