2016-11-05 46 views
1

我們正在從SVN轉移到Git,但正面臨着一些我們無法回答的關鍵實際問題。多個Git存儲庫的單一隻讀視圖

目前我們有一個包含100多個項目的大型SVN倉庫。
它們由3個Jenkins作業構建,即許多項目都是由同一個作業構建的,它們也總是一起發佈(儘管它們只是鬆散耦合)。

此設置無法更改,因爲無法維護100多個Jenkins作業,並且每個作業都需要磁盤上大約3GB的空間(無論它構建多少個項目)。
如果您將此乘以3個活動分支,將會完全耗盡我們的可用資源。

簡單的解決方案是將一個SVN存儲庫轉換成一個Git存儲庫,一切工作如前。
但是,由於Git不允許設置repo目錄中的目錄權限,而且這也不是我們瞭解到的適當的「Git方式」,所以拆分存儲庫會非常好。

但是後來我們又回到了很多Jenkins的工作問題。
原則上,每個Jenkins作業似乎可以指定多個Git存儲庫,但是如果添加了更多存儲庫,則這會很快無法維護,因爲Jenkins GUI不擅長處理多個條目。忘記在工作中添加新的存儲庫的機會也非常高。

因此,我們查看了子模塊,子樹和subrepo,以便在一堆存儲庫上創建一致(只讀)視圖。
這個視圖(或其中的幾個)應該集中管理,Jenkins的工作只需檢查這個視圖並獲取構建項目所需的所有內容。
由於視圖的簡單更新會從所有包含的存儲庫中提取最新版本。然而,據我瞭解,這不適用於任何方法,因爲它們要麼需要特殊命令才能將包含的存儲庫更新爲最新的遠程版本(Jenkins Git插件無法執行的操作),要麼甚至需要提交將模塊指針向前移動到最新版本。

所以,這裏是一個簡單的問題:如何解決這個問題與Git沒有使用一個大的存儲庫?

+0

[Google的REPO](https://code.google.com/p/git-repo/)擅長操縱多個git回購站。 – ElpieKay

回答

1

由於視圖的簡單更新將從所有包含的存儲庫中提取最新版本。但是,據我瞭解,這不會對任何方法的工作,因爲他們要麼需要特殊的命令來更新包含庫到最新遠程版本

這是很容易使用Git子模塊做:

  1. 可以configure a submodule to follow a branch
  2. 要更新視圖,所有你需要的是:

    git submodule update --remote --recursive