2016-06-01 84 views
5

让我们来看看它是什么如何将git子模块作为普通目录添加到git repo中?

  • 创建两个混帐回购协议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_HOME)到使用Dockerfile用于演示泊坞窗图像。 (ADD JEKINS_HOME /opt/jenkins

JENKINS_HOME 
Dockerfile 

我詹具有scriptler plugin其中包含了它的目的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 

回答

1

似乎你不能这样做。该名.git是硬编码在源代码:https://github.com/git/git/blob/fe9122a35213827348c521a16ffd0cf2652c4ac5/dir.c#L1260

可能的一种方式是让一个脚本,重命名.git之前else和背东西,scripts下将其添加到回购像

在工作目录后

mv .git hidden-git 

在Dockerfile

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

阿尔特在本地,可能会将GIT_DIR环境变量传递给插件,因此可以使用其他名称。

+0

将是很好的改变插件的行为的研究。脚本可能不是那么糟糕。 –

+0

@LarryCai如果我正确地阅读了这段代码,它不支持GIT_DIR自定义...所以没办法,除非修改代码。 https://github.com/jenkinsci/git-server-plugin/blob/42393f76d7f5678f9ca49f8a76252be2cfa244c2/src/main/java/org/jenkinsci/plugins/gitserver/FileBackedHttpGitRepository.java#L53 它应该有'setGitDir'具有一些可定制的值,但这里没有。 – kan

+0

不,所以我会用脚本来处理它。 –

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

我希望把它们作为一个git的回购和远程推动他们,但现在分目录下的文件不能被包括在内?

他们并不包括在内,因为test认为回购subas nested git repo, and records only its gitlink, or SHA1,又仿佛sub已被添加为一个子模块,将没有它的网址。

您需要先将sub推送到远程URL,然后将其作为子模块添加为test以查看sub文件。

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

或者你需要to use a subtree

cd test 
git subtree --prefix sub /url/to/sub master --squash 
+0

谢谢,并且该用例不适合此解决方案 –