2010-08-11 1 views
1

svn에 푸시되지 않은 로컬 git 저장소에 커밋이 여러 개 있다고 가정 해 보겠습니다. 예를 들어,이 네 가지는 마스터에 커밋합니다.git-svn을 사용하면 svn에없는 커밋이 여러 개있는 경우 어떻게 커밋을 svn에만 푸시합니까?

A <-- B <-- C <-- D 

A는 가장 오래된 SVN 않고 커밋 D는 최신 커밋이다.

git svn dcommit을 사용하여 A와 B 만 svn으로 푸시하지만 C와 D는 로컬 git 리포지토리에만 보관 하시겠습니까?

대체 워크 플로를 환영합니다.

답변

1

나는 이것에 대해 생각해 왔으며 내 문제에 대한 잠재적 인 해결책을 가지고 있습니다.

내가 작업중인 개별 작업마다 로컬 분기를 만들 수 있습니다. 하나의 작업을 끝내고 코드 검토를 기다리는 중이라면 새 지점을 만들고 독립적 인 작업을 시작할 수 있습니다.

주어진 작업이 완료되면 git svn rebase을 실행합니다. 그런 다음 마스터의 맨 위에 로컬 브랜치를 리베이스하고, 브랜치의 헤드로 빠른 마스터를 전달한 다음 dcommit을 수행합니다.

내 문제는 커밋 A와 B가 하나의 작업에 속하고 C와 D가 또 다른 독립적 인 작업이었습니다. C와 D는

git-svn dcommiting a single git commit

단지를 저지르고 있음을 시사한다 ... 다른 지점에 속하며, A와 B

이 질문에 대한 답을 상단에 최선을 다하고되지 말았어야 B는 실제로 가능하지 않습니다.

+0

이것은 정확히 내가 사용하는 워크 플로입니다. 내 모든 커밋은 별도의 지점에 있으며, 나는 단지 svn에 그것을 밀어하려고하는 경우 마스터와 지점을 병합 –

+0

오, 그리고 내가 생각하는 1256189 그것에 대해 가능한 * 그냥 * B를 말할 수 없다고 생각하고; 당신은 체리 - dcommit에 커밋을 선택할 수 없습니다 –

+0

아, 고마워요. 좋은 정보. – haydenmuhl

3

dcommit은 커밋 중 HEAD로 처리 할 것을 지정하는 선택적 인수를 취하므로 (B가 하나있는 경우 이름이나 해시로 중, 특정 참조 커밋입니다) 이러한 작업 중 하나를

git svn dcommit B 
git svn dcommit HEAD~2 
+0

나는 이것을 시도했고, 나를 위해 문제를 일으킨다. 때로는 A 만 커밋 한 다음 쓰레기를 버립니다. A와 B가 커밋되면 올바르게 리베이스하지 않으며 커밋 C와 D는 작업 복사본의 변경 사항으로 남습니다. 나는 1.5.5.6 버전이있다. – haydenmuhl