更新 SVN 时,是否有可能始终(强制)覆盖本地更改?忽略冲突?

69

我知道应该在自己的分支上工作,但几个人都在同一个项目的一条分支上。其中一个开发者进行了提交,我只想使用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
  (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 - halfdan
重点是我不需要我的更改,想要获取该文件的最新版本并覆盖我的更改。 - Phill Pafford
为什么不通过更新来删除文件并获取最新版本呢? :) - Select0r
这是一种方法,但如果我有几百个文件,而且我不想删除项目或文件,那么有没有办法可以使用 'svn update' 获取最新版本? - Phill Pafford
5个回答

89
如果你真的想要一个HEAD副本(repos中最新的修订版本),那么你应该:
svn revert -R <path> // discard all your changes inside path (recursive)
svn update           // get latest revision of all files (recursive)

就是这样。

请注意,您将失去自上次“提交”以来所做的所有更改。

编辑:为了完整性和帮助读者找到一个完整的答案,添加了来自Isu_guy答案-R <path>


1
非版本化文件不会被删除。此外请参阅此处:是否有Subversion命令来重置工作副本? - Mariano Paniga

31

我会这样做:

svn up --accept tf
svn up --accept theirs-full

话虽如此,“svn revert -R”然后在工作副本的根目录下运行“svn up”也可以达到相同的效果。在我的情况下,我有几个不同项目的工作副本,因此我会运行一个shell脚本,在启动计算机时更新它们所有的副本。我不使用"accept",而是使用“--accept p”来推迟解决冲突,因为这是自动化的过程,然后我会合并任何SVN无法自动合并的冲突(通常需要还原,但具体情况取决于情况)。


可能是 SVN 客户端/版本特定的问题。我在 Win7 上运行当前版本的 TortoiseSVN,但这个命令也适用于我们在 CentOS 服务器上拥有的 SVN 服务器。 - Carnix

28
tato的回答是完全正确的,请注意他的警告。您将丢失所有更改。对于语法和一些细微差别的澄清:svn revert默认情况下是非递归的,需要一个路径才能工作。要使其递归,请添加“-R”。如果您在当前目录中,请使用“./”作为下面的“路径”,或者使用绝对路径,如“/path_to_your_folder”。
svn revert -R <path>

svn update是递归的。如果你在目录中,根本不需要路径。

svn update

17

如果使用由CentOS 6.4提供的svn 1.6.11版本,则Carnix的命令应如下所示:

svn up --accept theirs-full

(由于我声望不够,无法添加评论)


2

回答你的第一个问题。不可以。但是你可以通过在项目根目录下运行以下命令来覆盖本地文件:

svn revert -R .
svn update

这在我使用的 Mac 上,svn 版本是 1.7.19,在 Ubuntu 上,svn 版本是 1.8.8,都可以正常工作。


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