Подтвердить что ты не робот

Какие сигналы можно безопасно использовать для уничтожения процесса Git, а какие нет?

  • Какие сигналы безопасны, а какие нет?

  • Для тех сигналов, которые небезопасны, какой ущерб может быть причинен при убийстве процесса Git? Может ли рабочее дерево оставаться в состоянии undefined? Может быть поврежден файл .git/index или даже .git/objects-database?

  • Являются ли файлы, написанные в какой-то "атомной" операции с помощью Git? (Рабочие файлы дерева,.git/index, файлы конфигураций и т.д.)

Обновить: более точный вопрос о сигналах

4b9b3361

Ответ 1

На самом деле, git пытается быть полностью транзакционным, т.е. пытается никогда не покидать хранилище в несогласованном состоянии, независимо от того, когда и как операция прерывается - см. этот вопрос: Может ли репозиторий git быть поврежден, если команда, изменяющая его, сбой или отменяется?

Поэтому не имеет значения, как вы завершаете процесс git, если используете SIGTERM, SIGKILL или красную кнопку питания. Исключение, как указано в ответе выше, состоит в том, что файлы в рабочем каталоге могут быть соединены файлами из разных ветвей, потому что файлы не могут быть заменены сразу.

Тем не менее, безопасность транзакций трудно проверить (так как есть много угловых случаев), поэтому я не стал бы полагаться на 100% на git в этой ситуации. Обычно вы должны быть в порядке, но время от времени вы можете столкнуться с ошибкой и испортить репозиторий.

Ответ 2

Это зависит от того, что делает GIT, когда вы пытаетесь его убить.

Если вы убьете его во время клонирования, убедитесь, что он останется в некотором частично неполном состоянии, но из него легко восстановить: удалите грязный частичный клон и снова клон.

По моему опыту, GIT не убивает файлы, которые он управляет, когда он терпит неудачу. Я убил его в середине толчков, не нанеся большого ущерба файлам, которые я изменил. Разумеется, журнал сообщений может немного зависеть.

Без более подробной информации, чем вы предоставили, трудно сказать.