- 我想在本地 SVN 存储库中拥有一个开源项目的副本。
- 我想将更改提交到我的存储库,而不是开源项目的中央存储库。
- 我想查看来自开源项目存储库的更新并查看它们。
如果我喜欢这些更改,我想将它们放入我的本地存储库中。
我可以采取哪些方式来满足这些要求?
- 哪种方式最好,为什么?
开源项目的 SVN 历史是否会通过这些方式在我的存储库中保持可用?
提前致谢。
如果我喜欢这些更改,我想将它们放入我的本地存储库中。
我可以采取哪些方式来满足这些要求?
开源项目的 SVN 历史是否会通过这些方式在我的存储库中保持可用?
提前致谢。
看看这个 StackOverflow 主题并回答:正确的工作流程来管理一个私有的 Subversion 分支。我有一个与你非常相似的问题,我将继续使用git-svn [在接受的答案中提到的桥]。另请参阅Git 和其他系统 - Git 和 Subversion
主要方法优势:这样您就可以始终使用 SVN 作为“后端”,最终存储库。
我希望这有帮助。爱与和平,
我认为只有使用 SVN 才能实现这一目标。你想要的是某种去中心化的版本控制系统,比如 Git 或 Mercurial。
我不知道您是否已经与其中之一合作过,但是您可以通过两者来实现您想要的。
这是我的想法的一些步骤(从 Mercurial 的角度来看,但这与 Git 完全相同):
hg init
在一个空目录中)hg addremove
)hg commit -m "initial commit"
)hg clone /path/to/myrepo .
在空目录中)您现在可以在这个反复无常的克隆中工作并在其中提交。但是,永远不要将更改推送到原始 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 重现这些步骤,但我知道这也是可能的。如果您知道其中之一,您甚至可以使用任何其他 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 以来已经很长时间了,也许有些解释是错误的,但它可能足以了解全局)