У меня есть несколько файлов php в папке A (это проект git). В этом php-файле я хочу выполнить «git log», но для папки B. Папка B - это еще один проект git (поэтому журнал отличается от A и B).
Как я могу сделать это с помощью команды оболочки?
Вы можете сделать это с помощью --git-dirпараметра перед передачей каких-либо команд.
git --git-dir /foo/bar/.git log
( .gitНеобходимо указать каталог.) Из документации :
--git-dir=<path>
Задайте путь к репозиторию. Этим также можно управлять, задав GIT_DIRпеременную среды. Это может быть абсолютный или относительный путь к текущему рабочему каталогу.
Вы должны ссылаться на .gitкаталог. Попробуй git --git-dir=/foo/bar/.git log.
mipadi
6
извините, я ошибаюсь, вы не ставите = между --git-dir и именем каталога. так что он становится git --git-dir / foo / bar log
rgngl
23
Предупреждение! Этот подход не работает для операций, отличных от log. Попробуйте git --git-dir /foo/someclone/.git status- git полностью запутается. Я рекомендую, -Cкак указано ниже.
Воздух
Мне еще предстоит встретить страницу справки git, которая включает строку "--git-dir": '(
thinsoldier
1
@thinsoldier man gitделает в моей системе (2.3.5). Но ответ @VonC работает намного лучше.
Calimo
146
С git 1.8.5 (4 квартал 2013 г.) у вас будет другой выбор вместо настройки --git-dir.
Если вы хотите выполнить git logв папке B, введите:
git -C B log
Точно так же, как " make -C <directory>", " git -C <directory> ..." говорит Git пойти туда, прежде чем делать что-либо еще .
Это гораздо более надежный подход и работает для команд, отличных от log.
Воздух
вау, и ничего на странице руководства! Какая жалость. (хорошо, теперь я вижу, что это добавлено на странице
руководства
К сожалению, это все еще не так хорошо, как -Rвариант Mercurial , поскольку он портит относительные пути. Например, если я печатаю, git -C subdir log subdir/myfileон выдает ошибку (так как ищет файл subdir/subdir/myfile).
jwd
--git-dir удобнее, когда вы делаете что-то вроде этого:for p in (find . -type d -name ".git"); do git --git-dir $p ...; done
shabunc
1
@jwd: Не знаю, в чем проблема? То, что вы процитировали, является точным поведением, которого я ожидал, и мне не хотелось gitбы думать, что оно умнее меня и того, что я напечатал. Если я говорю «запустите это в каталоге X», я не имею в виду «кроме случаев, сделайте что-нибудь еще».
cd /other/dir && git log && cd -
в оболочке bash?--git-dir
: см. Мой ответ нижеОтветы:
От
man git
,:Вы можете сделать это с помощью
--git-dir
параметра перед передачей каких-либо команд.(
.git
Необходимо указать каталог.) Из документации :источник
.git
каталог. Попробуйgit --git-dir=/foo/bar/.git log
.log
. Попробуйтеgit --git-dir /foo/someclone/.git status
- git полностью запутается. Я рекомендую,-C
как указано ниже.man git
делает в моей системе (2.3.5). Но ответ @VonC работает намного лучше.С git 1.8.5 (4 квартал 2013 г.) у вас будет другой выбор вместо настройки
--git-dir
.Если вы хотите выполнить
git log
в папкеB
, введите:См совершать 44e1e4 по Назри Ramliy :
источник
log
.-R
вариант Mercurial , поскольку он портит относительные пути. Например, если я печатаю,git -C subdir log subdir/myfile
он выдает ошибку (так как ищет файлsubdir/subdir/myfile
).for p in (find . -type d -name ".git"); do git --git-dir $p ...; done
git
бы думать, что оно умнее меня и того, что я напечатал. Если я говорю «запустите это в каталоге X», я не имею в виду «кроме случаев, сделайте что-нибудь еще».