Я мог бы воспользоваться некоторыми рекомендациями экспертов по git относительно того, как сделать операции push в безопасных репозиториях.В основном у меня есть план о том, как это сделать, и я мог бы воспользоваться некоторыми советами о том, является ли план вменяемым или нет:)
Обычно, когда вы переходите в не-пустой репозиторий в git, его рабочей копии и индексене обновляются.Как я обнаружил, это может вызвать серьезные проблемы, если вы забудете позже обновить их вручную!
В нашей группе у нас есть несколько «центральных» репозиториев, из которых люди клонируют и возвращаются, но многиелюди также хотят иметь возможность создавать клоны своих клонов и толкать / тянуть их между собой по мере необходимости в истинно распределенном режиме.Чтобы сделать это безопасным, я хочу убедиться, что каждый репозиторий, созданный с помощью «clone» или «init», имеет автоматически установленный хук post-receive, который обновит рабочий каталог и индекс после операции push, чтобы синхронизироваться сnew HEAD.
Я обнаружил, что могу это сделать, создав каталог шаблонов с моим ловушкой post-receive в подкаталоге hooks, а затем заставив всех в моей группе выполнить:
git config --global init.templatedir /path/to/template/dir
В настоящее время мой хук после получения выглядит следующим образом:
export GIT_WORK_TREE=..
git checkout -f HEAD
Это SEEMS для работы по желанию, но у меня есть некоторая неопределенность в отношении команды извлечения.Для целей синхронизации рабочего каталога и индекса с состоянием в HEAD эквивалентны "git checkout -f HEAD" и "git reset --hard HEAD"?
Я спрашиваю, потому что, хотя я знаю, что "gitreset --hard HEAD "будет делать то, что я хочу, использование его в хуке post-receive значительно замедляет операции push в моем тестировании (кажется, что выполняется новая проверка всех файлов, независимо от того, является ли файл грязным или чистымв рабочем реж)."git checkout -f HEAD" ВИДЕТЬ, чтобы сделать ту же самую вещь намного быстрее (получите мне чистый рабочий каталог и индекс, синхронизированный с HEAD), но я немного нервничаю, учитывая склонность команды checkout делать на летусливается с незафиксированными изменениями рабочего каталога.Эта команда действительно даст мне рабочий каталог и индекс, которые точно соответствуют состоянию в HEAD во всех случаях (включая, например, удаление файлов, переименования и т. Д.)?
Заранее спасибо за любой совет!