2011-03-27 126 views
2

我們使用git作爲我們項目的源代碼,在一個大型團隊中工作。現在大約有一半的開發人員正在進行項目的現場階段。這個階段將涉及大量開發,即許多提交。與此同時,留下的另一半也將繼續致力於代碼。兩個完全相同的git倉庫

不幸的是,現場只會有間歇性和不可靠的互聯網連接。然而,現場團隊能夠在另一個團隊之間同步(提交/推送/拉動)他們的變更是至關重要的。但同樣重要的是,辦公室的其他團隊可以對「中央」git存儲庫進行更改。

因此,我正在尋找一種設置,可以讓現場團隊高效地使用git,即使互聯網長時間處於關閉狀態也能夠與辦公室進行同步互聯網是可用的。

有沒有一種簡單而又簡單的方法可以做到這一點?

我的第一個想法是:帶上我們的上網本充當「服務器」,並有一個裸倉庫的克隆。然後現場團隊將其起源更改爲上網本,並推向上網本。但是與主存儲庫的同步正在給我帶來一些麻煩。在上網本上做git push可以正常工作,但是git fetch不會返回我在主repo上所做的更改。 此外,我很擔心,如果一個文件在repos上發生了更改併發生衝突會發生什麼情況 - 我想有人需要在上網本上工作來解決衝突並在同步發生之前提交它?

+0

「在上網本上做git push工作正常,但是git fetch不會返回我在主repo上所做的更改。」 - 這應該工作。也許你有一些配置不正確? – MatrixFrog 2011-03-27 21:08:26

+0

這確實是可能的。顯然,我不知道什麼,否則我會修復它;-) – Yamal 2011-03-27 21:13:19

回答

5

你的設置應該可以工作,所以我不確定這個抓取有什麼問題。然而,當從公司的中央倉庫獲取並解決衝突時,應該在本地執行:每當互聯網連接啓動時,一位開發人員可以從中央倉庫取貨,合併並解決他自己的計算機上的衝突,以及將結果推向中央回購和現場回購。我相信一個人不應該直接在一個用作服務器的存儲庫上工作(如果它是一個裸倉庫,它應該是,因爲沒有工作副本,所以你不能直接在倉庫上工作)。這也可以幫助您在現場服務器上設置開發環境。

此外,現場開發人員不應該用現場存儲​​庫替換origin;相反,他們應該用git remote add添加一個新的遠程設備,並將它稱爲例如onsite。然後,無論何時想要執行pullpushfetch,都可以選擇是使用公司的中央回購還是現場回購。

+2

只是爲了明確,你的上網本回購應該是一個裸回購(檢出沒有工作副本) – brycemcd 2011-03-28 01:18:38

+0

@Bryce:是的,這就是我的意思是「現場服務器回購「 - 但我看到我可以更清楚地瞭解它。 – 2011-03-28 01:20:54

+0

絕對,你釘了它,我不是故意暗示你沒有。我只是認爲,對於OP來說,在不止一個地方看到它是有用的,可以把這個觀點帶回家。 – brycemcd 2011-03-28 17:01:07