2010-02-17 2 views
6

SVN 분기에 문제가 있습니다. git checkout -t -b stable svn/stable으로 결제를 확인했습니다. 그런 다음 git rebase master과 병합했습니다. 는 그 후 나는 git svn dcommit힘내 : rebase 후 SVN 지점에 커밋하는 방법?

으로 원격 지사에 병합 변경 사항을 적용하려하지만 지금은 힘내 나를 말한다 대신 지점 :(

그리고 git status를 트렁크에 변경 사항을 밀어 것으로 보인다 :

# On branch stable 
# Your branch and 'svn/stable' have diverged, 
# and have 218 and 52 different commit(s) each, respectively. 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
... 

누군가가 내가 뭘 잘못했는지 알고 있나요 내가 최근에 동일한 오류에 충돌이 맞죠?

답변

2

하는 방법. 건은 당신이 마스터 리베이스 할 때, 그것은 첫 번째 하드 rese입니다 ts 현재 분기를 마스터로 설정 한 다음 병합 된 커밋을 적용합니다. 그러나 마스터 브랜치는 svn/trunk과 연관되어 있으므로 새로 재설정 된 브랜치도 함께 연결됩니다. 그래서 git-svn on dcommit은 누를 때 svn/trunk에 커밋이 "삽입"된다고 생각합니다.

해결책은 git rebase 대신 git merge --no-ff을 사용하는 것입니다. 또는 Subversion 자체의 병합 기능을 사용합니다.

+0

흠 덕분에

덕분에, 나는 자식 병합을 사용할 수있는 가능성에 대해 알고 있지만, 나는 다른 정보의 개정 역사와 많은 느슨한 것입니다. 마스터 자체가 아닌 마스터 분기를 사용하여 리베이스하는 솔루션일까요? – ownking

+0

@ tigerseye, 그러한 분기 트릭이 도움이 될지 의심 스럽습니다. 'svn/trunk'와 관련된 커밋이 여러분의 브랜치에 들어갈 것이기 때문입니다. 업데이트 기록을 유지하려면 Subversion과 병합 할 수 있습니다. 그렇지 않으면, 당신은 단지 Subversion 로그를 오염시킬 것이고, 다른 개발자들은 그것에 만족하지 않을 것입니다. –

+0

나는 자식에게 새로운데, 나는 장점을 실제로 본다.하지만이 단계에서는 매일의 어려움 때문에 때로는 너무 어려워 보인다. git switchers 세계에서 dev_git 브랜치를 안정적인 SVN 브랜치로 병합하는 것이 일반적인 시나리오가 아닙니까? – ownking

0

은 이제 나는 다음과 같이했다, 작동 :

git checkout master 
    git svn rebase 
    git checkout --track -b svn_stable svn/stable 
    git merge --squash master 
    git commit -m "Bring stable up-to-date with trunk" 
    git svn dcommit --dry-run 
    git svn dcommit 

가 병합 충돌 처리와 리베이스보다 훨씬 쉬웠다.

이 시도에서 나는 을 사용하는 것을 잊어 버렸습니다. 이것은 각 병합에 대한 커밋을 강요합니다. 맞습니까? 당신의 도움 :)