В какой момент git завершает свои операции по выполнению?

У меня есть утилита в Go, которая запускает проверку фиксации через os/exec, а затем выполняет некоторые операции с файлами из фиксации.

Подозреваю, что на данный момент эта команда возвращает свой код возврата:

_, err := exec.Command("git", "-C", sourceDir, "checkout", hash).Output()

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

Что, если это очень большой репозиторий, в котором одна фиксация сильно отличается от другой и требуется время для синхронизации удаленных / добавленных / измененных файлов при переключении с одной фиксации на другую?

Могу ли я запустить свои операции сразу после того, как git checkout вернет 0?

Вы получаете код возврата, когда процесс завершается. Что еще он будет делать, если перестанет работать?

JimB 13.07.2018 17:16

@JimB, сборка мусора. Хотя я не думаю, что проверка может вызвать это, поскольку она не изменяет репозиторий.

Peter 13.07.2018 17:36

@Peter: Я не думаю, что git разветвляет новый процесс для асинхронного запуска GC. Если после выхода из git с репо что-то работало, что могло помешать вам использовать файлы, было бы небезопасно использовать и из cli.

JimB 13.07.2018 17:41

@JimB, gc.autoDetach контролирует это и включен по умолчанию.

Peter 13.07.2018 17:45

Что мне нравится в SO, так это то, что даже если я получаю больше голосов против, чем ожидалось или в среднем, я все равно могу извлечь решение из комментариев или ответов. Спасибо, товарищи!

Sergei Basharov 13.07.2018 18:02

@Peter: спасибо за информацию (хотя это по-прежнему не влияет ни на извлеченные файлы, ни на оформление заказа в целом)

JimB 13.07.2018 18:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

git checkout не выходит, пока проверка не будет завершена (или не завершится ошибкой).

Комментарии об auto-gc в фоновом режиме здесь не особенно актуальны, поскольку auto-gc не имеет отношения к завершению проверки. В этом отношении git checkout не запускает git gc --auto: в этом нет смысла, поскольку git checkout не создает новые объекты Git. Достаточно актуальный список вещей, которые делать вызывают git gc --auto (примерно по состоянию на 2.18):

  • git am
  • git commit
  • git fetch
  • git merge
  • git receive-pack (серверы)
  • git rebase

Другие вопросы по теме