С 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/
Вы должны использовать оба параметра вместе:
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