Как я могу добавить подмодуль git в git repo как обычный каталог?

Посмотрим что это

  • Создать два git репо sub & test
MKDIR Test Sub
cd test && git init && touch README && git add README && git commit -m "инициализация git repo" && cd ..
cd sub && git init && touch README && git add README && git commit -m "инициализация репозитория sub git" && cd..
  • Переместить sub репо в test
мв суб тест
тест CD 
git add sub
git commit -m "добавить подкаталог"

Я хочу относиться к ним как к одному git-репо и удаленно передавать их, но теперь файлы находятся под sub каталог не может быть включен?

Как я могу добиться этого простым способом, как обращаться с sub как с обычным каталогом?

Вариант использования для этого

Я пытаюсь добавить папку данных jenkins (JENKINS_HOME) в образы докера, используя Dockerfile для демонстрации. (ADD JEKINS_HOME /opt/jenkins)

JENKINS_HOME
Dockerfile

У моего Дженкина есть скрипт- плагин, который содержит git-репо для своих целей. Тогда он существует в моем git-репозитории, как показано ниже

$ найти Дженкинс-Докер./.git
./.git/.. (пропущено./Dockerfile
./JENKINS_HOME
./JENKINS_HOME/scriptler
./JENKINS_HOME/scriptler/scripts
./JENKINS_HOME/scriptler/scripts/.git
./JENKINS_HOME/scriptler/scripts/.git/... (пропущено)
./JENKINS_HOME/scriptler/scripts/Sample.groovy
./JENKINS_HOME/... (пропущено)./ПРОЧТИ МЕНЯ

2 ответа

Решение

Кажется, ты не можешь этого сделать. Имя .git жестко запрограммирован в исходном коде: https://github.com/git/git/blob/fe9122a35213827348c521a16ffd0cf2652c4ac5/dir.c#L1260

Вероятно, одним из способов является создание сценария, который переименовывает .git к чему-то еще и обратно до и после добавления его в репо, как

В рабочем каталоге под scripts

mv .git hidden-git

В Dockerfile

RUN mv $JENKINS_HOME/scriptler/scripts/hidden-git     
$JENKINS_HOME/scriptler/scripts/.git

В качестве альтернативы возможно пройти GIT_DIR переменная окружения в плагин, чтобы он мог использовать другое имя.

git add sub
git commit -m "add sub directory"

Я хочу относиться к ним как к одному git-репо и передавать их удаленно, но теперь файлы в подкаталоге не могут быть включены?

Они не включены, потому что test видит репо sub как вложенный репозиторий git, и записывает только его gitlink или SHA1, а не его URL, как это было бы, если бы sub был добавлен как подмодуль.

Вам нужно будет подтолкнуть sub сначала к удаленному URL, а затем добавьте его как субмодуль для test видеть sub файлы.

 cd test
 git submodule add -- /url/to/sub

Или вам нужно будет использовать поддерево

cd test
git subtree --prefix sub /url/to/sub master --squash
Другие вопросы по тегам