【问题标题】:Can I go back and edit comments on an SVN checkin?我可以返回并编辑 SVN 签入的评论吗?
【发布时间】:2010-10-16 02:59:08
【问题描述】:

我在 SVN 的评论中输入了一个错误。签入后可以修改吗?

【问题讨论】:

    标签: svn tortoisesvn


    【解决方案1】:
    svn propset svn:log --revprop -r <REVISION> "My corrected log message" <PATH-TO-REPOSITORY> 
    

    【讨论】:

      【解决方案2】:

      提交消息为"unversioned properties",例如可以使用svn propset 命令更改

      $ svn propset --revprop -r 25 svn:log "Journaled about trip to New York."
      property 'svn:log' set on repository revision '25'
      

      这是在修订版 25 上设置名为“svn:log”的修订版属性

      配置 subversion 以允许修订属性更改

      因为这些是未版本化的,所以默认安装的 subversion 不允许您修改这些属性,除非您提供 pre-revprop-change 挂钩脚本。

      这是一个典型的脚本,来自我系统上的 /var/lib/svn/hooks/pre-revprop-change:

      #!/bin/sh
      
      REPOS="$1"
      REV="$2"
      USER="$3"
      PROPNAME="$4"
      ACTION="$5"
      
      if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then 
        echo "$1 $2 $3 $4 $5" >> /var/lib/svn/logchanges.log
        exit 0; 
      fi
      
      echo "Changing revision properties other than svn:log is prohibited" >&2
      exit 1
      

      这会记录对 svn:log 修订属性的更改,并允许使用出口 0 进行编辑,使用出口 1 会拒绝任何其他修订属性更改。请参阅 patmortech 的 Windows 等效答案。

      【讨论】:

        【解决方案3】:

        要启用修订属性修改,您需要创建一个 pre-revprop-change 挂钩脚本。可以在这里阅读:http://svnbook.red-bean.com/en/1.0/ch05s02.html(查找 Hook Scripts 部分)。

        对于 Windows,这是一个示例批处理文件的链接,该文件只允许更改日志消息(而不是其他属性):http://ayria.livejournal.com/33438.html。基本上将下面的代码复制到一个文本文件中,并将其命名为 pre-revprop-change.bat 并将其保存在您的存储库的 /hooks 子目录中。

        @ECHO OFF
        :: Set all parameters. Even though most are not used, in case you want to add
        :: changes that allow, for example, editing of the author or addition of log messages.
        set repository=%1
        set revision=%2
        set userName=%3
        set propertyName=%4
        set action=%5
        
        :: Only allow the log message to be changed, but not author, etc.
        if /I not "%propertyName%" == "svn:log" goto ERROR_PROPNAME
        
        :: Only allow modification of a log message, not addition or deletion.
        if /I not "%action%" == "M" goto ERROR_ACTION
        
        :: Make sure that the new svn:log message is not empty.
        set bIsEmpty=true
        for /f "tokens=*" %%g in ('find /V ""') do (
        set bIsEmpty=false
        )
        if "%bIsEmpty%" == "true" goto ERROR_EMPTY
        
        goto :eof
        
        :ERROR_EMPTY
        echo Empty svn:log messages are not allowed. >&2
        goto ERROR_EXIT
        
        :ERROR_PROPNAME
        echo Only changes to svn:log messages are allowed. >&2
        goto ERROR_EXIT
        
        :ERROR_ACTION
        echo Only modifications to svn:log revision properties are allowed. >&2
        goto ERROR_EXIT
        
        :ERROR_EXIT
        exit /b 1
        

        【讨论】:

        • +1 我在回答中忘记了这一点,已经发布了 linux 等价物
        • 本可以链接到此站点上已有的答案,例如 stackoverflow.com/questions/6155/…,再次复制/粘贴,以便随着时间的推移改进单个参考。
        • 注意!空格字符不应该出现在 SVN 存储库的路径中,否则将无法正常工作。我为此苦苦挣扎了好几个小时。
        【解决方案4】:

        使用 Tortoise SVN 将使您轻松完成这项工作。只需打开日志消息窗口,右键单击要编辑的修订日志,然后从上下文菜单中选择编辑日志。

        【讨论】:

          【解决方案5】:

          一种无需创建 pre-revprop-change 挂钩脚本即可快速更改日志消息的方法是使用以下svnadmincommand

          svnadmin setlog --bypass-hooks REPOS_PATH -r N FILE
          

          其中REPOS_PATH 是服务器上存储库的路径(例如/srv/svn/repository),N 是修订号(例如25),FILE 是包含正确提交日志条目的文本文件。

          两件事: 这需要文件系统访问存储库文件,但创建 pre-revprop-change 挂钩脚本也是如此...其次,此命令将绕过可能存在的任何挂钩脚本,因此建议使用...

          【讨论】:

          • 他们不能让它变得更难...... 8-P 成功了。谢谢你。很明显,我不想太频繁地更换 cmets!
          • @AlexisWilke 注释历史可能是一件棘手的事情!很高兴我能帮上忙!
          【解决方案6】:

          在 Eclipse(或 Rational Application Developer)中使用 Subclipse:

          选择团队 --> 显示历史,然后右键单击要更改其 cmets 的修订,然后选择“设置提交属性”,您可以更改评论和/或作者。

          【讨论】:

            【解决方案7】:

            在 Tortoise SVN 中,您可以按照以下步骤操作。
            1. 转到存储库浏览器。
            2. 右键单击​​要处理的文件夹。
            3. 单击显示日志。
            4. 在修订列表中,选择并右键单击所需的修订。
            5. 点击编辑日志消息。

            您现在可以在 svn checkin 修订版中编辑您的 cmets。

            谢谢!

            【讨论】:

            • 如其他答案所述,这仅在您有上述挂钩时才有效。
            • 我向修订版添加了一个属性,例如具有值“bug/feature”的“类型”,因此我可以将几个修订版组合在一起,我尝试了这个并且能够向修订版添加属性但是我怎么能将该属性视为修订日志窗口中的一列(在乌龟中),用于所有签入类似于我们在查看存储库日志时通常看到的修订、作者、日期、日志列?任何帮助将不胜感激?
            猜你喜欢
            • 2022-07-05
            • 1970-01-01
            • 2010-10-08
            • 2014-09-05
            • 1970-01-01
            • 1970-01-01
            • 2015-02-10
            • 1970-01-01
            • 2016-09-02
            相关资源
            最近更新 更多