Как я могу добавить подмодуль 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