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

Git ярлык, чтобы потянуть с клоном, если там нет локального?

Есть ли способ с одной командой получить последнее зеркало удаленного репо? Это

  • если локального репо еще нет: clone
  • если он там: тянуть

Я знаю, что я мог бы script это вокруг (например, if [ -d repo ]; then (cd repo && git pull); else git clone $repourl;fi ), но мне нужен простейший возможный кросс-платформенный способ (фактически используемый для Jenkins-CI, который, как я знаю, делает это по умолчанию, однако мне нужно 2 repos для которых поддержка ограничена).

Git имеет похожие ярлыки для других вещей (например, checkout -b и pull pull), поэтому мне интересно, пропустил ли я что-то. Спасибо!

4b9b3361

Ответ 1

git pull знает, откуда клонировать, потому что локальное репо имеет удаленную регистрацию в локальной конфигурации. Он работает от рабочего дерева.

Но git clone нет, он должен иметь явный удаленный url, переданный в параметре для клонирования. Он работает за пределами рабочего дерева.

Основной причиной такого сокращения не существует:

  • вы git init редко для определенного репо: это одноразовая команда в жизни репо.
    Кроме того, для завершения может потребоваться дополнительная команда: если вы, например, havesubmodules, вам нужно добавить git submodule update --init.
  • вы git pull часто в пределах определенного репо. git pull сам по себе является ярлыком (для git fetch + git merge). Даже git pull --rebase является еще одним ярлыком для git fetch + git rebase.

Учитывая количество раз, когда вы должны использовать git init, такой ярлык не является высоким приоритетом.

Итак, script остается самым надежным способом определить, что вам нужно.

Ответ 2

Нет, учитывая, что команды, которые работают с существующими репозиториями, все предполагают, что они выполняются внутри заданного репо.

Тем не менее, если вы работаете в оболочке, вы можете просто использовать встроенные оболочки. Например, здесь bash:

if cd repo; then git pull; else git clone https://server/repo repo; fi

Это проверяет, является ли repo допустимым каталогом, и если да, то внутри него находится pull; в противном случае для создания каталога создается clone.

Ответ 3

Самый чистый однострочный слой может быть

git -C repo pull || git clone https://server/repo repo