在SVN中提交而不让其他人结账 - 这可能吗?

时间:2011-01-09 07:08:21

标签: svn tortoisesvn ankhsvn

我使用SVN作为我的ANKH和TortoiseSVN的源代码控制。我正在为一个项目写一个巨大的变化,并且需要几天时间来进行更改,但与此同时我仍然想要暂时提交备份。 但如果我承诺其他团队成员将更新我未完成的工作。

有没有办法可以“提交备份”而不更改修订版(因此其他版本不会随我的更改而更新)?

谢谢!

5 个答案:

答案 0 :(得分:5)

这听起来像是使用 feature branches 的经典案例。这使您的工作分开,但允许继续Subversion的所有其他好处。

答案 1 :(得分:3)

详细说明iconik's评论:

SVN的一大特色是branch解决方案的能力。当您创建branch时,您实际上是通过从主干复制现有代码来创建新的存储库。

在该分支上工作时,您可以对代码执行任何操作,它不会影响主干。当您完成所有更改后,您可以merge将分支重新放回主干。

然而,其他人可能会在你所在的同一个分支上(虽然很少见),但你可以不要求他们,他们不应该有问题。

通过阅读 SVN book

可以找到更多详细信息

答案 2 :(得分:1)

以上评论是合理的答案。您可以为您的更改创建一个单独的分支,人们知道这些分支不正确(可能甚至不构建),然后将分支合并在一起。请注意,这可能是一个痛苦的过程。

真的,Subversion没有很好地服务于这种事情。分布式版本控制系统(如git,mercurial和bazaar)的一大优势是,它们允许您进行本地提交以进行备份,而无需立即将其发送到主存储库。因此,一种选择是通过在本地安装DVCS客户端来对其进行双重管理,并使用它来进行本地提交以进行备份。大多数DVCS客户端在没有设置中央服务器的情况下工作正常,因此您可以使用它而不会导致与Subversion服务器冲突。对于希望获得分布式版本控制优势但在使用集中版本控制的公司工作的开发人员而言,这实际上是一种非常普遍的做法。

答案 3 :(得分:1)

将分支“锁定”一段时间非常有用,这样其他人就无法进行提交。对于例如在为软件版本构建软件时,您希望拥有已知版本等。 Subversion提供了“钩子”机制。

http://svnbook.red-bean.com/en/1.1/ch05s02.html

您可以编写“post”或“pre”提交挂钩,并启用/禁用提交以及其他各种任务。

答案 4 :(得分:0)

是的,使用分支(使用 svn copy )。他遗漏的部分是使用一个 svn merge 命令,您可以对分支进行所有更改,并将其应用到主干(假设所有合并都可以完成而不会发生冲突)。我用这种方式将SVN用于网页内容。我有一个开发分支(svn副本)我做了所有的网络工作,当我们准备上线时,我会做一个svn合并到trunk(live)然后将trunk部署到服务器。

使用像Mercurial这样的分布式存储库系统(虽然它是一个很好的产品)这样做有一个很大的优势,那就是你的分支在服务器上,它有更可靠的硬盘和更频繁的备份。如果您提交到本地Mercurial存储库并且您的桌面计算机死机,则您的工作将丢失。这也意味着如果您确实希望与选定的一组人员进行协作(希望您在将代码推送到主干之前有一些QA参与!!!),您可以通过将它们指向您的分支来实现。