0

私たちのプロジェクトの一部の貢献者は、 master で直接作業するのが好きで、まだ忘れていgit pull --rebaseます。

のようなコミットでサーバー側のコミットを拒否する方法はありますMerge branch 'master' of ... into masterか?

4

1 に答える 1

1

VonCpre-receiveコメントしているように、私がその質問のために書いたフックのより単純なバージョンでこれを行うことができます.

あなたが求めていることを言い換えると、pre-receive非線形の履歴を持つマスターへのプッシュを拒否するサーバー上のフックが必要です。つまり、複数の親を持つコミットを導入します。このフックはあなたが望むことをするはずです:

#!/usr/bin/ruby -w

ref_to_check = "refs/heads/master"

STDIN.each_line do |line|
    rev_old, rev_new, ref = line.split(" ")

    if ref == ref_to_check
        merges_introduced = `git rev-list --merges #{rev_old}..#{rev_new}`
        unless merges_introduced.strip.empty?
            STDERR.puts "Refusing push to #{ref}, since it would create non-linear"
            STDERR.puts "history by introducing the following merge commits:"
            STDERR.puts merges_introduced
            exit(1)
        end
    end
end

更新:リンクされた質問に対する Jefromi の回答git rev-list --mergesで、彼は using の方がはるかに優れていることを示しているので、それを使用するようにこのスクリプトを更新し、プッシュが更新しようとしているすべての参照をループするように修正しました。

于 2011-03-30T09:00:04.577 に答える