我怎样才能强制颠覆提交一个不变的文件?

我想颠覆提交一个文件,即使它没有改变。 有没有办法做到这一点?

如果你想让文件内容保持不变(这意味着你不能像johnstok所build议的那样仅仅改变空格),你总是可以改变文件的某个属性。

例如。

 svn propset dummyproperty 1 yourfile
 svn提交你的文件

这将执行提交而不必更改文件。

只要确保你不使用特殊的svn:属性之一。 其他任何事情都可以。


编辑:一些其他的海报已经问为什么有人会想这样做 – 大概是谁已经打下了这个答案的人也有同样的担忧。

我不能说原始的海报,但是我曾经看到过的一个场景是尝试自动同步Visual Sourcesafe存储库中的活动与Subversion存储库。

至于为什么想要做强迫承诺。 我曾见过有人使用错误或不清楚的提交信息的情况。 如果你可以执行一个强制的提交,那你可以纠正这个错误。 这样更新的提交消息进入存储库,所以它不会迷路。

我frigged删除然后重新添加有问题的文件。 不是最好的方法,它可能打破了修订历史,但它适合我的目的。

想要做到这一点的原因:文件是从同一个来源(具有不同的#defines设置)构build的两个可执行文件之一。 来源的小变化意味着一个变了,一个没变。 我想在修订历史logging中logging我实际更新到最新版本(即使没有变化)。

也许Morten HoldflodMøller指出,“该文件仍然是新版本的一部分”将涵盖这一迹象,但我认为没有更改的文件的日志没有显示该修订的评论。

如果是文本文件,只需添加一些空格,如换行。

回答一些质疑这个问题的人应该是可能的:出于某种原因,svn不能识别doc文件之间的差异,所以我想强制提交!

我现在将文档从静态目录转移到svn。 文件就像UG_v1.2,UG_v1.3等。所以只是为了保持历史,我拿1.2,从文件名中删除版本,并添加并提交到SVN。 然后,我从第二个版本中取出版本,复制第一个版本,并且要提交它,并且要更新版本。 文件大小和创builddate的变化(不提及文件内的内容),但svn声称它是完全相同的文件,不允许我提交。 当我手动更改文档时,svn看到不同。 哎呀? :>

我不认为这是可能的,但首先为什么你需要这样做? 如果文件保持不变,则不应该提交。

如果你真的想把这个文件与提交中的其他文件分组,你可以改变一些小内容(例如添加一个空格)。

有人想要提交不变的文件的原因是误解如何恢复到以前的文件版本。

例如,可以将版本680中的文件index.html更新为过去的版本,例如650

svn update index.html -r 650

但是这并不能解决问题,因为:

 svn status -u index.html
         * 650 index.html
反对修改的状态:680

SVN清楚地说,index.html是远程修改的 ,你不能提交它,即它“认为”,index.html是旧的,应该更新到一个较新的版本。 所以下一个svn update会将index.html带回680版本。

要真正恢复一个文件,你应该以相反的顺序合并它:

svn merge -r 680:650 index.html

然后提交svn ci -m "Reverted to r650" index.html

实际上,我遇到了一个强制实施的理由。 这可能不是最好的做法,但是我们把Truecrypt( http://www.truecrypt.org/ )卷放在SVN中,因为我们需要对某些shell脚本保持严格的安全性,因为它包含敏感信息。 当创build一个Truecrypt卷时,无论您如何使用它,二进制数据都保持不变。 所以实际上,我可以改变音量的内容,但音量永远不会出现变化。

改变属性不会强制提交。

TortoiseSVN 1.4.5,Build 10425 – 32位,2007/08/26 11:14:13

我有一个trueCrypt卷相同的问题。

我添加了一个新的属性(如上面build议的)“forceCommit1”,他们可以提交卷文件。 但只有财产承诺不是文件的内容。

我删除了该文件,并再次将其添加到svn

我以为你可以从命令行上做到这一点?

 svn ci -force <filename> 

我在这里没有存储库来检查,所以我可能是错的。