2011-03-01 101 views
2
  • 我想在本地SVN存儲庫中擁有一個開源項目的副本。
  • 我想將更改提交到我的存儲庫,但不提交到開源項目的中央存儲庫。
  • 我想查看來自開源項目資源庫的更新並查看它們。
  • 如果我喜歡這些更改,我想將它們放到我的本地存儲庫中。如何將項目分叉到本地SVN存儲庫?

  • 我可以去哪些方法來滿足這些要求?

  • 哪種方式最好,爲什麼?

開放源代碼項目的SVN歷史記錄可以保存在我的倉庫裏嗎?

在此先感謝。

+0

嗨,你正在尋求的是在官方回購中創建分支和與外部來源合作的一半。非常困難。分支使來自幹線的更新變得容易,但需要對回購進行寫入訪問。使用外部緩解幹線更新,但使您的承諾更難。將回購商品導入本地商品會打破與官方回購商品的所有鏈接,但爲您的補貨提供更多自由。 – vaugham 2011-03-01 09:52:34

回答

0

我不認爲有一種方法只能用SVN實現。你想要的是某種分散的版本控制系統,比如Git或Mercurial。

我不知道你是否已經和其中一個人一起工作,但是你可以用兩者來實現你想要的。

這裏的一些步驟,我的想法(從一個水銀點,但這將是非常相同的使用Git):

  1. 初始化一個Mercurial庫(hg init在空目錄)
  2. 結帳的SVN倉庫
  3. 所有文件添加到Mercurial庫(hg addremove
  4. 提交更改到Mercurial庫(hg commit -m "initial commit"
  5. 克隆(在空目錄hg clone /path/to/myrepo .)的Mercurial庫別的地方

現在,您可以在這個善變的克隆工作,並在其提交。然而,永遠不要在原始的mercurial倉庫中推送更改非常重要。

對於更新SVN倉庫,請按照下列步驟操作:

  1. 在SVN結帳:svn update
  2. 仍然在SVN checkount hg addremove; hg commit -m "svn update"
  3. 中workind目錄(水銀克隆):hg pull; hg merge; hg commit -m "merging svn update"

爲此,工作目錄必須是乾淨的,即所有更改必須已經提交。

基本上,我們正在做的是使用Mercurial作爲某種代理到SVN存儲庫。您可以提交到本地Mercurial克隆,而無需修改原始源代碼,並且仍然從SVN進行更新,然後將這些更改合併到本地Mercurial克隆中。

我不完全知道如何重現與Git這些步驟,但我知道這也是可能的。如果你知道其中一個,你甚至可以使用任何其他的dvcs。

我完全同意這個解決方案有點複雜,但我從來沒有找到一個更簡單的方法來實現這一點。我在CVS存儲庫作爲源代碼工作了9個月,從未遇到任何問題。但是,如果您從未聽說過dvcs,git或mercurial,我強烈建議您閱讀一些文檔,因爲這些步驟非常複雜,而且事情可能會很快出錯。

希望得到這個幫助。

編輯:

您還可以使用SVN externals,但您將無法查看並選擇您想要在你的倉庫導入修改。

您必須設置一個svn:上一個目錄的外部屬性:

svn propedit externals adirectory 

這將打開一個編輯器,讓您編輯的外部爲adirectory目錄。在這裏,你添加你的魔杖結帳這個目錄這樣在每一個外部存儲庫中的線(每條線):

path/where/tocheckout http://svn.example.com/repos/project 

下一次你會做更新時,svn庫將在給定的checkouted目錄,具有完整的歷史記錄。

(這是因爲我使用SVN很長一段時間:外部組件,也許有一些解釋是錯誤的,但它可能會足以讓大圖)

+0

感謝您的回答,但另一個版本控制系統不是一種選擇。也許我們會在將來去一個新的,但現在不會。有沒有辦法滿足這些要求的一部分? – FreakShow 2011-03-01 11:05:49

+0

你可以看看svn externals(http://svnbook.red-bean.com/en/1.5/svn.advanced.externals.html),但是你將無法查看和選擇你所包含的修改。我會盡快修改我的答案。 – krtek 2011-03-01 11:08:46

1

由於這是suggested通過gbjbaanb,你必須使用Vendor Branches並保持其純淨的Subversion

你可以(必須)添加到書籍的工作流程描述的一個小細節:

  • 如果上游項目也被顛覆
  • 處理如果你可以從你自己的服務器的位置,達到項目庫

你可以將上游repo(/ trunk ???)的一部分鏈接到你的repo的供應商分支(使用svn:externals)。這樣,您就可以

  • 顯示器上游活動(svn upsvn log
  • 擁有自己獨立的從上游主線自己的服務器上
  • 整合上的變化到你的代碼,使用通常的合併
相關問題