Стратегия предотвращения или ловли перезаписи истории мерзавца

Хотя я люблю функцию перезаписи истории мерзавца, как каждый идет об удостоверяющейся истории, не переписывается.

Мы не возражаем против того, что программист делает на их собственной машине, но мы должны удостовериться, что версия не продвинута к серверу, который изменяет историю.

т.е. Мы должны гарантировать, что конкретная версия от прошлого действительно была той версией. Таким образом, это включало бы предотвращение кого-то прохождение через и постоянно удаляет файл из истории или постоянно изменяет файл всюду по всей истории.

39
задан Jacob 18 January 2010 в 12:13
поделиться

2 ответа

Если вы можете запустить:

 git config --system receive.denyNonFastforwards true

на сервере, это должно позаботиться о переписывающей истории, который нажимается на указанный сервер.
Однако это для всего репо, а не для файла SPECEIFC или группы файлов.

GIT CONFIG :

RECIVE.DENYNONFFORDFORWARDFORDS

Если вы передаете, выявляете, что вы уже выдвинули, а затем попробуйте снова нажать, или иначе попытаться нажать на удаленный ветвь, которая не Содержит коммит, что в настоящее время указывает на удаленный ветви, вам будет отказано. Это, как правило, хорошая политика; Но в случае ребазы вы можете определить, что вы знаете, что вы делаете, и можете заставить - обновить удаленную ветвь с помощью флажка -F в вашу кнопку CUSH.

Другой способ сделать это, это через серверные приемы, которые я буду накройте немного. Этот подход позволяет вам делать более сложные вещи, такими как отрицание непередающихся вперед для определенного подмножества пользователей.


Как EbNeter (который знает важность когерентного хранилища - см. Ответ о SVN для миграций Git [Вопрос теперь удален, 10k + только для пользователей]) Комментарии:

Вы можете также добавить Reading.denydeletes true , потому что в противном случае кто-то может просто удалить ветку, а затем подтолкнуть их переписать как новую ветку, эффективно переписываю историю.

Git Config :

Один из обходных путей к политике DenynonFastForward является для пользователя, чтобы пользователь удалить ветку, а затем подтолкнуть его резервным копированием с новой ссылкой. В более новых версиях Git (начиная с версии 1.6.1), вы можете настроить Ready.denydeletes true:

$ Git Config --system remite.denydeletes true

Это отрицает филиал и тег Удаление над нажатой на доску - ни один пользователь не может сделать это. Чтобы удалить удаленные ветви, вы должны удалить файлы REF с сервера вручную. Есть также более интересные способы сделать это на основе для каждого пользователя через ACL, как вы узнаете в конце этой главы.

40
ответ дан 27 November 2019 в 02:50
поделиться

Если вы не используете достаточно новый git для , получите .denyNonFastForwards , вы можете обеспечить соблюдение политики с помощью {pre, post} -receive (среди прочих) перехватчиков на сервере, что позволяет немного повысить степень детализации для конкретных ветвей и т. д.

Некоторые хорошие примеры (в том числе один, запрещающий перезапись истории) используются проектом GNOME для управления всеми имеющимися там репозиториями:

https://git.gnome.org/browse/sysadmin-bin/tree/git

Я бы посмотрел, в частности, на pre-receive-check-policy .

3
ответ дан 27 November 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: