2010-01-27 9 views
5

Git을 저의 목적으로 사용하고 싶습니다. 회사에서 Subversion 저장소를 사용해야합니다. 나는 'git svn'명령이 있다는 것을 알고 있지만 git 저장소에서도 lineral 히스토리가 필요합니다. 그걸로 문제는 내가 좋아하는 것입니다 : - 다른 컴퓨터에 다른 자식 저장소와 동기화 할 수 있도록 내 원격 저장소에있는 다른 자식 저장소와 함께 저장소를 동기화하려면 - 그리고 가장 중요 : 나는하고 싶다. 내 자식 저장소에서 자주 커밋을하고이 작은 단계가 커밋할만한 가치가 있다고 판단하면 (커다란 공유만큼) 커밋하고 싶지만 한 번만 커밋하면됩니다. 'git svn'을 사용하면 브랜치를 사용할 수 없기 때문에 (왜냐하면 내가 마스터와 병합 할 때, 마스터는 선형적인 히스토리를 가지지 않을 것이기 때문이다.) 'svn, 에서 git (mayby는 때로는 어리 석고 너무 작다)Git을 회사에서 사용하고 Subversion을 회사에서 사용합니다.

제발 도와주세요 ... 어쩌면 제가 큰 영광과 svn을 커밋하는 데 사용할 수있는 워크 플로우가 있습니다 (내 '개인용'이 아닌 ... 어쩌면 아주 작은 변경 사항과 어떤 시간 동안 cas cod that cod 컴파일되지 않습니다.) 회사 저장소가 변경되었습니다.

미리 감사드립니다.

답변

8

다른 컴퓨터의 다른 git 저장소와 동기화 할 수 있도록 git 저장소를 원격 디스크의 다른 git 저장소와 동기화하고 싶습니다.

시도 :이 작은 단계 (공유 충분히 큰) 커밋 가치가 결정할 때

git remote add external-repo ssh://host/path/to/git/repo.git 
git push origin external-repo 

은 내가 커밋하고 싶은 내 자식 저장소에 자주 커밋 좋아하고 것 그들을 하나의 커밋으로 svn하지만.

땀 없음. git rebase -i으로 다중 커밋을 축소 ("스쿼시"라고 함)하고 커밋을 버릴 것인지, 버리거나, 커밋을 커다란 커밋으로 유지할 것인지 결정합니다. 외부 레포로 이동하기 전에 정리하는 것이 좋습니다. -i은 "대화 형"모드입니다.

with 'git svn'브랜치를 사용할 수 없습니다. 왜냐하면 (브랜치를 마스터와 병합 할 때 마스터가 선형적인 히스토리를 가지지 않기 때문입니다).

사실이 아닙니다. svn으로 추적하려는 각 지점에 대해 git에 지점을 설정하면됩니다. 반대 방향에서는 어쨌든 한 번에 하나의 가지만 밀고 있습니다.

2

나는 항상 내 회사에서 이런 식으로 일합니다. (실제로는 더 이상 전복에 맞설 수 없습니다.) git svn을 사용하여 브랜치를 사용할 수 없다고 생각하는 이유는 무엇입니까? 그 (것)들을 사용할 수있을뿐만 아니라, 전복에 직접적으로 투입 할 수 있습니다.

커밋 병합을 수행하려면 git rebase remotes/trunk --interactive 같은 것을 사용하고 squash 커밋하십시오. 그러나 확장 버전과 응축 버전을 동시에 유지 관리 할 수는 없습니다. 당신은 작은 작은 커밋들을 모두 얻었거나 당신은 부숴 버릴 커밋들을 얻습니다.

+0

이 워크 플로를 보여주는 비디오 캐스트가 있습니까? 이것은 내가 시험해보고 싶은 무언가처럼 들리지만, 건배 – roundcrisis

+0

빠른 답변을 주셔서 감사합니다. 그러나 자세한 내역 양식을 git에서 직접 작성하고 싶은 경우 커밋을 왜 스쿼시하지 않을까요? 분기 ... 내 (svn에서 공유하지 않음) 분기 만 가질 수 있습니까? 내가 걱정하기 때문에 master와 지사를 병합 할 수없고 master git svn에서 할 수 없다. 왜냐하면 master는 선형적인 역사를 가지지 않기 때문이다. 개인적으로 git 및 회사에서 svn으로 작업하는 가장 좋은 방법은 무엇입니까? 예제 명령으로 워크 플로를 표시 할 수 있습니까? – miki

+0

@miki : Re Branches - 예 (svn에서 공유하지 않음)는 내가 말하고있는 것들입니다. svn으로 다시 커밋하기 전에 원하는대로 많은 브랜치를 만들고 마스터로 다시 병합 할 수 있습니다. 또는 svn으로 돌아가는 브랜치에서 곧바로 dcommit 할 수 있습니다. –

2

대화식 리베이스 대신 "공식"지점에서 git merge --squash을 사용할 수도 있습니다.

git checkout master 
git merge --squash development 

이것은 개발 내역을 파괴하지 않는다는 장점이 있습니다. 이제 모든 변경 사항을 포함하는 커다란 커밋을 만들거나 git add -p 또는 git gui을 사용하여 인덱스를 재설정하여 분기에서 임의의 수의 커밋을 만들 수 있습니다. 그러면 해당 분기에 일반적으로 mastergit-svn dcommit으로 커밋합니다. .

1

내가하고있는 가장 쉬운 방법은 한 번에 두 가지 소스 제어 방법을 관리하지 않는 것입니다. 내 자신의 개인 버전 제어를 위해 자식을 사용합니다. 일주일에 몇 번, 중앙 저장소에 커밋 할 준비가되면 git에서 master 분기를 체크 아웃하고 TFS에 커밋합니다. 서버에서 변경 한 내용이 내 dev 브랜치에 체크 아웃되고 내 코드로 병합됩니다.

어떤 방법 으로든 우아하지 않지만, 나는 중앙 레포에서 일주일에 몇 차례 체크 아웃/체크 인이므로 완벽하게 잘 작동합니다.

관련 문제