Как проверить, является ли текущий репозиторий верхнего уровня 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() ожидается, что будет возвращена ровно одна запись;
этот патч заставляет использовать первую запись, если возвращается несколько записей.

Другие вопросы по тегам