Подтвердить что ты не робот

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

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

# Located in /tmp, running svn operation on /home/d5ve/checkout
[email protected]:/tmp> svn add /home/d5ve/checkout/myfile.txt
[email protected]:/tmp> svn diff /home/d5ve/checkout/myfile.txt
[email protected]:/tmp> svn commit /home/d5ve/checkout/myfile.txt

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

# Located in /tmp, attempting git operation on /home/d5ve/checkout2
[email protected]:/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 люди? Я часто использую этот рабочий процесс и очень скучаю при использовании git.

UPDATE 2016 Текущий правильный ответ на этот вопрос - использовать флаг -C для git, который был введен в версии 1.8.5 в 2013 году. См. qaru.site/info/159031/...

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

Пожалуйста, взгляните на: http://github.com/d5ve/rgit

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

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

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

Ответ 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

Ответ 2

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

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

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