Let's see what it is
- Create two 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 ..
- Move the
sub
repo intotest
mv sub test cd test git add sub git commit -m "add sub directory"
I want to treat them as one git repo and push them remotely, but now the files under sub
directory can not be included ?
How can I achieve this in simple way like treat sub as normal directory ?
Use case for this
I try to add my jenkins data folder (JENKINS_HOME
) into docker images using Dockerfile
for demo. (ADD JEKINS_HOME /opt/jenkins
)
JENKINS_HOME
Dockerfile
My jenkin has scriptler plugin which contains the git repo for its purpose. Then it exists in my docker image git repo like below
$ 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
They are not included because
test
sees reposub
as nested git repo, and records only its gitlink, or SHA1, and not its url as it would have ifsub
had been added as a submodule.You would need to push
sub
to a remote url first, and then add it as submodule fortest
to seesub
files.Or you would need to use a subtree
Seems you cannot do that. The name
.git
is hard-coded in the source code: https://github.com/git/git/blob/fe9122a35213827348c521a16ffd0cf2652c4ac5/dir.c#L1260Probably one way is to make a script which renames
.git
to something else and back before and after adding it into repo likeIn working directory under
scripts
In Dockerfile
Alternatively, probably it's possible to pass
GIT_DIR
environment variable into the plugin, so it could use another name.