gitdockerfilejenkins-scriptler

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


Let's see what it is

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 ..
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

Solution

  • Seems you cannot do that. The name .git is hard-coded in the source code: https://github.com/git/git/blob/fe9122a35213827348c521a16ffd0cf2652c4ac5/dir.c#L1260

    Probably one way is to make a script which renames .git to something else and back before and after adding it into repo like

    In working directory under scripts

    mv .git hidden-git
    

    In Dockerfile

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

    Alternatively, probably it's possible to pass GIT_DIR environment variable into the plugin, so it could use another name.