Как проверить, является ли текущий репозиторий верхнего уровня git repo
Я пытаюсь проверить, является ли текущий репозиторий не подмодулем, а репозиторием верхнего уровня git. Я попробовал следующую команду: git submodule init
Выход:
You need to run this command from the toplevel of the working tree.
Но это запустит субмодуль. Как я могу проверить текущий репозиторий, если это не подмодуль, а репозиторий верхнего уровня, без внесения изменений в репозиторий?
2 ответа
Вы, вероятно, хотите git rev-parse --show-superproject-working-tree
с отступлением к git rev-parse --show-toplevel
если вы не в подмодуле. Например:
toplevel=$(git rev-parse --show-toplevel)
superproject=$(git rev-parse --show-superproject-working-tree)
if [[ -z "$superproject" ]]; then
echo "submodule in $superproject"
else
echo "toplevel is $toplevel"
fi
В настоящее время я не знаю о встроенном, который обеспечивает универсальный ответ для обеих ситуаций.
Если вы используете git rev-parse --show-superproject-working-tree
, убедитесь, что используете Git 2.20 (Q4 2018), чтобы избежать сообщения об ошибке " returned path string doesn't match cwd
"
Смотрите коммит c5cbb27 (27 сентября 2018 г.) Сэма МакКелви ( sammck
)
(Объединено Юнио С Хамано - gitster
- в коммите d152a74 от 19 октября 2018 г.)
rev-parse
: --show-superproject-working-tree должно работать во время слиянияВызывая
git rev-parse --show-superproject-working-tree
выходы с"fatal: BUG: returned path string doesn't match cwd?"
когда в суперпроекте есть неотмеченная запись для текущего подмодуля, вместо отображения рабочего дерева суперпроекта.
(Это было впервые сообщено здесь)
Проблема связана с тем, что когда выполняется слияние ссылки субмодуля, "
git ls-files --stage —full-name <submodule-relative-path>
"возвращает три отдельные записи для подмодуля (по одной для каждого этапа), а не одну запись; например,$ git ls-files --stage --full-name submodule-child-test 160000 dbbd2766fa330fa741ea59bb38689fcc2d283ac5 1 submodule-child-test 160000 f174d1dbfe863a59692c3bdae730a36f2a788c51 2 submodule-child-test 160000 e6178f3a58b958543952e12824aa2106d560f21d 3 submodule-child-test
Код в
get_superproject_working_tree()
ожидается, что будет возвращена ровно одна запись;
этот патч заставляет использовать первую запись, если возвращается несколько записей.