- 我想在本地SVN存儲庫中擁有一個開源項目的副本。
- 我想將更改提交到我的存儲庫,但不提交到開源項目的中央存儲庫。
- 我想查看來自開源項目資源庫的更新並查看它們。
如果我喜歡這些更改,我想將它們放到我的本地存儲庫中。如何將項目分叉到本地SVN存儲庫?
我可以去哪些方法來滿足這些要求?
- 哪種方式最好,爲什麼?
開放源代碼項目的SVN歷史記錄可以保存在我的倉庫裏嗎?
在此先感謝。
如果我喜歡這些更改,我想將它們放到我的本地存儲庫中。如何將項目分叉到本地SVN存儲庫?
我可以去哪些方法來滿足這些要求?
開放源代碼項目的SVN歷史記錄可以保存在我的倉庫裏嗎?
在此先感謝。
我不認爲有一種方法只能用SVN實現。你想要的是某種分散的版本控制系統,比如Git或Mercurial。
我不知道你是否已經和其中一個人一起工作,但是你可以用兩者來實現你想要的。
這裏的一些步驟,我的想法(從一個水銀點,但這將是非常相同的使用Git):
hg init
在空目錄)hg addremove
)hg commit -m "initial commit"
)hg clone /path/to/myrepo .
)的Mercurial庫別的地方現在,您可以在這個善變的克隆工作,並在其提交。然而,永遠不要在原始的mercurial倉庫中推送更改非常重要。
對於更新SVN倉庫,請按照下列步驟操作:
svn update
hg addremove; hg commit -m "svn update"
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很長一段時間:外部組件,也許有一些解釋是錯誤的,但它可能會足以讓大圖)
看一看這個StackOverflow的主題和答案: Correct workflow for managing a private Subversion fork.我有一個非常類似的問題,我將繼續使用git-svn [在已接受的答案中提到的橋樑]。另請參閱Git and Other Systems - Git and Subversion
主要方法優點:這樣,您總是可以使用SVN作爲最終存儲庫的「後端」。
我希望這會有所幫助。愛與和平,
由於這是suggested通過gbjbaanb,你必須使用Vendor Branches並保持其純淨的Subversion
你可以(必須)添加到書籍的工作流程描述的一個小細節:
你可以將上游repo(/ trunk ???)的一部分鏈接到你的repo的供應商分支(使用svn:externals)。這樣,您就可以
svn up
,svn log
)
嗨,你正在尋求的是在官方回購中創建分支和與外部來源合作的一半。非常困難。分支使來自幹線的更新變得容易,但需要對回購進行寫入訪問。使用外部緩解幹線更新,但使您的承諾更難。將回購商品導入本地商品會打破與官方回購商品的所有鏈接,但爲您的補貨提供更多自由。 – vaugham 2011-03-01 09:52:34