* * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * 100 * *1004* * * * * * * * * * *1004* 1006 * вид проблемы, возникающей при использовании git pull
.Если вы избегаете git pull
, заменяя каждую git pull
двумя командами Git, которые запускает Git git pull
, проблема может быть более очевидной (или может просто перейти ко второй команде Git ?):
git fetch && git merge
или:
git fetch && git rebase
(но не делайте этого!).
Проблема, которая, я надеюсь, теперь очевидна, но, возможно,просто скрытый во второй половине &&
здесь, это то, что git merge
или git rebase
изменит рабочее дерево .Если у вас есть какие-то команды, работающие в рабочем дереве , в то время как вы изменяете рабочее дерево, эти команды будут видеть несовместимые наборы файлов.
Предположим,например, git merge
или git rebase
изменят как main.py
, так и routine.py
.Сначала он может изменить main.py
, и в этот момент интерпретатор Python загрузится и будет использовать обновленный main.py
, для которого требуется новый код из routine.py
, но сам Git еще не дошел до обновления routine.py
.
Обычный способ избежать этой проблемы - убедиться, что рабочее дерево обновлено до запуска любых операций, будь то задания Jenkins, этапы в одном задании Jenkins,или просто все, что вы намереваетесь запустить самостоятельно.Если рабочее дерево обновлено до , вам не нужно git pull
, потому что оно обновлено.
Если вы хотите, чтобы задание Jenkins запускало определенные команды Git,Работа, вероятно, должна иметь свое собственное дерево работы.Частное рабочее дерево, будь то основное рабочее дерево отдельного репозитория или просто добавленное рабочее дерево общего репозитория, имеет свой собственный HEAD и индекс, а следовательно, и частное index.lock
.