2011-10-19 92 views
2

我正在爲我的軟件公司尋找新的版本控制系統,這個系統相當小。到目前爲止,我一直在使用CVS,但我總是關於重新組織文件結構的OCD,結果,我似乎始終處於我所有代碼的第1版(因爲更改目錄名稱會導致CVS的版本化窗戶)。有沒有一個更適合於開發階段的版本控制系統(項目目錄樹不斷變化的地方),還是我需要壓縮並開始編寫我自己的版本控制系統?基本上,我需要它跟蹤除物理文件路徑以外的文件版本,以便這些移動不會影響文件版本信息。任何建議將不勝感激。謝謝!版本控制系統能夠處理文件移動?

乾杯, 盧卡斯雷塞克

+6

你找到了'git'標籤。在發佈您的問題之前,您是否對此進行過一些研究? – Mat

+2

SVN將處理它... *如果*您通過'svn move'移動文件。對我來說,「真正的問題」是如何讓SVN(或任何SCM)*自動找出*在變更集過程中哪些文件被移動並且適當地使用所述知識......但這是一個不同的問題。 – 2011-10-19 18:38:58

+6

答案是「我是否需要屈服並開始寫我自己的?」很少是「是」(除非你的姓氏是Torvalds) – Nate

回答

2

Subversion,Mercurial,BazaarGit都支持移動文件,同時保持它的歷史。

在Subversion中,您將使用svn move(請參閱Subversion: Moving Directories with History)。

在Mercurial中,您將使用hg rename。但是您需要記住使用hg log --follow FILE來查看完整的歷史記錄(請參閱In Mercurial, 「hg rename」 works but the history doesn't follow the file?)。

在Bazaar中,您將使用bzr mv(請參閱Renaming files and folders with Bazaar Source ControlBazaar: Moving files after the fact)。

在Git中,您將使用git mv。但是您需要記住使用git log --follow FILE來查看完整的歷史記錄(請參閱Is it possible to move/rename files in git and maintain their history?)。

創建一個示例項目,您可以使用它來測試每個工具,試一試並查看它們如何適用於您的建議工作流程。讓每個需要使用該工具的人都經歷相同的練習,比較筆記並就哪個最適合您的需求達成共識。

1

Bazaar特別宣傳其對重命名的良好支持。他們提到在重命名的 'Top 10 reasons for switching to Bazaar'

GitMercurialSVN(及以上)支持他們。

有時你需要傳遞一個額外的標誌到這些系統來'追蹤'重命名,儘管所有的信息都被保存了。

正如Antti所提到的,DVCS選項(Mercurial,Git,Bazaar)跟蹤內容而不是文件,因此支持自然而然地與他們相伴隨。

2

CVS明顯過時。從Subversion(查找svn move命令)開始,到現代DVCS系統抓取任何東西,你會變得更加快樂。

1

git的一個定義功能是跟蹤內容,而不是文件,這聽起來像是你正在尋找的東西。

另一方面,Subversion在移動文件時經常會遇到問題,特別是在使用分支時。

+0

您使用Subversion進行了哪些實驗? –

+2

@ Ernesto Campohermoso:每次我試圖在Subversion中進行合併時(甚至在最近的版本中),它可能會在第一時間運行,但在短時間後會出現嚴重錯誤。我們會遇到一些錯誤情況,例如「樹衝突」,這些情況令人生厭(通常會導致保存文件,擦除結帳,製作新文件,複製文件並再次嘗試)。對於任何涉及合併的工作流,我不再推薦Subversion。 –

+0

@GregHewgill感謝您的反饋 –