2012-06-06 168 views
2

在我身爲建築工程師和系統人員的角色中,我必須學習最終弄清楚一些事情 - 即如何設置我們的基礎架構。在我加入他們之前,他們沒有任何。考慮到這一點,如果我問任何本該顯而易見的問題,請原諒我。Mercurial分佈式存儲庫

目前,我們有3個層次的分佈式善變庫:在每個開發人員的機器,在中央(主幹)兩級的一個級別的服務器 - 只有從本地網絡訪問和到位桶的第三層。工作流程如下:

  1. 本地開發:開發人員從本地網絡服務器提取變更集。一旦合併衝突得到解決,開發人員將提交到本地並推送到我們的本地服務器。一個安排好的腳本在一夜之間支持BitBucket。

  2. 在家工作:開發商從到位桶拉更改集。開發人員向他們的本地回購協議致敬並推送到BitBucket。

  3. 的TeamCity拿起從本地網絡服務器爲每個項目回購的變化和運行構建/自動部署到測試環境。

問題我打的場景2:此刻,如果有人推的東西到位桶它是把它合併回當他們回到辦公室時他們的責任。如果可以實現自動化,這有點浪費時間。

如果你想知道,我們有本地網絡上的中央回購的原因是因爲這將是運行的TeamCity建立到位桶倉庫的緩慢。沒有測試過,所以這只是一個受過教育的猜測。

總之,該計劃並推動從中央存儲庫本地網絡上的所有更改的腳本只是運行「汞推」每個庫。它必須事先進行拉/合併。我該如何做到這一點?

這是拉將不得不使用的開關: - 更新拉 之後 - 在合併衝突的情況下,始終以較新的文件 - 在錯誤的情況下,請發送電子郵件至系統管理員(或多個) - 什麼額外的?

請隨意分享您自己的設置,只要它與所描述的沒有太大的不同。

更新:在最近的答案的光,我覺得一個重要的方面,如果預期的方法需要加以澄清。這個想法不是強制合併在我們的本地網絡中央回購。相反,它應該解決合併衝突的問題,就像在開發者機器上使用HgWorkbench進行post pull:update + merge一樣。所有的開發者默認都有這個,所以應該沒問題。從到位桶

  1. 更新+自動合併
  2. 任何合併自動衝突:

    因此,對服務器的腳本/批處理文件將執行以下操作?

    3.1是 - >發送電子郵件給管理員手工合併 - >打破

    3。2否 - > Cary

  3. 獲取傳出變更集。將推動創造多個頭? (由於拉/更新,這可能是多餘的)

    4.1是 - >提示管理員。打破。

    4.2否 - >更改推

希望這清除了一點東西。現在,可以單獨使用hg命令 - 批處理 - 還是必須編寫腳本?具體可以發送電子郵件嗎?

謝謝。

+2

改變TeamCity從BitBucket運行應該是微不足道的。既然你只是猜測它會變慢,我想你應該嘗試一下,然後再嘗試解決這個問題。奇怪的是,基本上有兩個同層的副本(BitBucket和本地中央服務器) –

+0

不可否認,擁有兩層可能會很奇怪。但這是分發給我的手段。它應該能夠處理任意數量的圖層。無論如何,我會嘗試直接連接到BitBucket,看看它是如何發展的。這並不像您想象的那樣微不足道,因爲您必須開始玩優化 - 減少爲每個構建下載的源代碼量(而不是清理某些文件夾),甚至可能重構某些解決方案以滿足此需求。黃金法則:每個計劃需要三倍的時間執行按計劃:) –

回答

3

因此,你所有的工作都可以在BitBucket上找到,對吧?爲什麼不製作BitBucket(從任何地方都可用)您的主要回購來源和刪除您的本地服務器?您可以使用TeamCity從BitBucket中獲取更改,以便您的每晚構建和開發人員始終使用BitBucket中的當前回購併自行解決所有合併問題,這樣就不會有任何後續合併問題。

+0

謝謝kworr。說實話,我們正在考慮這樣做。不過,Mercurial應該是一個分佈式源控制系統。我們保留本地中央服務器的原因首先是性能,其次是我們的CTO對於沒有所有代碼的中央本地副本仍然有點偏執。儘管我們可以用ButBucket來扭轉角色。會考慮。 –

+0

Mercurial是一個DVCS,但沒有人會強迫你使用它的所有設計可能性。 – kworr

+0

您可以隨時設置您的本地服務器以從BitBucket中獲取更改,以便爲您製作其他備份。我不是一個Mercurial guru,但你也可以從本地服務器獲取更改並將它們推送到BitBucket。你也可以拒絕在本地服務器上推送任何推送到BitBucket。 – kworr

1

我想你可以使用腳本自動化,如果我是你,我會嘗試使用PowerShell。但是,有時這可能需要在發生衝突時手動更改合併(因爲當開發人員對BB和本地回購提交更改時,這些更改可能會發生衝突)。

+0

感謝您的建議馬立克。有意義但是我想探索一個批處理文件中包裝的hg命令。如果其他可能性失敗,這肯定會成爲後備選擇。關於手動合併的好處。 –

2

我不會嘗試自動合併更改,如果他們衝突,這隻會導致破損和不一致的版本和「失去」的變化導致混亂和混亂。如果不清楚合併的方式,請不要自動合併它。

一個更好的選擇是將兩個頭保持在一起,並將它們推入/拉出而不合並。通過這種方式,每個人都可以從工作/家中獲得他正在處理的數據版本。手動合併必須完成,但這也可以在工作或家中完成,使開發人員可以從任何地方解決問題。您也可以在這種情況下發送電子郵件,以確保每個人都知道這個問題。

+0

謝謝。用預期的方法提出了一些很好的問題。我會爲主要問題添加一個更新。 –