繁体   English   中英

如何将项目的分支转换为本地SVN存储库?

[英]How to make a fork of an project into a local SVN repository?

  • 我想在本地SVN存储库中获得一个开源项目的副本。
  • 我想将更改提交到我的存储库,但不是提交给开源项目的中央存储库。
  • 我想看看来自开源项目存储库的更新并查看它们。
  • 如果我喜欢这些更改,我想将它们放入我的本地存储库。

  • 我可以采取哪些方式来满足这些要求?

  • 哪种方式最好,为什么?

开源项目的SVN历史是否可以通过这些方式保存在我的存储库中?

提前致谢。

看看这个StackOverflow主题并回答: 正确的工作流来管理私有的Subversion fork。 我和你的问题非常相似,我将继续使用git-svn [在接受的答案中得到的桥梁]。 另请参阅Git和其他系统 - Git和Subversion

主要方法优势:这种方式您可以始终使用SVN作为“后端”,最终存储库。

我希望这有帮助。 爱与和平,

正如gbjbaanb所建议的那样,你必须使用Vendor Branches并保持纯粹的Subversion

您可以(必须)在书籍工作流程中添加一个小细节:

  • 如果上游项目也由Subversion处理
  • 如果您可以从您自己的服务器的位置访问项目的存储库

您可以将上游仓库(/ trunk ???)的一部分链接到您的仓库的供应商分支(使用svn:externals)。 这样你就可以

  • 监控上游活动( svn upsvn log
  • 在自己的服务器上拥有独立的上游主线
  • 使用常规合并将上游更改集成到您的代码中

我认为只有SVN才能实现这一目标。 你想要的是某种分散版本控制系统,比如Git或Mercurial。

我不知道你是否已经和其中一个人合作过,但你可以用两者来达到你想要的效果。

这是我的想法的一些步骤(从Mercurial的角度来看,但这与Git完全相同):

  1. 初始化一个mercurial存储库(空目录中的hg init
  2. 签出svn存储库
  3. 将所有文件添加到mercurial存储库( hg addremove
  4. 将更改提交到mercurial存储库( hg commit -m "initial commit"
  5. 在其他地方克隆mercurial存储库( hg clone /path/to/myrepo .在空目录中)

您现在可以在这个mercurial克隆中工作并提交它。 但是,永远不要推动原始mercurial存储库中的更改非常重要。

要更新SVN存储库,请按照下列步骤操作:

  1. 在SVN checkout中: svn update
  2. 仍然在SVN checkount hg addremove; hg commit -m "svn update" hg addremove; hg commit -m "svn update"
  3. 在workind目录下(mercurial clone): hg pull; hg merge; hg commit -m "merging svn update" hg pull; hg merge; hg commit -m "merging svn update"

为此,工作目录必须是干净的,即必须提交所有更改。

基本上,我们正在做的是使用Mercurial作为SVN存储库的某种代理。 您可以提交到本地Mercurial克隆,而无需修改原始源并仍然从SVN更新,然后在本地Mercurial克隆中合并这些更改。

我不知道如何使用Git重现这些步骤,但我知道它也是可能的。 如果您了解其中一个,您甚至可以使用任何其他dvcs。

我完全同意这个解决方案有点复杂,但我从来没有找到一种更简单的方法来实现这一点。 我这样工作了9个月,以CVS存储库为源,从未遇到过问题。

但是,如果您从未听说过dvcs,git或mercurial,我强烈建议您阅读一些文档,因为这些步骤非常复杂,而且事情可能会很快出错。

希望这有帮助。

编辑:

您也可以使用SVN外部 ,但您将无法查看并选择要在存储库中导入的修改

您必须在目录上设置svn:externals属性:

svn propedit externals adirectory

这将打开一个编辑器,让您编辑adirectory目录的外部。 在这里,您为每个外部存储库添加一行,以便在此目录中签出(对于每一行):

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

下次您将进行更新时,将在给定目录中检查svn存储库,其中包含完整历史记录。

(自从我使用svn:externals以来,很长一段时间,也许有些解释是错误的,但它可能足以让人眼前一亮)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM