2013-06-24 41 views
8

我主持的到位桶一個Git倉庫具有以下目錄結構:拉遠程進入子目錄

/Automation 
/Website 
/Website/ <-- [WebsiteFilesGoHere] 
/Dependencies 
/WebServices 

我們有一個正在建設的解決方案/Website部分的供應商。

他們有一個回購,看起來像這樣

/ <-- [WebsiteFilesGoHere] 

什麼是拉自己的回購到我們的子文件夾,然後才能夠在日後的推背的最佳方式?

更新:值得一提的是,這兩個回購在當前`/網站'文件夾中的文件不知道彼此。

UPDATE 2:這也是一個基於Windows的Git倉庫,這是許多開發人員共享的(所以避免任何本地機器配置會很好)。

+2

請參閱'man git-submodule' – Jokester

+0

鑑於更新部分,可能是其他地方的真正子模塊,以及當前回購中的幾個符號鏈接? – Jokester

+0

你能給我一點演練嗎?我正在玩git submodules支持。在「網站」文件夾已存在的情況下點擊一個磚牆。在我分支/刪除文件夾來添加子模塊之前,我只想確保我做的是正確的事情。 – Doug

回答

1

經常推薦最佳

的良好運行通過的好處在這裏,而不是使用子模塊子樹:

http://blogs.atlassian.com/2013/05/alternatives-to-git-submodule-git-subtree/

有幾個原因,你可能會發現樹更好地使用:

管理簡單的工作流程很簡單。

支持較舊版本的git(甚至在v1.5.2之前)。

子項目的代碼在超級項目的克隆完成後立即可用。

子樹不需要您的存儲庫的用戶學習任何新的東西,他們可以忽略您使用子樹來管理依賴關係的事實。

子樹不會像子模塊doe(即.gitmodule)一樣添加新的元數據文件。

模塊的內容可以修改,而不需要在其他地方有獨立的存儲庫副本。

在我看來,缺點是可以接受的:

你必須瞭解一個新的合併策略(即子樹)。

爲子項目返回上游的貢獻代碼稍微複雜一些。

在提交中沒有混合超級和子項目代碼的責任在於你。

5

有一種方法可以在不使用子模塊或子樹的情況下引入遠程存儲庫,即使該存儲庫與您的存儲庫完全無關並且存在衝突目錄。

首先,將該存儲庫添加爲.git/config中的其中一個遠程存儲庫。例如,假設你想從Github引入Zaldor的Gruff庫。這些名字完全是虛構的:

[remote "gruff-upstream"] 
fetch = +refs/heads/*:refs/remotes/gruff/* 
url = https://github.com/zaldor/gruff.git 

現在你可以做一個git fetch gruff-upstream讓所有的對象。現在您可以在gruff項目中看到可用分支。

$ git branch -r 
gruff/experimental-hack 
gruff/master 
origin/master 

這兩個gruff行是gruff的分支機構。 origin/master是我們自己的起源。名稱衝突:gruffmaster,我們也有master。這並不重要:我們可以給gruff/master一個不同的本地分支名稱。現在

$ git branch -t gruff-master gruff/master 
Branch gruff-master set up to track remote branch master from gruff-upstream. 

,如果我們git checkout gruff-master,我們所有的混帳跟蹤文件都將消失,取而代之的是gruff工作副本:

$ git checkout gruff-master 

現在,我們可以梳理了這個gruff-master分支一點點。例如,我們可以所有的文件移動到子目錄,刪除不需要的文件和這樣的:

$ mkdir gruff 
$ git mv ...files... gruff 
$ git commit -a -m "moving gruff stuff to gruff/ subdir" 

接下來,我們切換回我們自己的master。粗暴的文件消失,我們的文件都回:

$ git checkout master 

現在我們可以把從gruff一些文件到我們master

$ git checkout gruff-master -- gruff/file1 gruff/file2 ... 

這些文件兌現我們的工作拷貝,並加入到我們的索引:

$ git checkout 
A gruff/file1 
A gruff/file2 
... 

我們現在可以將這些信息提交到我們的master

當上遊gruff發佈新版本的文件時,我們可以切換到我們的gruff-branch並拉動。根據我們的清理和提交來解決新的更改。返回我們的master,我們可以從我們的gruff-master本地跟蹤分支中選擇最新的更新。

是的,這基本上使用Git作爲一個美化補丁工具。來自gruff-master的素材摘入master沒有任何血統;它看起來像添加文件。然而,它總比沒有,並且在很多方面不如子樹或模塊麻煩。