如何将git子模块作为普通目录添加到git repo中?

时间:2016-06-01 08:38:21

标签: git dockerfile jenkins-scriptler

让我们看看它是什么

  • 创建两个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 repo移至test
mv sub test
cd test 
git add sub
git commit -m "add sub directory"

我想将它们视为一个git repo并远程推送它们,但现在sub目录下的文件不能包括在内?

如何以简单的方式实现这一点,例如将sub视为普通目录?

此案例

我尝试使用JENKINS_HOME将我的jenkins数据文件夹(Dockerfile)添加到docker镜像中进行演示。 (ADD JEKINS_HOME /opt/jenkins

JENKINS_HOME
Dockerfile

我的jenkin有scriptler plugin,其中包含git repo用于其目的。然后它存在于我的docker image git repo中,如下面的

$ 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

2 个答案:

答案 0 :(得分:1)

似乎你做不到。名称.git在源代码中是硬编码的:https://github.com/git/git/blob/fe9122a35213827348c521a16ffd0cf2652c4ac5/dir.c#L1260

可能一种方法是创建一个脚本,将.git重命名为其他内容并在将其添加到repo中之前和之后返回

scripts

下的工作目录中
mv .git hidden-git

在Dockerfile中

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

或者,可能可以将GIT_DIR环境变量传递到插件中,因此可以使用其他名称。

答案 1 :(得分:0)

<ul>
   <li [attr.data-selected]="false" 
       (click)="hightlightStatus[i]=!hightlightStatus[i]" 
       [class.highlight]="hightlightStatus[i]" 
       *ngFor="let item of items, let i = index"> 
       {{item}} 
   </li>
</ul>
  

我想将它们视为一个git repo并远程推送它们,但现在不能包含子目录下的文件了吗?

它们不包括在内,因为git add sub git commit -m "add sub directory" 看到了repo test as nested git repo, and records only its gitlink, or SHA1,而不是它的url,如果sub被添加为子模块的话。

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

sub

或者你需要to use a subtree

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