有一种方法可以通过使用脚本、GIT_EDITOR
环境变量和dcommit
的--edit
选项来实现此目的。
将以下内容保存到文件中,我们称其为svnmessage.sh
:
#!/bin/sh
c=`git rev-parse HEAD`
t=`git cat-file -t $c`
m=`cat "$1"`
if [ "commit" = "$t" ]; then
o=`git cat-file $t $c`
o_a=`echo "$o" | grep '^author '`
o_c=`echo "$o" | grep '^committer '`
author=`echo "$o_a" | sed -e 's/^author \(.*>\).*$/\1/'`
authorts=`echo "$o_a" | sed -e 's/^author .*> \([0-9]\+\) .*$/\1/'`
authordt=`date -d @$authorts +"%Y-%m-%d %H:%M:%S %z"`
committer=`echo "$o_c" | sed -e 's/^committer \(.*>\).*$/\1/'`
committerts=`echo "$o_c" | sed -e 's/^committer .*> \([0-9]\+\) .*$/\1/'`
committerdt=`date -d @$committerts +"%Y-%m-%d %H:%M:%S %z"`
m="$m
-----
Author: $author $authordt
Committer: $committer $committerdt"
fi
echo "$m" > "$1"
确保脚本可以执行:chmod +x svnmessage.sh
。然后像这样运行你的dcommit
:
GIT_EDITOR="/path/to/script/svnmessage.sh" git svn dcommit --edit
The
--edit
选项将使用
GIT_EDITOR
环境变量编辑提交消息,以便在提交到SVN之前进行处理。有关更多信息,请参见
git-svn
和
git-var
。
您可以创建一个别名来使事情变得更加容易:
git config --global alias.dcommit-edit '!GIT_EDITOR="$HOME/bin/svnmessage.sh" git svn dcommit --edit'
然后只需使用git dcommit-edit
命令。
该脚本依赖于git-svn.perl
如何从git cat-file
输出中提取SVN提交消息的方式。相同的技术被用来提取作者和提交者信息。一个简单的提交示例可能如下所示:
$ git cat-file commit 24aef4f
tree eba872d9caad7246406f310c926427cfc5e73c8d
parent 7dd9de9b5c68b9de1fc3b798edbab2e350ae6eac
author User <user@acme.com> 1321054806 -0500
committer User <user@acme.com> 1321054806 -0500
foo-27
脚本通常会将
.git/COMMIT_EDITMSG
作为参数传递给它;其中的内容将包含用于SVN提交消息的Git提交消息。
GIT_EDITOR
(或任何环境变量)只会在该命令中替换GIT_EDITOR
,而不会永久更改它。 - Go Dansed 's' commands
执行正则表达式替换,以提取相关数据。 - Go Dangit svn
依赖于 Git 的提交消息来“暂存”其工作。或者如果有方法的话,进一步分析 Git 源代码可能会有助于回答这个问题。 - Go Dan