我该如何将git子模块添加到git仓库中,使其成为普通目录?

5
让我们看看这是什么:
创建两个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”repo中。
在终端中输入以下命令: ``` mv sub test cd test git add sub git commit -m "add sub directory" ```
我想把它们当作一个git repo并将它们推送到远程,但是现在无法包含“sub”目录下的文件?
如何以简单的方式实现像正常目录一样对待“sub”?
应用场景:
我尝试使用Dockerfile将我的jenkins数据文件夹(JENKINS_HOME)添加到docker镜像中进行演示(ADD JEKINS_HOME /opt/jenkins)。
JENKINS_HOME
Dockerfile

我的Jenkin安装了Scriptler插件,其中包含了Git仓库以实现其功能。然后它存在于我Docker镜像的Git仓库中,如下所示:

$ find jenkins-docker
./.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/...(已跳过)
./README
2个回答

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 环境变量传递到插件中,这样它就可以使用其他名称。


最好改变插件的行为,脚本可能并不是那么糟糕。 - Larry Cai
@LarryCai 如果我正确理解这段代码,它不支持GIT_DIR自定义...所以除非修改代码,否则你无法做到。https://github.com/jenkinsci/git-server-plugin/blob/42393f76d7f5678f9ca49f8a76252be2cfa244c2/src/main/java/org/jenkinsci/plugins/gitserver/FileBackedHttpGitRepository.java#L53 它应该有一个setGitDir方法来设置一些可定制的值,但这里没有。 - kan
@LarryCai 这是开源的,欢迎您引入一个补丁。 - kan
可能是可以的。但是这次我选择脚本并直接更新你的答案。 - Larry Cai

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

我想将它们视为一个 git 仓库并远程推送,但现在子目录下的文件无法包含?这是因为 test 看到 repo sub 作为嵌套的 git 仓库,并且仅记录了其 gitlink 或 SHA1,而不是像子模块一样记录其 url。您需要首先将 sub 推送到远程 url,然后添加为子模块,以便 test 可以看到 sub 文件。
 cd test
 git submodule add -- /url/to/sub

或者你需要使用子树

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

感谢,但是这个解决方案的使用情况并不适合。 - Larry Cai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接