У меня есть некоторые файлы (например, некоторые файлы версий) в удаленном репозитории, которые не должны быть изменены будущими коммитами. Есть ли способ удостовериться, что будущие пользователи, которые совершают этот файл, не смогут переопределить файл на удаленном компьютере, но все равно смогут нажать. Есть ли более простой способ сделать это, чем использовать githooks? Я не хочу создавать коммит, который отменяет изменение пользователей в githook. Есть ли более чистый способ сделать это?Есть ли способ предотвратить фиксацию файла в удаленном репозитории?
ответ
Вам не нужно создавать дополнительную фиксацию, отменяющую изменения пользователя, если вы используете крючок pre-receive
. Этот крючок позволяет вам проверять изменения, которые были перенесены на ваше репо, и отклонять их (все или ничего), если они вносят изменения в запрещенный файл (ы). Или, если вы предпочитаете просто пропустить изменения в этом файле и разрешить их другие изменения, используйте крюк update
, чтобы отклонить только изменения запрещенных файлов, а также разрешить другим. (Но это нарушает транзакционную целостность их нажатия, поэтому вы делаете предположение, что другие изменения не будут зависеть от изменений, которые они пытались сделать для запрещенных файлов.)
Есть ли способ выполнить крюк обновления при слиянии (т. Е. Когда происходит запрос на перенос)? –
№ 'update' для тех случаев, когда принимается нажатие. Если эти файлы изменяются во время притяжения, это сложнее, так как 'pre-commit' не вызывается тогда. Существует 'post-merge', но это вызвано после завершения слияния, поэтому все, что вы могли бы сделать, это вернуть изменения в запрещенные файлы. –
Я думаю, что вы путаете крючки на стороне сервера и клиентские крючки. –
Я думаю, что вам нужно на основе ваша потребность (я, может быть неправильно здесь) заключается в следующем: -
чтобы временно игнорировать изменения в определенном файле: запустить
git update-index --assume-unchanged <file>
Затем, когда вы хотите, чтобы отслеживать изменения снова:
git update-index --no-assume-unchanged <file>
http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html
Это сохранит файл в мерзавца репо. Любые локальные изменения, сделанные в этом файле, не могут быть добавлены, зафиксированы и перенаправлены на дистанционное репо.
Как сделать это проще, чем это возможно? Техника крючков существует специально для этой цели. Напишите крючок, который проверяет файлы и возвращает ошибку, если что-то не так. – oklas