Есть ли способ выполнять команды Git для репозитория, не находясь в этом репозитории?
Например что-то вроде этого git /home/repo log:?
Пожалуйста, не говорите мне cdоб этом. Я делаю это по execзвонку.
Есть ли способ выполнять команды Git для репозитория, не находясь в этом репозитории?
Например что-то вроде этого git /home/repo log:?
Пожалуйста, не говорите мне cdоб этом. Я делаю это по execзвонку.
Ответы:
Пытаться:
git --git-dir=/home/repo/.git log
Важно указать путь до каталога .git вашего репозитория. В противном случае вы получите только сообщение об ошибке, в котором говорится что-то вроде:
fatal: Not a git repository
fatal: Not a git repository (or any of the parent directories): .git. @ Патрик. Я ничего не голосовал против?
--work-dirя думаю)
git status,. -Cэто правильный путь.
-CВариант использования ( документы ):
git -C /home/repo log
Это почти эквивалентно --git-dirи --work-treeбез добавления обычной .gitпапки
Редактировать:
Ответ отрицательный ... довольно удивительный, поскольку, строго говоря, это единственно правильный ответ на вопрос. Параметры --git-dirи --work-treeне существуют для доступа к репозиторию извне рабочего дерева, они используются для перемещения в .gitдругое место, и в некоторых случаях их гораздо сложнее использовать.
Например, чтобы получить журнал /home/repo/subdirтолько:
git -C /home/repo/subdir log .
или
git -C /home/repo log subdir
Невозможно использовать log .с --git-dirили --work-tree. Путь должен быть обработан для извлечения подпути относительно вершины рабочего дерева, и даже в этом случае git не распознает его как путь, если вы не используете эту --опцию, поэтому единственный возможный способ:
git --git-dir /home/repo/.git log -- subdir
Кроме того, --work-treeв logмоей версии (git 1.9.1) не работает с подкомандой. Это просто игнорируется:
git --git-dir /home/repo/.git --work-tree /home/repo/subdir log -- subdir
git --git-dir /home/repo/.git --work-tree /home/repo/whatever log -- subdir
Я даже не понимаю, ошибка это или особенность ... как обычно со многими вариантами дизайна git.
git stashявляется еще одним примером подкоманде , который терпит неудачу , если --git-dirи --work-treeиспользуются.
На самом деле вам нужно использовать --git-dir и --work-tree вместе. Вот пример:
local [] Desktop: mkdir git
local [] Desktop: cd git
local [] git: touch README.txt
local [] git: git init
Initialized empty Git repository in /Users/albert/Desktop/git/.git/
local [] git: cd ..
local [] Desktop: git --work-tree=git --git-dir=git/.git add .
local [] Desktop: git --work-tree=git --git-dir=git/.git commit -a -m 'initial commit, called from outside the git directory'
[master (root-commit) ee951b1] initial commit, called from outside the git directory
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.txt
local [] Desktop: cd git
local [] git: git log --pretty=oneline
ee951b161053e0e0948f9e2a36bfbb60f9c87abe initial commit, called from outside the git di
Это похоже на ответ @ max. К сожалению, --git-dir не сделал то, что мне нужно. edit Оглядываясь назад, можно сказать, что еще один [предыдущий] ответ, который я не читал, предлагается использовать --work-tree. Я не уверен, что лучше использовать среду или флаги, поэтому я оставлю свой ответ на случай, если кто-то найдет в нем применение, но я перейду на использование --work-tree/ --git-dir.
Есть два репозитория, один внутри другого, но не подмодуль; внешнее репо игнорирует это:
tools (outer repo)
gcc/4.9.2 (inner repo)
Я хотел получить результат git rev-parse --show-prefixотносительно внешнего репо. Вот что я придумал (синтаксис bash; разбить по строкам для удобства чтения):
prefix_dir=$(cd ..; git rev-parse --show-toplevel)
prefix_dir=$(GIT_WORK_TREE=${prefix_dir} git rev-parse --show-prefix)
При выполнении из 4.9.2 он создает строку gcc/4.9.2.
Для любой команды git вы можете:
git --git-dir=<PATH-TO-REPO>/.git --work-tree=<PATH-TO-REPO> <git-command>
Например, если вы хотите сделать статус git:
git --git-dir=/home/myrepo/.git --work-tree=/home/myrepo/ status
или если вы хотите проверить ветку, в которой находится репо:
git --git-dir=/home/myrepo/.git --work-tree=/home/myrepo/ rev-parse --abbrev-ref HEAD