2011-05-19 137 views
0

首先,我一直盯着一頁一頁的解決方案,但沒有一篇似乎適合我的情況。使用Mercurial(hg)跟蹤更改並自動進行同步?

我在全國各地都有使用Windows工作站和Eclipse的網絡開發人員。我們決定DVCS最適合我們,因爲集中式系統無法正常工作(Serena:慢速網絡連接需要永久檢查...他們不這樣做,因爲它不是「精簡」等)

我們使用Eclipse來編輯和修改處於不同狀態的開發服務器上的文件。 (大多數DVCS方案假設您的工作站上安裝了Web服務器或正在進行二進制可執行開發。)

我想嘗試的是爲開發人員更改和「功能播放」設置本地存儲庫,但會自動保留開發庫是最新的。我想過使用Mercurial鉤子來自動拉/更新/合併/推送,但這需要開發人員在每次他們想要測試更改時提交。 (爲了將鉤子上傳他們的文件到開發服務器)。這是自動發生在文件保存上的理想選擇,因爲它已經是培訓人們使用版本控制的一個問題(主要是因爲目前PITA速度很慢廣域網和虛擬位置,不能選擇升級廣域網)

我的猜測是我將不得不設置Unison或其他東西來保持開發人員的資料庫同步到開發服務器,就好像它是本地複製,當然會與其他開發人員同步。我試圖找出是否有人有一個簡化/簡單的解決方案,讓所有開發人員保持最新,同時允許他們隨意版本控制(容易)。

+2

在某些時候,開發人員必須說「我對此感到滿意」,這就是一個承諾。這是版本控制的本質,並沒有避免它。做提交文件保存(如果這是我明白你建議)是瘋狂。 – 2011-05-19 19:44:02

+0

是的,這就是爲什麼我認爲我們將不得不建立一個同步解決方案才能做到這一點。在每個工作站上放置一個開發環境在我們的情況下是不可行的。 – Andir 2011-05-19 20:19:24

+1

對不起,這只是一個警察。我不在乎你的webapp是否是空間激光器的前端,並且需要具有50,000美元座位許可證的軟件 - 你可以並且應該爲每個開發人員的在臺測試嘲笑它。 「讓我們看看遠程服務器上的這種工作是否是我們10年前的生活中的傷心事,但現在沒有必要承擔大量的生產力。使用VM或Mocks或爲每個開發者花費10K美元;不管它花費多少時間,美元都將在實際生產率上得到彌補。 – 2011-05-20 02:23:44

回答

0

這是分支機構的用途。有一個名爲「unstable」的分支,並使用一個存儲庫來設置你的開發服務器,該存儲庫在提交/合併時自動更新到只有該分支(通過掛鉤)。單個開發人員可以自由處理功能分支並在本地提交。當某些東西準備好共享時,開發人員將他們的更改合併到「unstable」分支中,並將該分支推送到開發服務器/存儲庫。

我以這種方式管理我的部署。我的Web服務器虛擬主機Web根指向Mercurial存儲庫/工作副本。當某些東西準備出去時,我將它合併到「穩定」分支中,並將「穩定」推送到服務器。存儲庫掛鉤使用新的更改更新虛擬主機上的文件。

[hooks] 
changegroup = /usr/bin/hg update stable >&2 

我一直只做了一個月左右,但它一直在像一個魅力。

另外,哈得遜/詹金斯+1。你在找什麼叫做「持續整合」(CI),哈德森和詹金斯是這樣做的。

如果你在所有的工作站上都​​沒有開發服務器,那麼可能使用測試驅動開發和你的語言的某種單元測試框架工作 - 其中大多數不需要完整的服務器實現能夠編寫和測試你的代碼。這需要改變範式,但你肯定會得到更好的代碼質量。

+0

這是一個整潔的概念,但它仍然遇到了開發人員無法在本地進行測試的問題(本地沒有框架來測試他們的代碼,但是它給了我一些關於其他方面的想法,所以謝謝獲取信息! – Andir 2011-05-19 21:55:48

0

我們對mercurial很滿意,但我們不得不改變我們的習慣......並花了一段時間

每個開發者現在都有一個本地的測試平臺。提交是通過分支進行的,在本地驗證測試之前不會推送任何東西

然後,哈德森是我們的朋友。要整合團隊作品,每次提交都會生成一個測試應用程序完整性的構建。紅色表示回滾並返回到開發者。綠色很酷

開發人員在這裏提交'理智'的代碼,並通過團隊整合到中央回購。他們必須決定什麼時候推動。沒有同步任務可以讓他們擺脫這種負擔。當我看到所有可能發生,由一個人即使每個推選擇是consciensciouly所犯的錯誤,我無法想象,如果改變對每個文件自動保存發生

與水銀的好經驗......

+0

「每個開發者現在都有一個本地測試平臺。」 - 這是我們不能做的事情。我們在開發服務器上開發框架和不同模塊,因此擁有本地開發環境意味着要在本地SQL服務器中複製大量數據,認證,許可......不會發生。 – Andir 2011-05-19 20:15:47

+0

是受限測試平臺,每個模塊進行單元測試和集成測試。這不是整個平臺。但那不是重點。每個組織都是不同的,我的並不是一個完美的模型。這只是Mercurial如何改變我們的習慣並幫助我們改進我們的過程的體驗。但是確實存在限制。 「 – Grooveek 2011-05-19 20:25:26

+0

」在本地SQL Server中複製大量數據「是一個贈品。您可能想要認真考慮測試驅動開發,並使用某種模擬/存根框架。您不需要本地數據庫來完成此任務,並且您現在可以使用實際數據在開發服務器上進行集成測試。 – bpanulla 2011-05-19 21:07:55

0

你說你想擁有一個開發人員更改的本地存儲庫,但會自動將任何更改推送到服務器。如果您無法使用本地開發環境來測試更改,那麼擁有本地開發分支有什麼意義?如果您的測試必須在開發服務器上完成,那麼我不能想到在本地存儲庫中允許「功能遊戲」,同時在開發服務器上保持任何形式的理智。

在這種情況下,最好的辦法可能是在開發服務器上分支並讓服務器簽出不同的分支來測試不同的功能(hg update -C feature-blah)。服務器存儲庫的默認狀態應該是主要「devel」分支(hg update -C devel)的檢出,並且當任何功能或錯誤修復分支被驗證爲工作時,它們將合併回「devel」並更新服務器的存儲庫從那。

編輯說明:您的開發人員可以從「開發」或從功能分支結帳到他們的本地機器。然後,他們會進行任何編輯並將其推回到服務器,然後將服務器的活動分支切換到最新更新的代碼。

此外,我從您的其他評論中認爲,只有一個開發服務器,並且它一次只能運行一個版本的代碼。如果情況並非如此,我的答案完全沒有意義。

+0

是的,一個開發服務器。幸運的是,所有的開發人員通常不會在相同的文件上工作,所以衝突很小,但是能夠解決某些衝突會很好。因此,工作分支的本地存儲庫被同步到服務器。如果有覆蓋,你仍然有你的本地。對困惑感到抱歉。據我所知,如果只有一臺服務器,兩個開發人員同時在不同的功能部件上同時工作,實際上是不可能的。我不知道我是否有興趣讓開發者服務器定期檢查內容。 – Andir 2011-05-19 21:49:01

+0

爲了解決衝突,這就是合併的目的。 Mercurial將自動找出如何組合變更集。使用所描述的方法,如果出現錯誤,您仍然可以恢復以前的修訂版本,並且無論如何都會在功能分支上進行實驗性更改,因此您仍然可以使用半穩定的devel分支切換回。就開發服務器「檢出」而言,像Mercurial交換分支這樣的DVCS是快速而平凡的。您可能需要更深入地瞭解DVCS的工作原理,以便爲您的工作流找到最佳解決方案。 – 2011-05-19 22:14:05