выполнение git pull из другого каталога - PullRequest
10 голосов
/ 02 октября 2011

Я настраиваю calimoucho (небольшой сервер непрерывной интеграции play), и для его работы мне нужно запустить команду, чтобы вытащить клонированный репозиторий git-хаба снаружи.

если быть более точным, я объясню это на примере.

У меня есть следующий репозиторий

cd /home/sas
mkdir apps
cd apps
mkdir myApp
cd myApp
git init
echo "my file" > file
git add .
git commit -m "initial commit"

Просто глупый тестовый репозиторий, где мое приложение должно быть

Теперь мне нужно клонировать этот репозиторий в папку извлечения.

cd /home/sas
mkdir calimoucho
cd calimoucho
mkdir checkout
cd checkout
git clone /home/sas/apps/myApp/ 

поэтому у меня следующая структура каталогов

~/apps
    myapp
      .git
      file
~/calimoucho
    checkout
      myapp
        .git
        file

Сервер непрерывной интеграции должен будет вытащить новые изменения из ~ / apps / myapp в ~ / calimoucho / checkout / myapp, запустив предложение командной строки из ~ / calimoucho

Я пытаюсь с помощью следующей команды

~/calimoucho$ git --git-dir=/home/sas/apps/myApp/.git --work-tree=/home/sas/calimoucho/checkout/myApp/ pull

и я получаю следующую ошибку

fatal: /usr/lib/git-core/git-pull cannot be used without a working tree.

если я не укажу опцию --work-tree, выдается запрос, но изменения применяются к папке ~ / calimoucho вместо ~ / calimoucho / checkout / myApp

есть идеи как обновить клонированный репозиторий из папки ~ / calimoucho?

спасибо большое

Ответы [ 4 ]

13 голосов
/ 01 февраля 2018

У меня тоже был этот вопрос. Я нашел ответ в документации git (https://git -scm.com / docs / git ).

Запустить команду

git -C <git-working-directory> pull <git remote>

Конкретная команда для ответа на этот вопрос:

git -C checkout/myApp/ pull

Обратите внимание, что важно, чтобы -C <git-working-directory> предшествовал команде pull, и любые дополнительные параметры извлечения можно указать в конце команды. В приведенном выше примере команда git clone настроит удаленный репозиторий по умолчанию ~ / apps / myapp, поэтому указывать удаленный репозиторий не обязательно.

3 голосов
/ 28 сентября 2018

Этот работал для меня:

git --git-dir=/home/myuser/awesomeproject/.git --work-tree=/home/myuser/awesomeproject pull

Я использую его внутри ловушки после обновления для автоматического извлечения и перезапуска pm2 на моем тестовом сервере.

1 голос
/ 13 июня 2019

Если вашей версии git не нравится опция git-working-directory :

Неизвестная опция: -C

Затем заранее используйте команду push-directory .

Например, это извлечет ваш проект git из родительского каталога (или клона, если он не существует):

pushd ./project-name && git pull && popd || git clone https://repo-url/project-name
0 голосов
/ 02 октября 2011

Вы не должны устанавливать рабочее дерево в другое хранилище, чем переменная git-dir. Я думаю, что они предназначены для использования, когда вы не хотите, чтобы папка .git находилась в том же каталоге, что и ваше рабочее дерево. Вместо этого попробуйте это:

~/calimoucho/$ git pull --work-tree=checkout/myApp/  ../../apps/myapp
...