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

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

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

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

提前致谢。

4

3 回答 3

2

正如 gbjbaanb 所建议的那样,您必须使用供应商分支并保持纯粹的 Subversion

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

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

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

  • 监控上游活动 ( svn up, svn log)
  • 在自己的服务器上拥有自己的独立于上游主线
  • 使用通常的合并将上游更改集成到您的代码中
于 2013-07-10T16:49:10.360 回答
1

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

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

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

于 2013-07-10T16:17:00.267 回答
0

我认为只有使用 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 存储库中,这一点非常重要。

要更新 SVN 存储库,请执行以下步骤:

  1. 在 SVN 结帐:svn update
  2. 还在SVN结账hg addremove; hg commit -m "svn update"
  3. 在工作目录(mercurial clone)中:hg pull; hg merge; hg commit -m "merging svn update"

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

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

我不完全知道如何使用 Git 重现这些步骤,但我知道这也是可能的。如果您知道其中之一,您甚至可以使用任何其他 dvc。

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

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

希望这有帮助。

编辑:

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

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

svn propedit externals adirectory

这将打开一个编辑器,让您编辑目录的外部adirectory文件。在这里,您为要在此目录中检出的每个外部存储库添加一行,如下所示(对于每一行):

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

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

(自从我使用 svn:externals 以来已经很长时间了,也许有些解释是错误的,但它可能足以了解全局)

于 2011-03-01T10:04:07.580 回答