如何强制subversion提交未更改的文件?

时间:2008-10-15 20:04:20

标签: svn version-control commit

我希望subversion提交一个文件,即使它没有改变。有没有办法做到这一点?

11 个答案:

答案 0 :(得分:64)

如果您希望文件内容保持不变(这意味着您不能像johnstok建议的那样只更改空格),您可以随时更改文件中的一个属性。

例如

svn propset dummyproperty 1 yourfile
svn commit yourfile

这将执行提交而无需更改文件。

请确保您不使用其中一个特殊svn:属性。其他任何事都应该没问题。


编辑: 许多其他海报都在问为什么有人会这样做 - 大概是那些标记了这个答案的人也有同样的担忧。

我不能代表原始海报,但是我看到这种情况的一种情况是尝试自动将Visual Sourcesafe存储库上的活动与subversion存储库同步。

答案 1 :(得分:5)

至于回答为什么要做强制提交。我见过有人使用了错误或不清楚的提交消息的情况。如果您可以执行强制提交,那么您可以更正此错误。这样更新的提交消息就会进入存储库,因此不会丢失。

答案 2 :(得分:4)

我通过删除然后重新添加有问题的文件来摆弄这个。这不是最好的方式,它可能打破了修订历史,但它符合我的目的。

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

也许MortenHoldflodMøller指出“该文件仍将是新版本的一部分”将涵盖此指示,但我认为未更改文件的日志未显示该修订的评论。

答案 3 :(得分:2)

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

答案 4 :(得分:2)

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

我现在正在将文档从静态dirs转移到svn。文件类似于UG_v1.2,UG_v1.3等。 所以为了保留历史,我拿1.2,从文件名中删除版本并添加并提交给svn。 然后我从第二个获取ver,将其复制到第一个,并想要提交它和更新的版本。文件大小和创建日期发生了变化(没有提到文档中的内容),但是svn声称它完全是同一个文件并且不允许我提交。 当我手动更改文档时,svn会看到不同的文档。 哎?产品:>

答案 5 :(得分:0)

我认为这不可能,但首先为什么你需要这样做?如果文件未更改,则不应提交。

如果您真的希望该文件与提交中的其他文件组合在一起,您可以在内部更改一些内容(例如添加空格)。

答案 6 :(得分:0)

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

例如,您可以将修订版 680 中的文件index.html恢复为过去的版本,例如的 650

svn update index.html -r 650

但它没有解决问题,因为:

svn status -u index.html
        *      650   index.html
Status against revision:    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

答案 7 :(得分:-1)

实际上,我遇到过强行提交的理由。这可能不是最佳实践,但我们在SVN中放置了Truecrypt(http://www.truecrypt.org/)卷,因为我们需要在某些shell脚本上保持严密的安全性,因为它包含敏感信息。创建Truecrypt卷时,无论您使用它做什么,它的二进制数据都保持不变。所以实际上,我可以更改音量的内容,但音量永远不会改变。

答案 8 :(得分:-1)

更改属性不会强制提交。

TortoiseSVN 1.4.5,Build 10425 - 32 Bit,2007/08/26 11:14:13

答案 9 :(得分:-1)

我对trueCrypt卷有同样的问题。

我添加了一个新属性(如上所述)“forceCommit1”,我可以提交卷文件。但只提交了属性而不是文件的内容。

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

答案 10 :(得分:-2)

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

svn ci -force <filename>

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