2010-10-18 53 views
2

我的工作場所正在考慮轉向現代(D)VCS,這是我所追求的。在遠程服務器上工作的DVCS

我的老闆正在設想,當前的工作流程是建立一個集中的存儲庫,任務完成後每個人都可以提交/合併他們的更改。在處理任務時,每個開發人員都可以擁有自己的分支並承諾。

問題是,他並不是非常喜歡這樣的想法,即只有在更改被推入共享存儲庫之前,人們纔在其工作站上擁有代碼。這是因爲磁盤故障等。

他希望看到的是每個人都有自己的分支在服務器上,當你在本地工作站上提交時,分支會自動更新。

DVCS是否支持這種易於安裝的方式?

請注意,儘管我個人認爲每個開發人員都可以完全接受,例如只需將他們的更改推送到遠程服務器上的專用分支,即可負責備份他們的代碼。這可以手動完成或使用cron腳本自動完成。

回答

5

只是爲了「我們也是」的因素:這是可行的mercurial,因爲它是在bzr和git。只要使用一個提交鉤子,在可用時推送到更中心的回購站點。事情是這樣的:

[hooks] 
commit = hg push ssh://path/to/individual/developer/repo 

有一件事我會注意的是,寧可通過鉤子執行這個你可以推到中央回購到個人開發者的吸引力,你會發現他們這樣做自己。我做的事讓人們犯/推(每日/每小時):

  • 確保他們有一個回購協議,他們可以推到一個沒有關於通過編譯/測試的期望 - 檢查點回購,如果你願意
  • 可以讓他們輕鬆地在中央服務器上建立自己選擇的回購計劃 - 如果是三次點擊 - 便於他們爲其個人分支開始建立更改,那麼他們將成爲在每次更改之後推送只是爲了看到測試套件運行
  • 不要因爲分支歷史而羞愧它們 - 良好的DVCS使用涉及大量的pull/merge/push週期。如果你讓他們使用rebase或者collapse來將30個變更集合中的15個合併變成每個特性/ bug的變更集合,那麼他們會被激勵來保持東西本地化,直到他們準備好立即合併/推送整個東西
  • 在公共場所運行一些不具評判性的指標。沒有什麼比通過代碼行對開發人員排序的那麼嚴格和愚蠢,但是可以注意到,無論是來自所有repo RSS提要的彙總RSS提要,還是提交@電子郵件別名,它們都可以快速將X推送的變更集Y轉換爲回購Z 「消息,每當有人推。這很好,因爲人們總是喜歡他們的額外工作時間有點陽光,並在會議結束時進行「推動」。
0

您可以準備一個提交後掛鉤(請參閱本地存儲庫中的.git/hooks/post-commit.sample)以自動將當前分支推送到服務器。

如果你這樣做,我認爲共享服務器上的分支名稱應該以開發者的名字作爲前綴以防止名稱衝突。

0

這聽起來與我們現在對Bazaar的設置非常相似,但是我認爲它可以在Mercurial和其他人中使用Git中的post-commit掛鉤或Mercurial中的「push-after-commit」 。在商場這樣做的方法是做這樣的事情:

# Create a repository 
bzr init-repo --no-trees path/to/server/project 
# Create the main development branch 
bzr init path/to/server/project/trunk 
# Create the local working copy (which contains the complete history but is bound to the server copy of trunk) 
bzr co path/to/server/project/trunk working-directory-name 
# Alternative command that works the same: 
bzr branch --bind path/to/server/project/trunk working-directory-name 

cd working-directory-name 

# Now create a branch for the user to work on 
bzr switch -b new-branch 
# Hack hack hack 
# Commit (gets pushed to server as this is a checkout a.k.a bound-branch) 
bzr ci -m "Done stuff" 
# Go back to trunk to merge 
bzr switch trunk 
# Merge 
bzr merge path/to/server/project/new-branch 
# Commit the merge changes (gets pushed to server) 
bzr ci -m "Merged new-branch" 

所有分行將在/路徑的資料庫舉行/到/服務器/項目。任何對本地工作副本的提交都將自動推送到服務器。如果你使用圖形用戶界面,你可以安裝我的remote-feature-branches插件,它可以自動創建一個帶有中繼分支的新存儲庫並在本地檢查出來(上面的三個命令)。


我只用水銀一點點,但我相信你會做到這一點的方法是在服務器上的一個分支,並在本地分支,並編輯.hgrc文件,包括:

[hooks] 
commit.autopush = hg push 

所有用戶都必須包含在這種情況下,所有的支路的本地副本,而在集市,本地副本只會有,他們工作的分支上的歷史。稍微不同的實現,但功能上我認爲很多。

0

看起來你的老闆正在爲擁有DVCS的能力工作,但也希望在「辦公室」工作時擁有一個集中的SCM。

這是正確的,那麼你爲什麼不看看塑料SCM?這正是我們所做的:你可以去分佈式或(更「企業友好」),你可以集中工作(或兩者的組合),但仍然是關於分支的工作

看看這兩篇文章:

http://codicesoftware.blogspot.com/2010/08/branch-per-task-workflow-explained.html http://codicesoftware.blogspot.com/2010/03/distributed-development-for-windows.html

也許在這裏太: http://www.plasticscm.com/features/task-driven-development.aspx

相關問題