Как избежать "Объединить ветку 'master' из ssh: //gdcm.git.sourceforge.net/gitroot/gdcm/gdcm" - PullRequest
0 голосов
/ 30 марта 2011

Некоторые участники нашего проекта любят работать над мастером напрямую и все еще забывают git pull --rebase.

Есть ли способ на коммите на стороне сервера с коммитом вроде Merge branch 'master' of ... into master?

1 Ответ

1 голос
/ 30 марта 2011

Как комментарии VonC , вы можете сделать это с помощью более простой версии pre-receive ловушки, которую я написал для этого вопроса.

Чтобы перефразировать то, что вы спрашиваете, вы хотели бы подключить pre-receive на своем сервере, который будет отклонять любой push to master, который имеет любую нелинейную историю, то есть вводит любой коммит с более чем одним родителем. Этот хук должен делать то, что вы хотите:

#!/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

Обновление: в Ответ Джефроми на связанный вопрос, он демонстрирует, что использование git rev-list --merges намного удобнее, поэтому я обновил этот скрипт, чтобы использовать его, и исправил его зацикливание каждый реф, который пытается обновить пуш.

...