С помощью 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/