2011-04-24 24 views
2

我打算創建一個將獲得比之前我的項目大一點的項目,所以我認爲這將是很好的使用版本控制系統,如SVN或混帳保持跟蹤所有變化,在沒有風險的代碼中使用新功能進行一點點試驗等等。如何使用修訂控制系統,一般

現在(除了問題,我是否應該使用SVN或GIT),我問自己「怎麼用」一般這樣的系統。

到現在爲止,我發現類似的詞彙樹幹標籤分支合併經常出現在這方面的詞)。但我不確定如何真正與他們合作。 標籤似乎是發佈版本(如果不是,請糾正我),但我不知道什麼真正屬於中繼分支;何時使用什麼等。

在我的研究中,我還發現,通常應該創建一個文件夾結構,其子文件夾分支,標籤和主幹的一個新項目的建議。你也會推薦這個嗎?還是應該以不同的方式處理項目的源代碼?

有人可以試着向我解釋這個嗎?

回答

7

版本控制系統的話題可能有點過大教爲問答&這樣的網站堆棧溢出的一部分。當然歡迎您提問關於它們的問題,但「任何人都可以告訴我所有我需要了解的信息」可能不是正確的地方。

如果你有興趣在分佈式版本控制系統,因爲你所提到的git,你應該看一看hginit.com。儘管該網站描述了Mercurial,但大部分(如果不是全部)也適用於git。

至於創建這些文件夾的建議,完全取決於您決定使用的版本控制系統。

Subversion使用文件夾級別的「副本」來創建分支。把它想象成同時在磁盤上有多個副本,並且Subversion允許你將變化從一個文件夾合併到另一個文件夾,並跟蹤你合併了什麼,什麼時候以及在哪個方向。

對於DVCS」,這是沒有必要的,因爲分支以不同的方式進行,因此你不需要這些目錄。

您列出可以概括如下(注意,由於我使用的水銀,我可能會通過它們在該系統中有色)詞彙:

  • 幹線 - 你的主要發展線。如果你沒有源代碼管理,那麼這就是你一直工作的地方。
  • 標籤 - 一個標籤是一個輕量級的標記,將其視爲一個postit記事,將其粘貼到您的項目的某個版本上,以便以後可以回答問題「嗯,我想知道所有源文件看起來像當我發佈版本1.0「
  • 分支 - 分支是您的項目的平行宇宙副本,可能與變化。例如,當你發佈1.0版本時,你可能會創建該標籤,但你也可以創建一個分支。然後,在主幹上,您將開始工作到版本2.0或1.1,並且如果您需要發佈修補程序1.0來修復錯誤,那麼您將在該分支上執行這些修復。
  • 合併 - (修改或分支機構,這不同於系統到系統)當你有多個分支,你可以問你的版本控制系統,以幫助您通過將它們合併在一個分支進行到另一個變化
  • 變更集/修訂版 - 近似同義詞,表示您同時進行的一組更改。它可能是修復一個特定的bug,或添加一個特定的功能。變更集可以包含對許多文件的更改,甚至包含新文件或不再需要的文件刪除。

Wikipedia article on Revision control也有相當多的有用信息。

Mercurial glossary也列出了Mercurial中相當多的術語及其用法,並且許多版本控制系統中的許多信息都是正確的。


無論如何,這是一個典型的(對我而言)做一個項目的方式。

  • 您創建初始項目庫,只有主分支裏(主幹線在Subversion中,默認情況下,水銀,主人?我覺得在GIT)
  • 然後你開始你的項目中,你經常犯,你建立了一個很好的變更集列表
  • 在某些時候,你準備發佈1.0版本,所以你創建了這個標籤,並且在那個點上創建了一個名爲「1.0」的分支,然後你釋放你的軟件
  • 然後,您繼續工作,朝着版本1.1或2.0,具體取決於
  • 在某些點你有一個1.0客戶發現的錯誤列表
  • 你修復這些錯誤在trunk/default/master中,以便下一個大版本至少有這些錯誤修正,然後你將這些修改合併回到1.0
  • 當1.0所有已知的bug已經修復,您標記,作爲1.01,並釋放
  • 然後再重新打開2.0
  • 工作在2.0準備好釋放,你標記和分支再等

這只是一種方法,它有很多。如果你問他們,人們會告訴你他們喜歡的方式,我不會說我的方式是對的。

+0

謝謝你花時間回答:)我並不真的搜索版本控制系統的所有內容很多像堆棧溢出這樣的網站;)我只是想知道一些「基礎知識」,如干線標籤分支的東西(換句話說,一般的開發過程如何);所以有些東西開始「理解」並繼續我對這些系統的研究 – tbolender 2011-04-24 22:47:29

+0

我已經編輯了一些更多的細節。請注意,有可能沒有正確的方法來做到這一點,但有很多不好的方法可以做到這一點,好的方法以不同的方式很好。我建議你先決定是否要使用集中版本控制系統或分佈式版本控制系統(即。Subversion vs. Mercurial/git),然後閱讀它們各自的工作方式。細節決定成敗。然而,我的建議是配合DVCS,因爲我使用Mercurial,當然Mercurial是最好的:) – 2011-04-24 22:56:42

+0

「更多的細節」o_O。順便說一句,答案本身+1,並提到mercurial作爲一個起點。 – zerkms 2011-04-24 23:00:42

5

你可以開始檢查http://www.infoq.com/articles/agile-version-controlhttp://nvie.com/posts/a-successful-git-branching-model/

而且trunk-tag-branch是一點點過時的模式,在SVN使用。 DSCM(mercurial,git)對分支和標籤具有本地支持,因此您不需要明確創建這些目錄。

+1

過時了嗎?不,它仍然工作得很好。顛覆活着,並且很好。創建這些目錄並不是很大的困難。 – duffymo 2011-04-24 22:43:22

+0

我認爲他的意思是說這些目錄的用法不應該結轉到DVCS中,因爲它們不使用文件夾級副本作爲分支。 – 2011-04-24 22:44:45

+0

@duffymo:是的,我的意思正是Lasse V. Karlsen上面所說的。 – zerkms 2011-04-24 22:45:48

1

Subversion Red Bean這本書對這個話題有很好的討論。

Pragmatic Version Control也是一本好書。

+0

這本實用的書有點舊了,如果他要讀Subversion,他至少應該選擇一些東西涵蓋1.5或更新版本,包含所有新的合併更改。 – 2011-04-24 22:59:09

2

擴展位上Lasse V. Karlsen answer

  • 對於學習使用版本控制,你應該看看那個#1找到您想要的「相關問題」。

    在我看來,GitHub的Tom Preston-Werner編寫的The Git Parable很好地教導了人們應該如何以及爲什麼要使用(分佈式)版本控制系統(描述如何創建DVCS,如Git 可以創建)。

  • 關於分支模型:如果版本控制系統使用的是支持輕量級分支,它可以合併分支又好又快,您通常使用2種分支在典型的工作流程:

    • 壽命較長的分支如「主」或「主」或「穩定」(又名'樹幹')當前正在向新版本發展,「下一個」或「開發」或「不穩定」工作,'maint'或'maintenance'是上一次發佈的錯誤修正。
    • 主題分支 - 開始使用新功能時,最好將其放入單獨的短暫且通常未發佈的分支中。通過這種方式,您可以在不影響其他工作的情況下開展一些實驗性新功能;它允許在許多不相關的功能上並行工作。

HTH