Я могу выполнить, операции мерзавца (добавлять/разность/фиксировать) на файлах в репозитории, когда мой текущий каталог не находится в репозитории

С 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

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

# 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 флаги, но это также, казалось, перестало работать.

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

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

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

Взгляните на: http://github.com/d5ve/rgit

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

В основном просто замените мерзавца rgit в команде, и можно выполнить команды снаружи репозитория.

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

13
задан d5ve 6 April 2016 в 04:40
поделиться

1 ответ

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

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
15
ответ дан 2 December 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: