2010-01-20 64 views
7

所以現在我正在學習Ruby on Rails的,和我通過這本書「敏捷Web開發使用Rails」工作。我還決定,我想給Mercurial一個去,因爲我已經閱讀了分佈式SCM,這看起來是一個理想的情況。不過,我仍然寧願將我的代碼遠程推送到我的Linux VPS,以便讓我的硬盤決定進行潛水。用水銀SCM分支

所以,我的問題是特定於Mercurial的分支。現在我已經建立了一個遠程存儲庫,並且我可以輕鬆地對SSH進行更改(我甚至設置了一個Nginx FastCGI站點,可以讓我推送它)。然而,我想要做的是爲每一章創作分支,因此我可以在本書中保留一份有關我的進度的良好組織歷史。所以這是我在做什麼:

 
$ hg branch chapter-10 
(do chapter 10 stuff) 
$ hg commit -m "Chapter 10 complete" 
$ hg update default 
$ hg merge chapter-10 
$ hg commit -m "Merging chapter 10 into default" 
$ hg push 

一旦我執行推聲明,我從水銀得到這個消息:

 
pushing to ssh://myserver/hg/depot 
searching for changes 
abort: push creates new remote branch 'chapter-10'! 
(did you forget to merge? use push -f to force) 

所以在這一點上,我再次嘗試做一個hg merge,和它告訴我沒有什麼可以合併,這顯然是真的,因爲我剛合併它。當我用-f強制推送時,一切看起來都很好,甚至web界面也顯示了合適的分支。

綜上所述,我的問題很簡單:我是不是該做的正確方法?是否有更適合Mercurial的方法(即「Mercurial方式」)?老實說,我只是希望知識庫作爲備份。我是分佈式SCM模型的忠實粉絲,但對我來說,這種感覺讓人不知所措。任何有識之士都非常感謝!提前致謝。

+0

您的意圖是:a)在您按照章節工作時擁有一系列檢查點,或者b)在不同的分支上打開多個章節同時進行編輯? – Tarydon 2010-01-20 06:29:30

+0

選項A是我的意圖,但在團隊場景中我可以看到選項B的價值以及 – 2010-01-20 06:34:32

回答

6

push -f是您的案例的正確選擇,並且在彈出此「push creates new remote branch」警告時上個月有一個討論添加該命令:請參閱issue 1513

然而,issue 1974(本月)提到了一些不良的影響(而不是在你的情況雖然)。
請參閱此translated article以瞭解有關在遠程回購中創建第二個頭的更多信息。


在更普遍的觀點,你可以使用分支,如果你正在寫在平行分會,並希望只在特定的(穩定)的時間點

但是,如果你的寫作過程中,以合併它們是更線性的,你可以只使用一個分支,並沿途放置一些標籤。
但是,如果您回到第10章並添加一些行,即使您已經放置標籤11和12,也會使歷史難以閱讀。所以在這種情況下分支仍然是一個好主意。

+1

感謝您的鏈接。非常豐富。看起來好像我試圖使用分支,標籤會更合適。 – 2010-01-20 21:27:20

4

我不知道你的具體問題,但從你的意見看來,你使用的分支,你可能想使用標籤。

分行一般使用時,多人在同一個項目合作,要創建工作分離,從而一個人就可以在一個穩定的代碼工作,而其他做了實驗暫時休息功能。或者,分支機構用於穩定釋放,而發展則在後備箱中進行。

標記(或標記)用於主要創建一個標記標誌着到代碼的版本一些重要性。例如,如果您想標記第10章的完成,則只需使用'chapter-10'標記標記所有當前版本。沒有必要分支。如果出於某種原因需要,您可以在將來的任何時候從標記版本進行分支。

+0

我同意。考慮到您可以隨時隨地返回並從您需要的任何地方分支,事先創建分支似乎是YAGNI的明確例子。 – 2010-01-20 16:22:29

2

在這種情況下,我覺得完全可以使用-f進行推送。它只是創建新的分支,而不是頭。創建遠程負責人完全是另一回事。