从 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 &lt;path&gt;,并帮助读者找到一个完整的答案

【讨论】:

未删除版本的文件。也可以在这里查看: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 更新时是不是可以始终(强制)覆盖本地更改?忽略冲突?的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse SVN中“覆盖/更新”和“回复”有啥区别?

svn,在更新时,如何实现覆盖原有的文件,而不是在文件中多了几道杠,和很多重复代码

SVN 我刚刚用SVN覆盖更新了我本地的代码,悲催的是,我有一些新写的代码忘记提交了,直接被覆盖了!!!!

SVN更新代码的时候会覆盖本地文件吗?

svn命令行用于覆盖和更新本地目录

svnupdate会把代码直接覆盖吗