2013-03-22 1 views
5

SVN을 사용하고 안정적인 생산 브랜치와 불안정한 트렁크가 있습니다. 각 릴리스에 대해 체리는 생산에 병합 될 트렁크의 항목을 선택합니다.Git SVN 워크 아웃 가능 svn mergeinfo - show-revs 가능

커밋 메시지에서 JIRA ID를 검색 할 때 병합해야하는 커밋에 대한 빠른 검색을 활용할 수 있도록 git svn으로 SVN Repo를 복제했습니다. 그러나, 나는 아직도 그것의 끝에 svn 병합과 내 병합을 않습니다.

장기간 지속되는 프로덕션 지점의 문제점 중 하나는 병합되지 않는 트렁크에 커밋이 남아 있다는 것입니다.

내가 가끔 실행이 문제를 해결하려면 다음

svn mergeinfo --show-revs eligible https://my.server/svn/trunk https://my.server/svn/branches/PROD_V3.00

그러나이 정말 느립니다. 자식에 상당하지만, 이것은 단지 모든 커밋을 나열하는 것

git log prod..master

입니다.

이것은 svn 병합과 svn : mergeinfo 속성을 인식하지 못하기 때문에 발생합니까?

git을 사용하여 적합한 커밋을 빠르게 얻을 수있는 방법이 있습니까?

는 편집 : I가 Joes의 응답 시도

그러나, git cherry 그냥 SHA를 출력하고, 내가 병합을 수행 할 SVN 개정이 필요합니다. 따라서, 필자는 필요한 것을 얻기 위해 git svn find-rev을 통해 SVN id를 찾아야했습니다.

git cherry prod master|cut -d' ' -f2|while read -r line; do git svn find-rev "$line"; done;

불행하게도,이 svn mergeinfo --show-revs eligible보다 느립니다.

+1

이미 SHA를 가지고 있고'git svn find-rev'를 호출하지 않으려는 경우 커밋 메시지에서 svn 리비전을 찾아 볼 수 있습니다. 여기에서 커밋 메시지는 일반적으로 git-svn에 의해 추가됩니다. 'git cherry prod master | cut -d ''-f2 | 읽는 동안 -r 행; git show -s --format = format : "% b" "$ line"| grep git-svn-id; 완료, ' –

답변

3

커밋이 체리 피킹 된 경우 커밋 사본이 두 개 있습니다. Git은 prod에 복사본이 있어도 모든 커밋을 master에 표시합니다.

등가

는 아마도 :

git cherry master prod 

당신에게 prod에 체리 고른 된 것으로 표시되지 않습니다 master의 모든 커밋을 보여줄 것이다.

1

Perl에서 모두 작업 할 수 있다면 git-svn은 단순히 큰 perl 스크립트이며 git svn find-rev는 perl 스크립트 내의 함수입니다. 매번 rev_map 파일을 읽지 않아도되므로 코드를 작성할 수 있습니다.

그래서, 내가 무엇을 생각하고하면 해당 이것이다 :

git cherry prod master|cut -d' ' -f2|while read -r line; do git svn find-rev "$line"; done 

더 이런 일이되다 (완료되지 나는 더 이상 자식 - svn을 REPO가없는 C/b를 실행하지 않은) :

#!/usr/bin/perl 

use Carp; 
use Git::SVN; 
# use ...the rest of the Git::SVN module... 

# ...initialize whatever is necessary... 

open(ELIGIBLE_COMMITS, "git cherry prod master") || croak "Couldn't do git cherry"; 
while (<ELIGIBLE_COMMITS>) { 
    ($ignore, $sha1) = split; 
    my (undef, $rev, undef) = cmt_metadata($sha1); 
    print "$rev\n"; 
} 
close(ELIGIBLE_COMMITS); 

또한 단지 git-svn 스크립트의 cmd_find_rev는 예를 들면 찾기 위해 여러 버전을 지정하는 추가 옵션을 취할 수정하는 것이 좋습니다,

find-rev --file <filename> 

여기서 filename은 STDIN을 지정하기 위해 "-"가 될 수 있습니다.

+0

흥미 롭습니다. 여러 개의 샤를 파이프로 연결하는 것이 병목 현상이라고 말하고 있습니까? –

+1

병목 현상인지 모르겠지만 git-svn 매핑 내에서 발생하는 많은 부분은 이식성 측면에서 빠르지 않습니다. 나는 git에 바로크적인 SVN repo 레이아웃을 옮기는 과정에서 일 년 반 전에 조사를했다. –