Git не будет показывать журнал, если я не в каталоге проекта

Я пытаюсь вызвать git log, пока я в другом каталоге. Я передаю местоположение, где .git

git log /Users/Leica/proj1

но он говорит "не репозиторий git". Если я cd в этот каталог, он отлично работает

cd /Users/Leica/Proj1
git log

Это мне непонятно. git log документация говорит

git log [[--] <path>…]

Так что я делаю неправильно?

Ответ 1

Вот как работает git. Он хочет быть запущенным из рабочей копии (не обязательно должен быть в корне).

Если вы действительно должны это сделать (но почему?), вы могли бы сделать

$ git --git-dir=/Users/Leica/proj1/.git log

Параметр "путь" команды журнала относится к пути к файлу в репозитории (корневой каталог корневого каталога репозитория, а не корневой файловой системы). Он ограничивает вывод журнала в соответствии с данными файлами.

Ответ 2

Git нужен репозиторий для работы, о чем свидетельствует Thilo answer. Таким образом, вы можете указать Git три способа найти репозиторий:

  • Флаг --git-dir=<repoPath>, как ответил Тило.

  • Переменная среды GIT_DIR.

  • cd в каталог проекта, содержащий каталог репозитория .git.

В соответствии с официальной версией Linux Kernel Git, GIT_DIR установлен для поиска каталога .git (в текущий рабочий каталог?) по умолчанию:

Если установлена ​​переменная среды GIT_DIR, она указывает путь к использованию вместо стандартного .git для базы репозитория. Опция командной строки --git-dir также устанавливает это значение.

Ответ 3

Git параметр пути к журналу предназначен только для фильтрации каталогов в репозитории git. Например

cd /Users/Leica/Proj1
git log ChildDirectory

предоставит вам журнал только о Proj1/ChildDirectory, поэтому, если в каталоге Proj1 есть коммит, что не влияет на ChildDirectory, он не появится.

Если вы хотите использовать git из другого каталога, вам нужно передать опцию --git-dir=<pathToRepository>.