我正在爲我的軟件公司尋找新的版本控制系統,這個系統相當小。到目前爲止,我一直在使用CVS,但我總是關於重新組織文件結構的OCD,結果,我似乎始終處於我所有代碼的第1版(因爲更改目錄名稱會導致CVS的版本化窗戶)。有沒有一個更適合於開發階段的版本控制系統(項目目錄樹不斷變化的地方),還是我需要壓縮並開始編寫我自己的版本控制系統?基本上,我需要它跟蹤除物理文件路徑以外的文件版本,以便這些移動不會影響文件版本信息。任何建議將不勝感激。謝謝!版本控制系統能夠處理文件移動?
乾杯, 盧卡斯雷塞克
我正在爲我的軟件公司尋找新的版本控制系統,這個系統相當小。到目前爲止,我一直在使用CVS,但我總是關於重新組織文件結構的OCD,結果,我似乎始終處於我所有代碼的第1版(因爲更改目錄名稱會導致CVS的版本化窗戶)。有沒有一個更適合於開發階段的版本控制系統(項目目錄樹不斷變化的地方),還是我需要壓縮並開始編寫我自己的版本控制系統?基本上,我需要它跟蹤除物理文件路徑以外的文件版本,以便這些移動不會影響文件版本信息。任何建議將不勝感激。謝謝!版本控制系統能夠處理文件移動?
乾杯, 盧卡斯雷塞克
Subversion,Mercurial,Bazaar和Git都支持移動文件,同時保持它的歷史。
在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 Control和Bazaar: 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?)。
創建一個示例項目,您可以使用它來測試每個工具,試一試並查看它們如何適用於您的建議工作流程。讓每個需要使用該工具的人都經歷相同的練習,比較筆記並就哪個最適合您的需求達成共識。
GIT中做到這一點,如Getting Git to Acknowledge Previously Moved Files討論。 git log --follow FILE
將確保跨文件重定位顯示日誌。
幾乎任何會做:Subversion,git,Hg這是最流行的名字。
Bazaar特別宣傳其對重命名的良好支持。他們提到在重命名的 'Top 10 reasons for switching to Bazaar'
有時你需要傳遞一個額外的標誌到這些系統來'追蹤'重命名,儘管所有的信息都被保存了。
正如Antti所提到的,DVCS選項(Mercurial,Git,Bazaar)跟蹤內容而不是文件,因此支持自然而然地與他們相伴隨。
CVS明顯過時。從Subversion(查找svn move
命令)開始,到現代DVCS系統抓取任何東西,你會變得更加快樂。
git的一個定義功能是跟蹤內容,而不是文件,這聽起來像是你正在尋找的東西。
另一方面,Subversion在移動文件時經常會遇到問題,特別是在使用分支時。
您使用Subversion進行了哪些實驗? –
@ Ernesto Campohermoso:每次我試圖在Subversion中進行合併時(甚至在最近的版本中),它可能會在第一時間運行,但在短時間後會出現嚴重錯誤。我們會遇到一些錯誤情況,例如「樹衝突」,這些情況令人生厭(通常會導致保存文件,擦除結帳,製作新文件,複製文件並再次嘗試)。對於任何涉及合併的工作流,我不再推薦Subversion。 –
@GregHewgill感謝您的反饋 –
你找到了'git'標籤。在發佈您的問題之前,您是否對此進行過一些研究? – Mat
SVN將處理它... *如果*您通過'svn move'移動文件。對我來說,「真正的問題」是如何讓SVN(或任何SCM)*自動找出*在變更集過程中哪些文件被移動並且適當地使用所述知識......但這是一個不同的問題。 – 2011-10-19 18:38:58
答案是「我是否需要屈服並開始寫我自己的?」很少是「是」(除非你的姓氏是Torvalds) – Nate