Как проверить, является ли текущий репозиторий верхнего уровня git repo - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь проверить, является ли текущий репо не подмодулем, а верхним уровнем Git репозиторий. Я пробовал следующую команду: git submodule init

Выход:

You need to run this command from the toplevel of the working tree.

Но он запустит субмодуль. Как я могу проверить текущий репозиторий, если это не подмодуль, а репозиторий верхнего уровня, без внесения изменений в репозиторий?

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Если вы делаете , используете git rev-parse --show-superproject-working-tree, обязательно используйте Git 2.20 (Q4 2018), чтобы избежать сообщения об ошибке "returned path string doesn't match cwd"

См. коммит c5cbb27 (27 сентября 2018 г.) Сэм МакКелви (sammck) .
(Объединено Junio ​​C Hamano - 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() ожидал, что будет возвращена ровно одна запись;
этот патч заставляет использовать первую запись, если возвращается несколько записей.

0 голосов
/ 28 августа 2018

Возможно, вы хотите 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

В настоящее время мне неизвестно о встроенной функции, обеспечивающей ответ «все в одном» для обеих ситуаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...