возможно ли не иметь дополнительного подкаталога при использовании Git - submodule - sparse-checkout?

Я хочу имитировать поведение, подобное svn:externals: У меня есть главный проект, и у меня есть некоторый «общий» код в другом репозитории. С SVN я бы сделал:

svn co <url>/src common

и моя структура папок будет:

repo/common/*.cpp

Теперь с git + submodule + sparse checkout это намного сложнее, и у меня есть дополнительный слой подкаталога, когда я добавляю подмодуль;

git submodule add <url> common

теперь моя структура папок:

repo/common/src/*.cpp
repo/common/lib/...

с разреженной проверкой я могу убедиться, что извлекаю только папку src, но у меня все еще есть еще один слой (src) по сравнению с решением svn:externals:

repo/common/src/*.cpp

есть ли лучшее решение для общего кода? Или способ очистить это? Я знаю, что все будет работать; просто не очень чисто...


person Chris Maes    schedule 24.01.2014    source источник


Ответы (1)


Вы не можете избежать дополнительной папки из подмодуля, но вы можете добавить символическую ссылку (даже в Windows), чтобы найти нужный контент.

Добавьте свой подмодуль с его именем репо:

git submodule add -b master /url/of/repo

Добавьте символическую ссылку:

ln -s repo/src common

Не забудьте добавить '-b master', если вы хотите, чтобы ваш репозиторий следовал своей ветке master.
Это возможно, начиная с git 1.8.2: см. git submodule последнее отслеживание.


Даже Git 2.25 и его команда git sparse-checkout не избежали бы дополнительного уровня папки common.

person VonC    schedule 24.01.2014
comment
Вау, спасибо за подсказку по опции '-b master'! Я проверю это дальше... - person Chris Maes; 25.01.2014
comment
@ChrisMaes да, это локальная конфигурация, которую вы связываете со своим подмодулем. Любой git submodule update --remote будет затем обновлять содержимое подмодуля после выборки восходящей ветки подмодуля. - person VonC; 25.01.2014
comment
Является ли этот ответ по-прежнему правильным, учитывая недавние изменения как в подмодулях, так и в sparse-checkout? - person eggyal; 02.08.2020
comment
@eggyal Да, это так. Я представил новую команду Git 2.25 git sparse-checkout в stackoverflow.com/a/62617098/6309. Но в контексте OP у вас все равно будет промежуточный уровень папок для любого подмодуля, который вы будете использовать. - person VonC; 02.08.2020
comment
Хорошо спасибо. В моем случае у меня есть подмодуль, который касается лишь небольшой части всего репо, а не просто хочет избежать промежуточной папки, но я думаю, что рабочий набор должен будет включать полный подмодуль на данный момент. - person eggyal; 02.08.2020
comment
@eggyal вы по-прежнему можете включать только часть подмодуля, но все равно за счет дополнительной папки, отсюда и предложение символической ссылки в этом ответе 2014 года. - person VonC; 02.08.2020
comment
А, я неправильно понял. Сначала нужно было прочитать ответ, на который вы ссылались в своем предыдущем комментарии. Большое спасибо. - person eggyal; 02.08.2020