tips - 過去のコミットメッセージを変更する
能書き
Subversionでも過去のコミットメッセージを変更できる、という事を最近知りました。あんまり一般的ではありませんが。というかデフォルト設定では変更できないようになっています。
という訳で、その為の設定と、実際にやってみたレポートです。
svnadmin setlog
Subversionの管理コマンドsvnadmin
を使えるユーザであれば、svnadmin setlog
で普通に変更できます。
参考文献: リポジトリのお掃除 - リポジトリの保守 - 5. リポジトリの管理 - Subversion によるバージョン管理 For Subversion 1.2
まず、現在の状況。実は前の記事の続きとして書いているので、ちょっとそういう感じです。
# svn log
------------------------------------------------------------------------
r2 | root | 2020-07-06 01:23:01 +0900 (Mon, 06 Jul 2020) | 1 line
set svn:ignore
------------------------------------------------------------------------
r1 | root | 2020-07-05 23:37:52 +0900 (Mon, 05 Jul 2020) | 1 line
first commit
------------------------------------------------------------------------
実験ですので、最後の revision2 ではなく、過去の revision1 のメッセージを修正します。新しいメッセージはファイルに格納して指定するようですが、bashの機能を使って標準入出力をパイプします。
# echo "change" | svnadmin setlog /etc/.svn_repo/ -r 1 --bypass-hooks /dev/stdin
# svn log
------------------------------------------------------------------------
r2 | root | 2020-07-06 01:23:01 +0900 (Mon, 06 Jul 2020) | 1 line
set svn:ignore
------------------------------------------------------------------------
r1 | root | 2020-07-05 23:37:52 +0900 (Mon, 05 Jul 2020) | 2 line
change
------------------------------------------------------------------------
1点気になるのは、テキスト末尾に改行があると、空行と認識されてしまうようです。echo
コマンドなら改行を出力しないオプションがあります。
# echo -n "change" | svnadmin setlog /etc/.svn_repo/ -r 1 --bypass-hooks /dev/stdin
# svn log
------------------------------------------------------------------------
r2 | root | 2020-07-06 01:23:01 +0900 (Mon, 06 Jul 2020) | 1 line
set svn:ignore
------------------------------------------------------------------------
r1 | root | 2020-07-05 23:37:52 +0900 (Mon, 05 Jul 2020) | 1 line
change
------------------------------------------------------------------------
svn propset svn:log
一般ユーザーでも使用可能なsvn
コマンドでも、コミットメッセージ変更の手段はあります。が、その為の設定が必要です。
余計な事はしない
とにかくササッと実験。
設定
バージョン化されてなくて変更前の歴史を忘れてしまうような文書は、なるべく変更させたくないってのがSubversionの哲学らしい。
参考文献: フックスクリプト - リポジトリの作成と設定 - 5. リポジトリの管理 - Subversion によるバージョン管理 For Subversion 1.2
ここの「pre-revprop-change」「post-revprop-change」の項目に従ってフックスクリプトを作成します。リポジトリの中にhooks
ディレクトリがあるようです。ここに雛形が置かれていて、中身を読むとpre-revprop-change.tmpl
だけ有効にすれば良さそうなんですが、実際にやってみるとpost側も用意しないとエラーになります。
今回はpost-revprop-change
は何もしない物にしてみます。
# cd /etc/.svn_repo/hooks/
# cp -p pre-revprop-change.tmpl pre-revprop-change
# echo '#!/bin/sh' >post-revprop-change
# chmod +x post-revprop-change
# ls -l *-revprop-change
-rwxr-xr-x 1 root root 12 Jul 6 20:14 post-revprop-change
-rwxr-xr-x 1 root root 3437 Jul 5 23:13 pre-revprop-change
コミットメッセージ変更
現状を確認。
# cd /etc
# svn log
------------------------------------------------------------------------
r2 | root | 2020-07-06 01:23:01 +0900 (Mon, 06 Jul 2020) | 1 line
set svn:ignore
------------------------------------------------------------------------
r1 | root | 2020-07-05 23:37:52 +0900 (Mon, 05 Jul 2020) | 1 line
change
------------------------------------------------------------------------
参考文献: 属性の操作 - 属性 - 7. より進んだ話題 - Subversion によるバージョン管理 For Subversion 1.2
ここのカラム「リビジョン属性のマージ」にコミットログ修正の方法が書いてありますが… なぜかここ以外では触れていませんね。特殊な属性の紹介の中に svn:log が書かれていません。
まぁいいか。実際にやってみます。
# svn propset --revprop -r1 svn:log "first commit"
property 'svn:log' set on repository revision 1
# svn log
------------------------------------------------------------------------
r2 | root | 2020-07-06 01:23:01 +0900 (Mon, 06 Jul 2020) | 1 line
set svn:ignore
------------------------------------------------------------------------
r1 | root | 2020-07-05 23:37:52 +0900 (Mon, 05 Jul 2020) | 1 line
first commit
------------------------------------------------------------------------
変更を記録に残す
メールではなくて systemd-journald に残すようにしてみました。
#!/bin/bash
systemd-cat -t etcmgr <<___
REPOSITORY="$1"
REVISION="$2"
USER="$3"
PROPERTY="$4"
ACTION="$5"
OLD MESSAGE:
$(cat)
___
やってみます。
# cd /etc
# svn propset --revprop -r1 svn:log "change"
property 'svn:log' set on repository revision 1
# svn log
------------------------------------------------------------------------
r2 | root | 2020-07-06 01:23:01 +0900 (Mon, 06 Jul 2020) | 1 line
set svn:ignore
------------------------------------------------------------------------
r1 | root | 2020-07-05 23:37:52 +0900 (Mon, 05 Jul 2020) | 1 line
change
------------------------------------------------------------------------
# journalctl -at etcmgr
-- Logs begin at Sun 2020-06-28 21:46:01 JST, end at Mon 2020-07-06 20:34:41 JST. --
Jul 06 20:34:41 〈マシン名〉 etcmgr[2046]: REPOSITORY="/etc/.svn_repo"
Jul 06 20:34:41 〈マシン名〉 etcmgr[2046]: REVISION="1"
Jul 06 20:34:41 〈マシン名〉 etcmgr[2046]: USER="root"
Jul 06 20:34:41 〈マシン名〉 etcmgr[2046]: PROPERTY="svn:log"
Jul 06 20:34:41 〈マシン名〉 etcmgr[2046]: ACTION="M"
Jul 06 20:34:41 〈マシン名〉 etcmgr[2046]: OLD MESSAGE:
Jul 06 20:34:41 〈マシン名〉 etcmgr[2046]: first commit
やったね
Author And Source
この問題について(tips - 過去のコミットメッセージを変更する), 我々は、より多くの情報をここで見つけました https://qiita.com/katz_engineer/items/3e0a5fdaa94eead19bf9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .