При работе с общим репозиторием очень легко возникает ситуация, когда человек, выполняя обновления не через git rebase, получает у себя merge, при отсутствии какого-либо конфликта. У нас есть команда gpull, которая по умолчанию выполняет git pull --ff-forward-only, запрещая создания merge (и выполняет rebase если вызвать как gpull -r). Мы постараемся её всем привить, но хотелось бы запрета на стороне сервера: гит-сервер должен отклонять пуш, если в списке коммитов есть merge.
Женя, ты возьмёшься провести необходимые исследования и сделать хук для git или патч, в крайнем случае? Надо бы решить эту задачу, чтобы не позволять случайных ошибок.
Отладил скрипт взяв варианты проверки из примера: http://stackoverflow.com/questions/5488442/pre-receive-hook-on-server-side-that-refuse-any-push-to-master-which-has-any-non Осталось внести изменения и собрать.
Сделал сборку 0.3-alt1.eter46.M60P.47.Build1 для p6 (0.3-alt1.eter47 для сизифа). Обновил git.eter и git.office. Нужно проверить, как всё работает. Для управления проверки и отклонения пакетов коммитов с "мёрджами" добавлена новая команда: $ ssh git.eter help|grep merges merges <path to git repository> [<value>] $ ssh git.eter init-db test-merges girar-init-db: /people/sin/packages/test-merges.git $ ssh git.eter merges test-merges no $ git push git.eter:packages/test-merges master Counting objects: 7282, done. Delta compression using up to 4 threads. Compressing objects: 100% (2799/2799), done. Writing objects: 100% (7282/7282), 1.06 MiB, done. Total 7282 (delta 5015), reused 6554 (delta 4450) remote: Merge commit detected: 52d5de9fc44b8a975fda1be0099e4a72d3fb9d78 To git.eter:packages/test-merges ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'git.eter:packages/test-merges' $ git push git.eter:packages/test-merges old Counting objects: 3711, done. Delta compression using up to 4 threads. Compressing objects: 100% (1474/1474), done. Writing objects: 100% (3711/3711), 571.57 KiB, done. Total 3711 (delta 2596), reused 3211 (delta 2220) remote: Merge commit detected: a878a0213fcde08ec0de19b71e64f44faaf13c49 To git.eter:packages/test-merges ! [remote rejected] old -> old (pre-receive hook declined) error: failed to push some refs to 'git.eter:packages/test-merges' $ ssh git.eter merges test-merges yes $ git push git.eter:packages/test-merges old Counting objects: 3711, done. Delta compression using up to 4 threads. Compressing objects: 100% (1474/1474), done. Writing objects: 100% (3711/3711), 574.96 KiB, done. Total 3711 (delta 2597), reused 3211 (delta 2220) remote: girar-sendmail: email notification about `refs/heads/old' update sent. remote: Repacking repository... done remote: Updating committer date cache... done To git.eter:packages/test-merges * [new branch] old -> old $ ssh git.eter merges test-merges no $ git push git.eter:packages/test-merges master:old Counting objects: 3681, done. Delta compression using up to 4 threads. Compressing objects: 100% (1326/1326), done. Writing objects: 100% (3572/3572), 516.66 KiB, done. Total 3572 (delta 2414), reused 3348 (delta 2229) remote: Merge commit detected: 52d5de9fc44b8a975fda1be0099e4a72d3fb9d78 To git.eter:packages/test-merges ! [remote rejected] master -> old (pre-receive hook declined) error: failed to push some refs to 'git.eter:packages/test-merges'
(В ответ на comment #3) > Сделал сборку 0.3-alt1.eter46.M60P.47.Build1 для p6 (0.3-alt1.eter47 для > сизифа). Обновил git.eter и git.office. Нужно проверить, как всё работает. > > Для управления проверки и отклонения пакетов коммитов с "мёрджами" добавлена > новая команда: > $ ssh git.eter help|grep merges > merges <path to git repository> [<value>] Для /projects у нас настроено shared по умолчанию для новых. Можно ли сделать для новых проектов в /projects отключенное разрешение на merges?
Готово: 0.3-alt1.eter46.M60P.47.Build2 (0.3-alt1.eter47.Build1)
Не понимаю, что означает этот вывод: $ ssh git.eter merges /projects/korinf/korinf.git default
$ ssh git.eter merges girar no (by default)