문제

우리는 GIT-SVN을 사용하여 SVN Repo의 지점을 관리하고 있습니다. 우리는 다음과 같은 문제에 직면하고 있습니다. 분기에서 사용자 X가 여러 커밋 한 후 사용자 Y는 GIT-SVN을 사용하여 지점의 변경 사항을 트렁크로 병합하려고합니다. 우리가보고있는 문제는 모든 개별 병합 작업에 대한 커밋 메시지가 사용자 Y가 마치 마치 마치 마치 마치 사용자 X에 의해 만들어 졌다는 것입니다.

병합 할 때 합병을하는 사람보다는 주어진 변경에 대해 원래 커밋 메시지/저자를 사용한다는 것을 Git-SVN에 표시하는 방법이 있습니까?

도움이 되었습니까?

해결책

Git-Svn Man Page는 귀하를 추천합니다 병합을 사용하지 마십시오. ""Git-SVN Fetch 및 Rebase (풀 또는 병합이 아님)를 실행하는 것이 좋습니다 "". 그렇게 말하면, 당신은 당신이 좋아하는 일을 할 수 있습니다 :-)

여기에는 두 가지 문제가 있습니다. 첫 번째는 SVN이 저장한다는 것입니다 통신기, git처럼 패치의 저자가 아닙니다. 따라서 Y가 트렁크에 합병을 겪을 때 SVN은 패치가 X에 의해 작성 되었음에도 불구하고 그녀의 이름 만 기록합니다. 이것은 A입니다. 놀라운 오픈 소스 프로젝트에 대해 놀랍도록 단순하지만 필수적 인 GIT의 특징은 저자의 변화를 기반으로 법적 문제를 피할 수있었습니다.

둘째, GIT는 비교적 새로운 SVN 병합 기능을 사용하지 않는 것 같습니다. GIT가 적극적으로 개발되고 새로운 기능이 항상 추가되기 때문에 이것은 일시적인 일이 될 수 있습니다. 그러나 지금은 사용하지 않습니다.

방금 GIT 1.6.0.2로 시도했는데 SVN Merge와 동일한 작업을 수행하는 것과 비교하여 정보를 "잃어 버렸습니다". SVN 1.5에서는 로깅 및 주석 방법에 새로운 기능이 추가되어 트렁크의 SVN 로그 -G가 병합을 위해 이와 같은 것을 출력하게됩니다.

------------------------------------------------------------------------
r5 | Y | 2008-09-24 15:17:12 +0200 (Wed, 24 Sep 2008) | 1 line

Merged release-1.0 into trunk
------------------------------------------------------------------------
r4 | X | 2008-09-24 15:16:13 +0200 (Wed, 24 Sep 2008) | 1 line
Merged via: r5

Return 1
------------------------------------------------------------------------
r3 | X | 2008-09-24 15:15:48 +0200 (Wed, 24 Sep 2008) | 2 lines
Merged via: r5

Create a branch

여기서 y는 R5를 커밋하며, 여기에는 분기의 X에서 트렁크로의 변경 사항을 통합합니다. 로그의 형식은 실제로 그다지 크지는 않지만 SVN Blame -g에서 자체적으로 제공됩니다.

       2          Y int main()
       2          Y {
G      4          X   return 1;
       2          Y }

여기서 y가 트렁크에만 커밋한다고 가정하면 한 줄이 x (분기)에 의해 편집되고 병합 된 것을 볼 수 있습니다.

따라서 SVN 1.5.2를 사용하는 경우 현재 실제 SVN 클라이언트와 병합하는 것이 좋습니다. 당신은 git에서 병합 정보를 잃을 것이지만, 일반적으로 불평하지 않을 정도로 영리합니다.

업데이트 : 방금 GIT 1.7.1 로이 작업을 시도하여 중간에 발전이 있는지 확인했습니다. 나쁜 소식은 GIT 내 합병이 여전히 SVN을 채우지 않는다는 것입니다. git merge 그 뒤에 git svn dcommit SVN : MergeInfo를 설정하지 않으면 전복 저장소가 정식 소스 인 경우 병합 정보를 잃게됩니다. 좋은 소식은 git svn clone SVN : MERGEINFO 속성으로 읽히기 위해 더 나은 병합 기록을 구성하므로 사용하는 경우 svn merge 올바르게 (전체 분기를 병합해야 함) Git 클론은 GIT 사용자에게 정확하게 보입니다.

다른 팁

이식편을 사용하여 문제의 커밋 개체에 표시되지 않은 합병에 대해 Git을 가르 칠 수 있습니다.

echo "$merge_sha1 $parent1_sha1 $parent2_sha1" >> .git/info/grafts

이 정보를 찾는 것은 충분히 쉽습니다. 해당 합병 커밋을 찾으면 $merge_sha1 그리고 $parent1_sha1 이미. 일반적으로, 그러한 커밋의 커밋 메시지에는 두 번째 부모 커밋의 SVN 개정 번호가 포함되며, 이는 해당 커밋 ID로 간단히 번역됩니다.

git svn find-rev r$revnum $branch

Presto, 이식편을 만드는 데 필요한 3 가지 정보가 모두 있습니다.

git-svn에 -add-author-from 및 -use-log-author 옵션을 사용해보십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top