Subversion - 提交重新格式化的文件

时间:2012-10-23 16:14:53

标签: svn version-control versioning blame

我首先要说完全有可能这个不可能 - 如果不是,那就没事了(好吧,它很糟糕,但我会活下去)。我知道可能还有一些"那么,无论如何,这将如何运作?"墙壁在做我想做的事,但是嘿。

我想要做的是重新格式化Subversion存储库中的大量文件而不更改任何所有权数据,无论是转向:

username   | commit number
------------------------------------------------
john_smith | 1 | <?php
john_smith | 1 | echo 'Hello world';
joe_bloggs | 2 | if (isset($user)) {
john_doe   | 3 |   echo ', and hello ' . $user;
joe_bloggs | 2 | }

到此(新行无主):

username   | commit number
------------------------------------------------
john_smith | 1 | <?php
           |   |
john_smith | 1 | echo 'Hello world';
joe_bloggs | 2 | if (isset($user))
           |   | {
john_doe   | 3 |   echo ', and hello ' . $user;
joe_bloggs | 2 | }

或者这个(我所拥有的新行,但更改的行不是):

username   | commit number
------------------------------------------------
john_smith | 1 | <?php
mr_man     | 4 |
john_smith | 1 | echo 'Hello world';
joe_bloggs | 2 | if (isset($user))
mr_man     | 4 | {
john_doe   | 3 |   echo ', and hello ' . $user;
joe_bloggs | 2 | }

或任何其他排列。

我想要这样做,因为存储库中存在大量格式错误的代码,并且我希望在不占用(几乎)整个事物的情况下清理它因为能够将Blame击中文件的一侧并查看每行的最后更改以及这些更改的原因,这样很方便。重新格式化提交消息和所有权将删除存储库的大块,并强制我们在日志中查找实际人员,然后区分它只是为了确保。

如果有人能想出一种替代方法来重新格式化代码而不会破坏责任,我也会对此提出建议。

1 个答案:

答案 0 :(得分:2)

你能做到吗?不会。文件中的任何更改都会创建另一个修订因此,您将在每个行的svn blame中获得一个新的修订号。毕竟,即使是无害的改变也可能导致问题。如果重新格式化操作更改了破坏应用程序的数据,该怎么办?仔细格式化该数据的开发人员不希望发现自己受到指责。这就是为什么即使格式化更改也会改变修订版。

如果需要,您可以执行以下操作:修订的所有者是svn:author的修订属性。如果更改了该修订属性,则可以更改执行提交的用户的名称。

有点限制:

  • 每个提交只有一个作者,所以你必须安排你的提交来完成特定作者的所有文件。
  • 默认情况下,Subversion不允许您更改修订版属性。您必须创建一个预修订更改挂钩,以允许您更改该属性。
  • 所有行都会在blame中显示为该作者,所显示的修订将是您进行更改时的修订版。

我的建议:不要这样做。如果没有经过全面测试,你可能会破坏某些东西。我建议使用Jenkins之类的东西。我意识到PHP文件不需要像Java或C代码一样编译,但你可以对文件运行语法检查并在Jenkins中显示结果。

您可以将phpcheckstyle应用程序与Jenkins Checkstyle插件一起使用。然后使用cigame插件挑战开发人员修复代码本身的格式。

修复后的每个checkstyle违规行为都会给开发人员提供cigame插件中的积分。这将鼓励开发人员自己修复格式问题。如果您不是开发人员,则不应触及代码。否则,Finger o'Blame可能会指向为您创建错误代码的开发人员,因为您更改了它 - 即使它只是格式化。