从 SVN 更新时是不是可以始终(强制)覆盖本地更改?忽略冲突?
Posted
技术标签:
【中文标题】从 SVN 更新时是不是可以始终(强制)覆盖本地更改?忽略冲突?【英文标题】:Is it possible to always (force) overwrite local changes when updating from SVN? Ignore conflicts?从 SVN 更新时是否可以始终(强制)覆盖本地更改?忽略冲突? 【发布时间】:2011-04-12 04:08:33 【问题描述】:我知道我应该在自己的分支上工作,但我们中的几个人在一个项目的同一个分支上。其中一个开发人员提交了一份文件,我只是想用来自 SVN 的最新版本更新我的本地副本。运行 'svn update' 我得到这个输出:
Restored 'index.html'
U somescript.php
Conflict discovered in file.xml'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options:
是否有选项/方法可以覆盖我的本地更改并从 subversion 获取最新文件并忽略所有冲突?
我查看了 Stack 上的其他一些帖子,但他们都没有回答这个问题。他们说要删除项目并再次结帐,我想这是否是最好的方法,就这样吧……但是想了解有关为什么我不能强制更新的更多详细信息。 谢谢
编辑:
所以我选择了 s '显示所有选项':
(s) 显示所有选项:s
(e) edit - change merged file in an editor
(df) diff-full - show all changes made to merged file
(r) resolved - accept merged version of file
(dc) display-conflict - show all conflicts (ignoring merged version)
(mc) mine-conflict - accept my version for all conflicts (same)
(tc) theirs-conflict - accept their version for all conflicts (same)
(mf) mine-full - accept my version of entire file (even non-conflicts)
(tf) theirs-full - accept their version of entire file (same)
(p) postpone - mark the conflict to be resolved later
(l) launch - launch external tool to resolve conflict
(s) show all - show this list
我想我应该选择“tc”选项?
【问题讨论】:
您为什么要这样做?进行合并,您不会丢失您的更改。否则执行svn revert
然后svn up
。
重点是我不需要我的更改,我想获取该文件的最新版本并覆盖我的更改
你为什么不删除文件并通过更新获得最新版本? :)
这是一种方法,但是如果我有几百个文件并且我不想删除项目或删除文件怎么办,有没有办法我可以'svn update ' 获取最新版本?
【参考方案1】:
我会这样做:
svn up --accept tf
或
svn up --accept theirs-full
也就是说,“svn revert -R”然后在工作副本的根目录下“svn up”也可以解决问题。就我而言,我有几个用于各种项目的 WC,所以我运行一个 shell 脚本,在我启动计算机时更新所有这些 WC。我不使用接受,而是使用“--accept p”来推迟解决,因为它是一个自动化过程,然后我合并任何 SVN 无法自行合并的冲突(通常,这涉及还原,但这取决于)。
【讨论】:
奇怪 - 可能是特定于 SVN 客户端/版本的。我在 Win7 上运行当前版本的 TortoiseSVN,但是这个命令也适用于我们在 CentOS 服务器上的 SVN 服务器。【参考方案2】:tato的回答绝对正确,请注意他的谨慎。您将丢失所有更改。只是对语法和一些细微差别的澄清
svn revert 默认情况下是非递归的,需要一个工作路径。制作是递归添加“-R”。如果您在当前目录中,请使用“./”作为下面的“路径”或使用绝对路径,如“/path_to_your_folder”
svn revert -R <path>
svn 更新是递归的。如果您在目录中,则根本不需要路径
svn update
【讨论】:
【参考方案3】:如果你真的想要一份 HEAD(repos 中的最新版本),那么你应该
svn revert -R <path> // discard all your changes inside path (recursive)
svn update // get latest revision of all files (recursive)
就是这样。
请注意,您将丢失自上次“提交”以来的所有更改。
编辑:为了完整起见,从Isu_guy answer 中添加了-R <path>
,并帮助读者找到一个完整的答案
【讨论】:
未删除版本的文件。也可以在这里查看:Is there a Subversion command to reset the working copy?【参考方案4】:回答您的第一个问题。 没有。但是您可以通过从项目的根目录运行以下命令来覆盖本地文件:
svn revert -R .
svn update
这在我的 svn 1.7.19 的 mac 和 svn 1.8.8 的 ubuntu 上工作
【讨论】:
【参考方案5】:使用 svn 1.6.11(由 CentOS 6.4 提供)Carnix 的命令应该如下所示
svn up --accept theirs-full
(我没有足够的声誉,无法添加评论)
【讨论】:
以上是关于从 SVN 更新时是不是可以始终(强制)覆盖本地更改?忽略冲突?的主要内容,如果未能解决你的问题,请参考以下文章
svn,在更新时,如何实现覆盖原有的文件,而不是在文件中多了几道杠,和很多重复代码