Git中有没有办法重写commit encoding
标题?我有一些author name
的提交,其ISO-8859-1
编码名称但提交编码标头为空,默认为UTF-8
。这导致一些应用程序在解码提交时出错(例如Gitlab)。同样适用于某些提交消息。
一些想法?
答案 0 :(得分:2)
解决这个问题:
$ git filter-branch -f --commit-filter '
author_type=$( echo $GIT_AUTHOR_NAME | file -b --mime-encoding - )
author=$( echo $GIT_AUTHOR_NAME | iconv -f $author_type -t UTF-8 )
GIT_AUTHOR_NAME=$author
committer_type=$( echo $GIT_COMMITTER_NAME | file -b --mime-encoding - )
committer=$( echo $GIT_COMMITTER_NAME | iconv -f $committer_type -t UTF-8 )
GIT_COMMITTER_NAME=$committer
git commit-tree "$@";' --msg-filter '
cat > .commitmsg
type=$(cat .commitmsg|file -b --mime-encoding -)
cat .commitmsg|iconv -f $type -t UTF-8
' HEAD
$ rm -f .commitmsg
答案 1 :(得分:2)
如果提交消息真的搞砸了并且Sascha的解决方案不起作用(因为file -b --mime-encoding -
没有说实话),可以使用以下方法来删除提交消息中的每个字符那不是ASCII:
git filter-branch --msg-filter '
perl -pe 's/[^[:ascii:]]//g;'
' HEAD
很明显,这远非完美,因为它杀死了各种非英语角色,如变音符号,但在某些情况下(即由旧的cvs-repo产生的git-repo带有可怕的编码提交消息)它可能是唯一的自动解决方案。
答案 2 :(得分:1)
测试(使用git 2.2.0)显示,只要您使用git commit
进行新提交,encoding <blah>
就会向提交标头添加i18n.commitencoding = blah
。这包括&#34;修正&#34;提交 - 这只是新的提交,其父级是HEAD
的父级,因此,给定您希望标记为HEAD
的现有提交,只需运行git commit --amend
并退出编辑器,使用附加标题行编写一个新的(不同的)HEAD
提交。
我没有测试git rebase -i
,但由于这会运行实际的挑选操作,而edit
模式允许您使用git commit --amend
进行新的HEAD
提交,一定会工作的。机制可能不是最漂亮的。
要查看原始提交(包括其编码行),请使用git cat-file -p HEAD
(或其他一些提交ID代替HEAD
)。
(正如eis注意到in a comment,首先使用UTF-8可能更好。当然,您可以将此作为修改过程,尽管它可能 - 或者可能不是根据你的编辑而变得棘手。)