SVN同步与更新到Head的区别(Subclipse)

22

我对Subversion和Subclipse都比较新手,看到一些问题导致我认为更新到head和同步之间存在差异。具体来说,当我尝试还原(使用subclipse历史记录)时,经常会出现“无法从路径自身的未来历史记录中反向合并范围,请先尝试更新”的消息。我的同步应该确保我在REPO上拥有分支中所有文件的“head”版本,但是进行“更新到head”可以解决这个问题...那么它到底是怎么回事呢?我尝试检查SVN控制台以查看发生了什么变化,但输出信息并不是很详细。

有什么想法吗?

我有第二个问题,但我假设第一个问题的答案将阐明它。如果您好奇并有时间阅读,我也会把它打出来。以下是情景:我从“Production”标签中分支了所有文件,并开始处理我的项目。经过几次提交后,我检查了一个已更改文件的历史记录,并注意到“加粗”的版本(根据文档,这应该是head)在我所有提交记录的下面。就像我所拥有的不是head一样。但head只是项目的最新版本,对吧?所以我错过了什么。

感谢您的回复并花时间阅读这篇文章!

2个回答

28

使用“同步视图”时,只会更新视图中的项目。而在Subversion中,文件夹也有一个版本号,在每次修改任何子项时都会增加。但由于这些文件夹不在视图中显示,因此它们永远不会被更新。当您对项目执行“团队>更新”操作时,所有文件夹和文件都将更新到一个统一的版本。以下是几篇解释这一概念的博客文章:

第一篇博客解释了混合版本工作副本的核心 SVN 概念,对理解这个问题非常重要:

http://markphip.blogspot.com/2006/12/mixed-revision-working-copies.html

第二篇介绍了 Subclipse 中处理这个问题的功能:

http://markphip.blogspot.com/2006/12/subclipse-synchronize-feature-show-out.html

自从写下第二篇博客以来,大多数 Subclipse 用户发现他们并不喜欢这个功能,即使它有助于解决这个问题。因此,在当前版本中,默认情况下已将其关闭。我认为没有人再使用它了。

最重要的是,偶尔使用“团队>更新”命令对项目进行更新,以使其全部更新到一个统一的版本。

马克


谢谢@Mark!这篇文章和你链接的博客帖子确实帮助我澄清了一些关于SVN和Subclipse的事情。 - David Citron

2
我认为你关于同步和更新到HEAD是一样的假设是错误的。如果按照Subclipse的说法,“同步”意味着“提交”,那么它肯定是错误的,因为提交并不会更新你的工作副本。你必须在提交后显式地更新才能到达HEAD。
这就带来了你的第二个问题:我认为加粗的行之所以在其他提交下面,是因为上述原因——提交不会更新。这意味着你可以提交对文件的更改,然后查看另一个文件,发现它比HEAD旧,因为那些其他文件还没有被带到HEAD。
这篇文章可能有助于澄清混合修订的概念:http://markphip.blogspot.com/2006/12/mixed-revision-working-copies.html 我也鼓励你熟悉SVN文档,因为当你了解底层的SVN系统如何工作时,使用Subversion的插件和扩展总是变得更容易。

嗨,Mike, 我看了那篇文章,但我不确定它是否适用。虽然提交不会更新您的工作副本,但同步应该可以。我不仅看到了出站更改,还有入站更改。这不就相当于更新吗? - gergesi
1
啊,答案在那篇文章里,但是在文件夹的部分!当我提交一个文件时,它的父文件夹不会随着我的修订而移动。它知道修订(存在于历史记录中),但不会向上移动。同步会忽略这个问题,但更新到HEAD可以解决它。 - gergesi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接