git с --git-dir= приводит к «не репозиторию git»

У меня есть скрипт в одном из моих приложений для iOS, который должен получить хэш версии git и поместить его в номер версии. В этом скрипте я запускаю git --git-dir="$PROJECT_DIR" show -s --pretty=format:%h для этого. Однако я получаю сообщение о том, что каталог не является репозиторием git. Если я повторяю переменную PROJECT_DIR и перехожу к терминалу, работает следующее:

cd projectDirPath
git show -s --pretty=format:%h

Что не работает:

git --git-dir=projectDirPath show -s --pretty=format:%h

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

С уважением, Майкл


person Michael Ochs    schedule 13.10.2012    source источник
comment
--git-dir должен указывать на папку .git вашего репозитория. Попробуйте git --git-dir=projectDirPath/.git show -s --pretty=format:%h.   -  person John Szakmeister    schedule 13.10.2012
comment
Спасибо, это была проблема. Возможно, вы захотите опубликовать это как ответ, чтобы я мог пометить его как ответ на проблему!   -  person Michael Ochs    schedule 14.10.2012
comment
Здорово! Я также опубликовал это как ответ.   -  person John Szakmeister    schedule 14.10.2012


Ответы (3)


При использовании --git-dir необходимо указать в папке .git вашего репозитория. Пытаться:

git --git-dir=projectDirPath/.git show -s --pretty=format:%h

Документ на --git-dir говорит, что:

--git-дир =

Укажите путь к репозиторию (каталог .git). Это также можно контролировать, установив переменную среды GIT_DIR. Это может быть абсолютный или относительный путь к текущему рабочему каталогу.

У меня проблема с запоминанием этого самого. Чтобы помочь мне вспомнить, что делать, я пытаюсь вспомнить, что опция запрашивает именно то, что она хочет: путь к каталогу .git (git-dir).

person John Szakmeister    schedule 14.10.2012
comment
Просто пояснение: projectDirPath должен быть абсолютным (НЕ относительным) путем. - person Bryan Jyh Herng Chong; 10.01.2019
comment
@BryanJyhHerngChong На самом деле это неправильно. На странице руководства git говорится, что это может быть абсолютный или относительный путь к текущему рабочему каталогу. - person John Szakmeister; 10.01.2019
comment
@BryanJyhHerngChong Это неправда. Я добавил соответствующий документ в ответ. Путь может быть относительным путем. - person jdhao; 25.12.2020

Помимо --git-dir, также может помочь установка --work-tree. Для сценария хорошо использовать соответствующие среды (это проще), например.

#!/bin/bash -ex
export GIT_WORK_TREE=/path/to/repo
export GIT_DIR=/path/to/repo/.git
git show -s --pretty=format:%h
person kenorb    schedule 18.05.2017

Вы ищете параметр командной строки git -C .

-C <path>

Запускайте так, как если бы git был запущен вместо текущего рабочего каталога. Когда задано несколько вариантов -C, каждый последующий неабсолютный -C <path> интерпретируется относительно предыдущего -C <path>. Если <path> присутствует, но пуст, например. -C "", то текущий рабочий каталог остается без изменений.

Этот параметр влияет на параметры, которые ожидают имя пути, такое как --git-dir и --work-tree, поскольку их интерпретации имен путей будут сделаны относительно рабочего каталога, вызванного параметром -C. Например, следующие вызовы эквивалентны:

git --git-dir=a.git --work-tree=b -C c status
git --git-dir=c/a.git --work-tree=c/b status
person Mathieu CAROFF    schedule 05.02.2020