git filter-branch
リビジョン履歴からファイルを削除するために使用しなければならなかったとします。すべてのコラボレーターが再度プッシュする前に、すべてのローカル コピーを更新するようにしたいと考えています。これを行う明白な方法は、マスター リポジトリで pre-receive フックを使用して、問題のファイルを導入したリビジョンの元のリビジョン ID が二度と表示されないようにすることです。
そのフックをどのように書くのですか?
git filter-branch
リビジョン履歴からファイルを削除するために使用しなければならなかったとします。すべてのコラボレーターが再度プッシュする前に、すべてのローカル コピーを更新するようにしたいと考えています。これを行う明白な方法は、マスター リポジトリで pre-receive フックを使用して、問題のファイルを導入したリビジョンの元のリビジョン ID が二度と表示されないようにすることです。
そのフックをどのように書くのですか?
私はパラノイアを強く支持します。こう書いてありますが、貢献者が「ブランチが分岐しました」という警告や、マージ コミットが何百もの新しい SHA1 ハッシュを突然取り込むという事実に気付くことを願っています。
次のようなものは、ほとんどの方法で取得できるはずです。残念ながら、今はテストできませんが、次の例git-receive-pack
のように、とgithooks
の man ページが役に立ちました。
#!/bin/sh
while read oldrev newrev refname
do
git rev-list ^$oldrev $newrev | grep "<problem-hash>"
if test $? = 0; then
echo "Problematic hash found. Please contact the maintainer."
exit 1
fi
done
pre-receive を使用してファイル自体を検索する:
#!/bin/sh
while read oldrev newrev refname
do
git diff $oldrev $newrev --name-only | grep "<full_file_path>"
if test $? = 0; then
echo "Problematic hash found. Please contact the maintainer."
exit 1
fi
done