월별 글 목록: 2009년 10월월

git-svn 사용 시 한글 파일명을 가진 파일 오류 해결하기

Git를 여기 저기에 적용해 보던 어느 날…

Subversion 레파지토리를 Git로 쓸 기회가 생겼다.

git-svn 을 이용해서 파일을 clone을 해 왔는데, 마지막에 가서 먼가 자꾸 실패한다.

알고 보니 한글로 된 이름을 가진 파일을 가져오는 과정에서 문제가 생기는 것.

한글로 된 이름을 가진 파일을 처리할 때 Invalid argument 가 어쩌고 하는데..

아무래도 인코딩 문제인거 같기는 한데…

답이 안보인다.

에 저장할 때 파일명 인코딩을 항상 UTF-8로 하는데,

git-svn은 이를 무시하고 항상 그대로 읽어오기 때문이었다.

그래서 파일을 처리할때 파일명의 인코딩을 UTF-8에서 로컬에서 쓰는 인코딩으로 바꾸고,

다시 로컬 인코딩에서 UTF-8로 변경하는 과정을 거쳐줘야 한다.

오만상 삽질 끝에 알아낸 것은 git-svn에서만 발생하는 문제라는것.

원인은 Subversion이 레파지토리

git-svn은 perl로 되어 있으며, Git 설치 디렉토리의 libexec/git-core/git-svn 이다.

첨부한 패치를 적용하거나 파일을 열어서 다음과 같이 수정해 준다.

01-git-svn-file-name-encoding-processing.patch


sub git_path {
     my ($self, $path) = @_;
     if (my $enc = Git::config(‘svn.filenameenc’))
     {
         require Encode;
         Encode::from_to($path, ‘UTF-8’, $enc);
     }   
     if ($self->{path_strip}) {
         $path =~ s!$self->{path_strip}!! or
           die “Failed to strip path ‘$path’ ($self->{path_strip})\n”;
 

 sub repo_path {
     my ($self, $path) = @_;
     if (my $enc = Git::config(‘svn.filenameenc’))
     {
         require Encode;
         Encode::from_to($path, $enc, ‘UTF-8’);
     }
     $self->{path_prefix}.(defined $path ? $path : ”);
 }

그런 다음, .gitconifg 파일에서 다음과 같이 인코딩 설정을 추가해 준다.

.gitconfig 파일은 HOME 디렉토리에 있으며, 윈도우인 경우에는 “내 문서” 폴더에 있다.

[svn]

    filenameenc = EUC-KR

이렇게 한 후 git-svn으로 clone을 하면 아무 문제없이 clone이 된다.

첨부한 git-svn은 윈도우용 Git인 Msysgit 1.6.4 에 해당 패치를 적용한 파일이다.

git-svn.perl