0

git filter-branchリビジョン履歴からファイルを削除するために使用しなければならなかったとします。すべてのコラボレーターが再度プッシュする前に、すべてのローカル コピーを更新するようにしたいと考えています。これを行う明白な方法は、マスター リポジトリで pre-receive フックを使用して、問題のファイルを導入したリビジョンの元のリビジョン ID が二度と表示されないようにすることです。

そのフックをどのように書くのですか?

4

1 に答える 1

1

私はパラノイアを強く支持します。こう書いてありますが、貢献者が「ブランチが分岐しました」という警告や、マージ コミットが何百もの新しい 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
于 2012-07-11T03:51:17.303 に答える