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

Давайте посмотрим, что это такое

  • Создайте два репозитория git sub и test
mkdir test sub
cd test && git init && touch README && git add README && git commit -m "initialize the git repo" && cd ..
cd sub && git init && touch README && git add README && git commit -m "initialize the sub git repo" && cd ..
  • Переместите репозиторий sub в test
mv sub test
cd test 
git add sub
git commit -m "add sub directory"

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

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

Пример использования

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

JENKINS_HOME
Dockerfile

У моего jenkin есть плагин scriptler, который содержит репозиторий git для своей цели. Затем он существует в моем репозитории git с изображением докера, как показано ниже.

$ find jenkins-docker
./.git
./.git/.. (skipped
./Dockerfile
./JENKINS_HOME
./JENKINS_HOME/scriptler
./JENKINS_HOME/scriptler/scripts
./JENKINS_HOME/scriptler/scripts/.git
./JENKINS_HOME/scriptler/scripts/.git/... (skipped)
./JENKINS_HOME/scriptler/scripts/Sample.groovy
./JENKINS_HOME/... (skipped)
./README

person Larry Cai    schedule 01.06.2016    source источник


Ответы (2)


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

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

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

mv .git hidden-git

В докерфайле

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

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

person kan    schedule 17.06.2016
comment
Было бы хорошо изменить поведение этого плагина. сценарий, наверное, не так уж и плох. - person Larry Cai; 18.06.2016
comment
@LarryCai Если я правильно прочитал этот код, он не поддерживает настройку GIT_DIR ... так что вы не сможете этого сделать, если не измените код. github.com/jenkinsci/git-server-plugin/blob/ Он должен иметь setGitDir с каким-то настраиваемым значением, но здесь ничего нет. - person kan; 19.06.2016
comment
@LarryCai Это открытый исходный код, вы можете представить патч. - person kan; 19.06.2016
comment
может быть. Но на этот раз я выбираю сценарий и напрямую обновляю ваш ответ. - person Larry Cai; 20.06.2016

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
person VonC    schedule 18.06.2016
comment
спасибо, и вариант использования не подходит для этого решения - person Larry Cai; 18.06.2016