У меня есть утилита в Go, которая запускает проверку фиксации через os/exec, а затем выполняет некоторые операции с файлами из фиксации.
Подозреваю, что на данный момент эта команда возвращает свой код возврата:
_, err := exec.Command("git", "-C", sourceDir, "checkout", hash).Output()
Все дерево файлов в папке обновлено, и я могу делать с файлами все, что захочу, без необходимости ждать завершения некоторых операций в фоновом режиме.
Что, если это очень большой репозиторий, в котором одна фиксация сильно отличается от другой и требуется время для синхронизации удаленных / добавленных / измененных файлов при переключении с одной фиксации на другую?
Могу ли я запустить свои операции сразу после того, как git checkout вернет 0?
@JimB, сборка мусора. Хотя я не думаю, что проверка может вызвать это, поскольку она не изменяет репозиторий.
@Peter: Я не думаю, что git разветвляет новый процесс для асинхронного запуска GC. Если после выхода из git с репо что-то работало, что могло помешать вам использовать файлы, было бы небезопасно использовать и из cli.
@JimB, gc.autoDetach контролирует это и включен по умолчанию.
Что мне нравится в SO, так это то, что даже если я получаю больше голосов против, чем ожидалось или в среднем, я все равно могу извлечь решение из комментариев или ответов. Спасибо, товарищи!
@Peter: спасибо за информацию (хотя это по-прежнему не влияет ни на извлеченные файлы, ни на оформление заказа в целом)





git checkout не выходит, пока проверка не будет завершена (или не завершится ошибкой).
Комментарии об auto-gc в фоновом режиме здесь не особенно актуальны, поскольку auto-gc не имеет отношения к завершению проверки. В этом отношении git checkout не запускает git gc --auto: в этом нет смысла, поскольку git checkout не создает новые объекты Git. Достаточно актуальный список вещей, которые делать вызывают git gc --auto (примерно по состоянию на 2.18):
git amgit commitgit fetchgit mergegit receive-pack (серверы)git rebase
Вы получаете код возврата, когда процесс завершается. Что еще он будет делать, если перестанет работать?