2016-06-01 123 views
5

讓我們來看看它是什麼如何將git子模塊作爲普通目錄添加到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回購成test
 
mv sub test 
cd test 
git add sub 
git commit -m "add sub directory" 

我想將它們視爲一個git倉庫並將它們遠程推送,但現在sub目錄下的文件不能包含在內?

如何以簡單的方式實現此目標,比如將sub作爲普通目錄處理?

使用情況下這

我嘗試添加自己的詹金斯數據文件夾(JENKINS_HOME)到使用Dockerfile用於演示泊塢窗圖像。 (ADD JEKINS_HOME /opt/jenkins

JENKINS_HOME 
Dockerfile 

我詹具有scriptler plugin其中包含了它的目的git的回購協議。然後它存在我的碼頭圖像git回購如下

 
$ 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 

回答

1

似乎你不能這樣做。該名.git是硬編碼在源代碼:https://github.com/git/git/blob/fe9122a35213827348c521a16ffd0cf2652c4ac5/dir.c#L1260

可能的一種方式是讓一個腳本,重命名.git之前else和背東西,scripts下將其添加到回購像

在工作目錄後

mv .git hidden-git 

在Dockerfile

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

阿爾特在本地,可能會將GIT_DIR環境變量傳遞給插件,因此可以使用其他名稱。

+0

將是很好的改變插件的行爲的研究。腳本可能不是那麼糟糕。 –

+0

@LarryCai如果我正確地閱讀了這段代碼,它不支持GIT_DIR自定義...所以沒辦法,除非修改代碼。 https://github.com/jenkinsci/git-server-plugin/blob/42393f76d7f5678f9ca49f8a76252be2cfa244c2/src/main/java/org/jenkinsci/plugins/gitserver/FileBackedHttpGitRepository.java#L53 它應該有'setGitDir'具有一些可定製的值,但這裏沒有。 – kan

+0

不,所以我會用腳本來處理它。 –

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

我希望把它們作爲一個git的回購和遠程推動他們,但現在分目錄下的文件不能被包括在內?

他們並不包括在內,因爲test認爲回購subas nested git repo, and records only its gitlink, or SHA1,又彷彿sub已被添加爲一個子模塊,將沒有它的網址。

您需要先將sub推送到遠程URL,然後將其作爲子模塊添加爲test以查看sub文件。

cd test 
git submodule add -- /url/to/sub 

或者你需要to use a subtree

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

謝謝,並且該用例不適合此解決方案 –