2009-06-25 65 views
5

我已將自己的問題描繪成與CodePlex中的Subversion項目一起工作的問題 - 爲此我尋求幫助here。我有一個本地存儲庫CodePlex有它的項目的互聯網存儲庫,並且這兩個不混合:-(。如何在開發代碼時使用Internet Subversion版本庫?

但我親愛的離去的父親曾經告訴我,聰明的人和智者之間的區別換句話說:我一定是做錯了,所以:

假設你是一羣少數開發者,那裏有一個Subversion控制的項目在你想要開始修改的Internet上,你想在本地工作,根據你的需要進行修改,你需要本地的版本控制,你想控制哪些Internet更改接受你的版本庫 - 那些是相關的並且重要並且不會造成噪音。您想要將互聯網的某些位置提交到互聯網l變化 - 那些你確定是穩定的,並且與整個社區有關的變化。

這種操作方法對我來說似乎是常識,但我從來沒有在開源項目上工作過。所以: 1.這是一種常用的操作方法嗎? 2.您如何在不惹麻煩的情況下使用Subversion進行操作?

+0

看來,常見的答案是我使用分佈式版本控制系統,如Git。然而,這意味着您建議我使用CodePlex而不是CodePlex Gods計劃的方式。 我明白了,謝謝大家。但是,我的MO與規範有什麼不同?上述兩個問題的答案是:1.否和2.你不能? 其他人使用CodePlex/Subversion的方式是什麼,所以他們不必使用Git? – Avi 2009-06-25 22:06:33

回答

1

SVN書中的Vendor Branches部分介紹了從外部源(「供應商下載」)吸收更改到您自己的本地存儲庫的內容。

或者,您可以使用merge命令從存儲庫A中的文件夾櫻桃挑選修訂,並將這些更改應用於存儲庫B中文件夾的工作副本。合併命令似乎對此有一些支持(在至少在最新版本中),所以它可能很像在本地分支之間合併(減去自動合併跟蹤)。

0

說你是一個組的幾個 開發商。有一個Subversion 受控項目在互聯網上你想要開始修改。你想 在本地工作,將其更改爲 滿足您的需求。你想要本地 版本控制。你想控制 哪些互聯網更改接受到 你的倉庫 - 那些是 相關和重要的,不會造成 噪音。

您希望能夠在本地工作,並且無需第二次思考即可進行分支或合併。你基本上談論分佈式版本控制。 Subversion不支持這一點。你應該改用MercurialGit之類的東西。

0

這聽起來像你應該看在原庫代碼創建一個分支。您可以根據需要將樹幹從樹幹合併回您的樹枝,或以其他方式合併。

你的另一個選擇是將文件從存儲庫導出並添加到自己的倉庫。但這只是未來的痛苦。

+0

如何分支原始(CodePlex)存儲庫?我不「擁有」它。 – Avi 2009-06-25 22:08:41

0

使用分佈式源代碼管理系統(如git)會更容易。

那麼你可以有一個本地的Git倉庫,使用git-SVN中獲得公衆回購更新,並與您的特殊的調整有自己的本地分支。

你會看到很多這樣的項目在github上(延長使用Git顛覆-ED OSS項目) - NHibernate的,對於城堡項目等

如果您必須使用SVN堅持,你可以管理自己的使用公共幹線上的一組修補文件進行更改。如果你想從主幹新的東西,創建更改補丁,恢復,更新到新的樹幹,然後有選擇地應用你的補丁。

+0

你的最後一段完全讓我困惑了一分鐘。重讀第三次,它開始有意義。謝謝! Avi。 Avi – Avi 2009-06-25 21:51:27

0

我通常會保留一個從SVN中下載的副本,其中只包含來自存儲庫的更新代碼以及我正在處理的代碼,並計劃提交回來。

在處理新功能時,我會將整個副本導出到我機器上的全新副本,然後對所需的更改進行+測試。如果我決定重新提交更改,則使用某種合併工具(如果您在Windows上,則爲WinMerge),將我的更改合併回原來的SVN更新的文件夾中。

這使得一切都相當整潔,因爲我能夠相對容易地避免無意中提交代碼。我也可以通過製作我的'基本'SVN更新文件夾的新副本來輕鬆取消更改。不足之處在於,它使得我不打算立即執行相對笨拙的多個功能。

1

顛覆本質上是一個集中的版本控制系統。從你的描述來看,這聽起來像你想要一個分佈式版本控制系統。在這樣的系統中,人們可以在本地發展,然後在彼此之間交換他們的工作單位(稱爲變更集)。分佈式版本控制系統對合並分支機構提供出色支持以支持此功能。

我自己使用的是Mercurial,因爲它的許多命令類似於Subversion中的命令,所以我會推薦它用於Subversion用戶。其他此類流行工具包括GitBazaar