Wednesday, February 08, 2012

解決 cvsimport commit message charset convert to UTF-8

前一陣子用git cvsimport 遇到 "Warning: commit message does not conform to UTF-8",原本的cvs的logmsg用的是big5,cvsimport又沒有參數可以設定charset,所以就自己手動修改了 cvsimport這個perl script (修改i18n.commitencoding不是我的選項)


修改後的 cvsimport (我用的是cygwin版的git 1.7.5.1, cvsimport是存在C:\cygwin\lib\git-core)

1.  在檔案的開頭部份增加lib 'Encode'

use IPC::Open2;
require Encode; ## add this line

2.  如果你是要建立一個 "bare" repository,搜尋 "qw(git init)" 並加入下面的code

#system(qw(git init); ##origin
system(qw(git init --bare --share)); ## replace by robin 20120208

3. logmsg轉碼,搜尋 "sub commit {" 並加入下面的 code

sub commit {
## +20120208 by robin for commit message utf-8
my $msg = $logmsg;

eval { $msg = Encode::decode('BIG5', $msg, 1) }; ## origin charset BIG-5, GBK
if ($@) {
die "Could not decode as 'big5':\n", $msg,
"\nPerhaps you need to set i18n.commitencoding\n";
}
eval { $msg = Encode::encode('UTF-8', $msg, 1) };
die "Could not encode as UTF-8:\n$msg\n" if $@;

$logmsg = $msg;

## patch2
my $fragment = substr $logmsg, 0, index($logmsg, 'Committed on the');
$logmsg = $fragment;
#print $logmsg;
#print $msg;

4. 執行cvsimport

$ mkdir aprj.git
$ cd aprj.git
$ git init --bare --share

$ export CVSROOT=:pserver:robin@10.1.251.16:/aprj
$ cvs login
$ git cvsimport -p -x -v -d :pserver:robin@10.1.251.16:/aprj amodule

Tada...



Monday, February 06, 2012

我的 Msysgit UTF-8 中文解決方案

1. git config

git config -e
[gui]
encoding = utf-8
[i18n]
commitencoding = utf-8
logoutputencoding = utf-8

2. bash profile
$ less ~/.profile
export TERM=ansi
export LESSCHARSET=utf-8
export GIT_PAGER=C:/cygwin/bin/less.exe
cd /g/EastPutWestPut/MyAsciiDocBook

3. vim setting
修改 {git home}/share/vim/vimrc,vimrc 最後加上

set fileencodings=utf-8

3.1 如果用vi開啟檔案顯示亂碼,在 vi 裡輸入:

:e! ++enc=utf-8

4.msys inputrc

{git home}\etc\inputrc 最後加上

set output-meta on
set convert-meta off

用cygwin建立的git repository在user clone時發生 'XXX' does not appear to be a git repository 的解法

如果使用 "git clone auser@10.1.1.1:/cygdrive/d/git-repos/aproj.git" 發生 'XXX' does not appear to be a git repository,請改用

git clone auser@10.1.1.1:D:/git-repos/aproj.git
也就是把 '/cygdrive/d/' 改成 'D:/'