Допустим, у меня есть каталог /X/Y
, который является git-репозиторием. Можно ли как-то вызвать команду как git pull
изнутри /X
, но нацеленную на /X/Y
каталог?
РЕДАКТИРОВАТЬ: я думаю, мне было интересно: возможно ли это сделать с помощью команды git, но без необходимости изменять каталоги?
ПРИМЕЧАНИЕ: я принял ответ VonC, так как он намного элегантнее предыдущих вариантов. Если вы пользуетесь Git старше 1.8.5, см . Ответ bstpierre ниже .
Ответы:
Начиная с git 1.8.5 (4 квартал 2013 года) , вы сможете «использовать команду Git, но без необходимости менять каталоги».
Смотрите коммит 44e1e4 от Назри Рамлия :
Так как Git 2.3.4 (март 2015 г.), а также совершать 6a536e2 по Karthik Наяка (
KarthikNayak
) ,git
будет относиться к «git -C '<path>'
» как не-оп , когда<path>
пусто.4 года спустя Git 2.23 (Q3 2019) документирует, что '
git -C ""
' работает и не меняет каталогЭто означает, что документация теперь (наконец) включает в себя:
В
git -C
качестве примера вы можете увидеть использование с Git 2.26 (Q1 2020).См. Коммит b441717 , коммит 9291e63 , коммит 5236fce , коммит 10812c2 , коммит 62d58cd , коммит b87b02c , коммит 9b92070 , коммит 3595d10 , коммит f511bc0 , коммит f6041ab , коммит f46c243 , коммит 99c049b , коммит 3738439 , коммит 7717249 , коммит 20af8, дек 8 от Denton Лю (
Denton-L
) .(Слиты Junio C Hamano -
gitster
- в фиксации 381e8e9 , 05 Feb 2020)источник
apt-get install software-properties-common python-software-properties
затем добавьте git-репоadd-apt-repository ppa:git-core/ppa
. Последним шагом является обновление мерзавца:apt-get update && apt-get upgrade
.Редактировать :
Либо есть ошибка
git pull
, либо вы не можете делать то, что пытаетесь сделать с помощью этой команды. Однако вы можете сделать это с помощью fetch и merge:Оригинальный ответ :
Предполагая, что вы работаете с Bash или подобным, вы можете это сделать
(cd /X/Y; git pull)
.Страница man git указывает некоторые переменные (см. «Репозиторий git»), которые, похоже, должны помочь, но я не могу заставить их работать правильно (с моим репозиторием в / tmp / ggg2):
Выполнение команды ниже, в то время как мой cwd является / tmp, обновляет этот репозиторий, но обновленный файл появляется в / tmp вместо рабочего дерева / tmp / ggg2:
Смотрите также этот ответ на подобный вопрос , который демонстрирует
--git-dir
и--work-tree
флаги.источник
.git
каталог.git --git-dir=/tmp/ggg2/.git --work-tree=/tmp/ggg2 pull
, я получу сообщение об ошибке. Но если я это сделаю,git --git-dir=/tmp/ggg2/.git --work-tree=. pull
находясь в / tmp, обновленные файлы будут помещены в / tmp, как и должно быть.--work-tree
прямо сейчас, например,--work-tree=/tmp/ggg2/
и--work-tree=/tmp/ggg2/.
так как это могло бы быть проблемой с тем, как анализировать путь.Вы можете обернуть его в скрипт bash или псевдоним git:
источник
pushd/popd
пару вместоcd/cd-
(cd xyz && git pull)
Этот пост немного устарел, поэтому, возможно, там была ошибка, и она была исправлена, но я просто сделал это:
И это сработало. Мне потребовалась минута, чтобы понять, что ему нужны точечный файл и родительский каталог (в стандартной настройке это всегда родитель / потомок, но не во ВСЕХ установках, поэтому их нужно указывать явно.
источник
Поскольку некоторые из моих серверов работают на старых версиях Ubuntu LTS, я не могу легко обновить git до последней версии (которая поддерживает опцию -C, как описано в некоторых ответах).
Этот трюк хорошо работает для меня, особенно потому, что у него нет побочного эффекта некоторых других ответов, которые оставляют вас в другом каталоге, с которого вы начали.
Или, делая это как однострочник:
В Linux и Windows есть команды pushd и popd.
источник
Используя комбинацию
pushd
,git pull
иpopd
мы можем достичь этой функции:Например:
источник
Вы можете написать скрипт так:
Вы можете назвать это как-то так
gitpull
.Если вы предпочитаете, чтобы он делал произвольные каталоги вместо
/X/Y
:Затем вы можете позвонить с помощью
gitpull /X/Z
Наконец, вы можете попробовать найти хранилища. У меня есть
~/git
папка, которая содержит репозитории, и вы можете использовать это, чтобы вытащить их все.источник
(cd /X/Y && git pull)
.Для любого, как я, который пытался сделать это с помощью команды drush (оболочка Drupal) на удаленном сервере, вы не сможете использовать решение, которое требует, чтобы вы записали компакт-диск в рабочий каталог:
Вместо этого вам нужно использовать решение, которое разбивает тягу на извлечение и объединение:
источник
Это может быть похожая проблема, но вы также можете просто связать команды. например
На одной линии
Или через SSH.
источник