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

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

  1. 낭창 댓글달기

    msysgit 에는 언제 부턴가 해당 패치가 적용됐다. 정확한 버전은 알수 없지만 1.7.4 이상에는 적용되어 있는 듯.
    대신 변수명은 filenamenec 에서 pathnameencoding 으로 변경됐다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다