Могу ли я выполнить операции git (добавить / diff / commit) для файлов в хранилище, когда мой текущий каталог не находится в хранилище - PullRequest
13 голосов
/ 08 июля 2010

С помощью svn я смог запускать команды для файлов при оформлении заказа, не вводя сначала cd в эту проверку.Например:

# Located in /tmp, running svn operation on /home/d5ve/checkout
d5ve@host:/tmp> svn add /home/d5ve/checkout/myfile.txt
d5ve@host:/tmp> svn diff /home/d5ve/checkout/myfile.txt
d5ve@host:/tmp> svn commit /home/d5ve/checkout/myfile.txt

Когда я пытаюсь выполнить этот рабочий процесс с помощью git, я получаю сообщение об ошибке:

# Located in /tmp, attempting git operation on /home/d5ve/checkout2
d5ve@host:/tmp> git add /home/d5ve/checkout2/myfile.txt
fatal: Not a git repository (or any of the parent directories): .git

Я пытался использовать флаги --git-dir и --work-tree, ноэто также, казалось, потерпело неудачу.

Какие-нибудь предложения мерзавцев?Я часто использую этот рабочий процесс и очень скучаю по нему при использовании git.

ОБНОВЛЕНИЕ 2016 Текущий правильный ответ на этот вопрос заключается в использовании флага -C для git, который был представлен в версии1.8.5 в 2013 году. См. https://stackoverflow.com/a/35899275/357336

ОБНОВЛЕНИЕ: Основываясь на ответе lunaryorn ниже, я создал простой Perl-скрипт, который определяет местоположение каталога .git изпути к файлам и задает переменные среды GIT_WORK_TREE и GIT_DIR для команды.

Пожалуйста, посмотрите: http://github.com/d5ve/rgit

ИСПОЛЬЗОВАНИЕ: rgit COMMAND [ARGS]

В основномпросто замените git на rgit в команде, и вы можете запускать команды из-за пределов хранилища.

cd /tmp    
rgit diff /home/d5ve/checkout1
rgit add /home/d5ve/checkout1/rgit.pl
rgit commit /home/d5ve/checkout1/

Ответы [ 2 ]

15 голосов
/ 08 июля 2010

Вы должны использовать обе опции вместе:

git --git-dir=/home/d5ve/checkout2/.git --work-tree=/home/d5ve/checkout2/ add /home/d5ve/checkout2/myfile.txt

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

export GIT_WORK_TREE="/home/d5ve/checkout2"
export GIT_DIR="${GIT_WORK_TREE}/.git"
git status
1 голос
/ 11 марта 2016

Пожалуйста, проверьте этот немного другой вопрос, ответ на который работает отлично, в отличие от обходного пути, предложенного в другом ответе здесь.

Как выполнить команду Git, не находясь в папке репозитория?

По мнению какого-либо модератора, мне не разрешено публиковать здесь ответ (я полагаю, какой-то фанат Чака Норриса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...