Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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 into test
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
like image 923
Larry Cai Avatar asked Oct 31 '22 02:10

Larry Cai


1 Answers

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.

like image 193
kan Avatar answered Nov 08 '22 05:11

kan