2010-11-24 2 views
1

내 마스터 체크 아웃에서 git svn info를 할 수 있고 URL은 svn://myrepo.com/trun k 입니다. 내 new_feature 체크 아웃시 svn url은 svn://myrepo.com/branches/new_feature입니다.왜 git merge는 내 svn url을 브랜치에 설정 했는가?

내 마스터 체크 아웃에서 git merge new_feature를 실행 한 후 마스터 URL이 svn://myrepo.com/branches/new_feature으로 변경됩니다. 이것은 내 master와 new_feature 모두를 가리키며 더 이상 git svn dcommit를 트렁크로 사용할 수 없습니다.

참고 : 이것은 지난 주에 작동했는데 내가 생각할 수있는 유일한 점은 분기를 트렁크로 업데이트해야한다는 것입니다. 내 지점에서 git merge trunk를 실행했습니다. 아마도 그것은 자식이 더 이상 내 지점을 다시 트렁크에 병합시키지 않을 것입니까?

왜 이런 일이 일어 났는지 확인하고 문제가 발생하면 문제를 해결하는 방법을 알고 싶습니다.

답변

3

git svn은 svn 데이터 모델에서 git merges를 나타내는 데 심각한 시도를하지 않습니다 (적절하게 수행 할 수 없기 때문일 수도 있음). svn 분기 정보는 자식 로그 메시지에서 선택됩니다. 어떻게 든 new_feature가 로그에서 처음 나타났습니다. 첫 번째 병합 부모 다음에 더 좋았을 것입니다 (편집 : git-svn 아마 않았다, 아래 참조).

어쨌든, 이것을 처리하기 위해 권장되는 방법은 (git merge --squash을 사용하여) 병합을 기록하거나 git으로 완전히 전환하는 것이 아닙니다.

편집 내용보기 : 트렁크로 다시 병합해야합니다. git-svn 메타 데이터가있는 로그 메시지를 찾을 때까지 git-svn은 new_feature에 트렁크를 병합 한 첫 번째 병합의 첫 번째 부모를 따랐습니다. git merge --no-ff feature_branch을 사용하여 git이 트렁크로 빨리 감기 병합하는 것을 방지하십시오. git documentation

+0

고맙습니다. 고칠 수있었습니다. 새 로컬/트렁크 분기를 만들고 git merge --squash를 실행합니다. 트렁크에서 - 스쿼시가없는 new_feature 로의 첫 번째 병합이 실제 피해를 입은 것으로 보입니다. 도와 줘서 고마워. 기업 정책을 제쳐두고 나는 완전히 자식으로 옮기고 싶다. –

0

:

If you do merge, note the following rule: git svn dcommit will 

attempt to commit on top of the SVN commit named in 

git log --grep=^git-svn-id: --first-parent -1 

는 ... 그래서 당신은 (dcommitted과 그 지점을 가리키는 git-svn-id와 자식 로그를 가지고 있었다) (당신의 master 지점으로 new-feature 분기를 합병 이전하는 병합에 git-svn-id 로그 트렁크를 가리키는) 잘못된 지점 new-feature

이것은 가리키는 git-svn-idmaster에게 --first-parent 로그를 준 있었다 왜 모든 괞 찮아 저기 경고 ce는 svn이 뒷받침하는 자료를 병합 할 때주의해야합니다.