5

我已经把自己描绘成一个使用 CodePlex 的 Subversion 项目的问题——为此我在这里寻求帮助。我有一个本地存储库,CodePlex 有它的项目的 Internet 存储库,两者不混合 :-(。

但是我亲爱的已故父亲曾经告诉我,聪明人和智者之间的区别在于,智者不会进入陷阱,而聪明人会找到出路。换句话说:我一定是做错了什么。所以:

假设您是由几个开发人员组成的小组。Internet 上有一个您要开始修改的 Subversion 控制项目。您想在本地处理它,并根据您的需要对其进行更改。您需要本地版本控制。您想要控制哪些 Internet 更改要接受到您的存储库 - 那些相关且重要且不会引起干扰的更改。您想向 Internet 提交您的一些本地更改——您确信这些更改是稳定的,并且与整个社区相关。

这种操作方法对我来说似乎是常识,但是我从未从事过开源项目。所以: 1. 这确实是一种常见的操作方法吗? 2. 你如何使用 Subversion 来做这件事而不会遇到麻烦?

4

6 回答 6

1

Subversion 本质上是一个集中的版本控制系统。根据您的描述,听起来您想要一个分布式修订控制系统。在这样的系统中,人们可以在本地开发,然后在彼此之间交换他们的工作单元(称为变更集)。分布式修订控制系统对合并分支有很好的支持来支持这一点。

我自己正在使用Mercurial,并且会向 Subversion 用户推荐它,因为它的许多命令类似于 Subversion 中的命令。此类别中的其他流行工具包括GitBazaar

于 2009-06-25T21:03:58.430 回答
1

SVN 书籍的Vendor Branches部分介绍了将来自外部源(“供应商删除”)的更改吸收到您自己的本地存储库中。

或者,您可以使用 merge 命令从存储库 A 中的文件夹中挑选修订,并将这些更改应用到存储库 B 中文件夹的工作副本。合并命令似乎对此有一些支持(至少在最新版本),所以它可能很像本地分支之间的合并(减去自动合并跟踪)。

于 2009-06-26T08:53:17.157 回答
0

假设您是由几个开发人员组成的小组。Internet 上有一个您要开始修改的 Subversion 控制项目。您想在本地处理它,并根据您的需要对其进行更改。您需要本地版本控制。您想要控制哪些 Internet 更改要接受到您的存储库 - 那些相关且重要且不会引起干扰的更改。

您希望能够在本地工作,并且不假思索地进行分支或合并。您基本上是在谈论分布式版本控制。Subversion 不支持这个。您应该改用MercurialGit之类的东西。

于 2009-06-25T21:01:16.050 回答
0

听起来您应该考虑在原始存储库中为您的代码创建一个分支。您可以根据需要从主干合并回您的分支,或者反过来。

您的另一个选择是从存储库中导出文件并添加到您自己的存储库中。但这只会是未来的痛苦。

于 2009-06-25T21:03:12.207 回答
0

这对于分布式源代码控制系统(例如 git)要容易得多。

然后您可以拥有一个本地 git 存储库,使用 git-svn 从公共存储库获取更新,并通过您的特殊调整拥有自己的本地分支。

你会在 github 上看到很多这样的项目(使用 git 扩展 subversion-ed OSS 项目)——用于 NHibernate、Castle 项目等。

如果您必须坚持使用 SVN,您可以使用公共中继上的一组补丁文件来管理您自己的更改。如果您想从主干中获得更新的东西,请使用您的更改创建一个补丁,还原,更新到较新的主干,然后有选择地应用您的补丁。

于 2009-06-25T21:03:12.473 回答
0

我通常会保留一份我从 SVN 下载的副本,其中仅包含来自存储库的更新代码以及我正在处理并计划提交回来的代码。

在开发新功能时,我会将整个副本导出到我机器上的新副本,然后进行 + 测试所需的更改。如果我决定要提交更改,我会使用某种合并工具(如果您在 Windows 上, WinMerge很好),将我的更改合并回我删除的原始 SVN 更新文件夹中。

这使一切都相当整洁,因为我能够相对轻松地避免无意中提交代码。只需制作我的“基本”SVN 更新文件夹的新副本,我也可以轻松地废弃更改。不利的一面是,它使我不打算立即提交的多个功能的工作相对笨拙。

于 2009-06-25T21:03:30.710 回答