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), поэтому мне интересно, пропустил ли я что-то. Спасибо!
Ответы
Ответ 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