2011-03-01 99 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
  • 拥有自己独立的从上游主线自己的服务器上
  • 整合上的变化到你的代码,使用通常的合并
相关问题