繁体   English   中英

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

[英]how can I add git submodule into git repo as normal directory?

让我们看看它是什么

  • 创建两个git repo subtest
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 repo并远程推送它们,但现在不能包含sub下的文件?

我怎样才能以简单的方式实现这一点,比如将sub视为普通目录?

用例就是这样

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

JENKINS_HOME
Dockerfile

我的jenkin有scriptler插件 ,其中包含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

似乎你做不到。 名称.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环境变量传递给插件,因此可以使用其他名称。

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

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

它们不包括在内,因为test将repo sub 视为嵌套的git repo,并且只记录其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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM