우리는 Subversion Geeks이며 Mercurial의 이점을 알고 싶습니다.


22

데 읽기 내가 의욕이나 힘내 또는 다른 DVCS을 고려 고려 여부를해야하는 이유 서브 버전 괴짜을 해요 .

관련 후속 질문이 있습니다. 나는 그 질문을 읽고 권장 링크와 비디오를 읽고 이점을 보았지만 사람들이 말하는 전반적인 사고 방식을 보지 못했습니다.

우리 팀은 60 개의 프로젝트로 구성된 하나의 큰 코드 기반에서 작업하는 8-10 명의 개발자로 구성되어 있습니다. 우리는 Subversion을 사용하고 주요 트렁크가 있습니다. 개발자가 새로운 Fogbugz 사례를 시작하면 svn 분기를 만들고 분기에서 작업을 수행하고 완료되면 트렁크로 다시 병합합니다. 때때로 그들은 오랜 기간 동안 지점에 머물러 있고 트렁크를 지점에 병합하여 변경 사항을 적용 할 수 있습니다.

Linus가 브랜치를 만드는 사람들에 대해 이야기하고 다시는하지 않는 것을 보았을 때 그것은 우리가 아닙니다. 우리는 아무 문제없이 일주일에 50-100 개의 지점을 만듭니다. 가장 큰 도전은 합병이지만 우리는 그것도 꽤 잘 해냈습니다. 나는 지점의 전체 루트가 아닌 fogbugz case & checkin으로 병합하는 경향이 있습니다.

우리는 원격으로 일하지 않으며 지점에서 지점을 만들지 않습니다. 코드베이스의 해당 섹션에서 작업하는 유일한 사람이라면 트렁크에 대한 병합이 원활하게 진행됩니다. 다른 사람이 동일한 코드 섹션을 수정 한 경우 병합이 지저분해질 수 있으며 일부 수술을 수행해야 할 수도 있습니다. 갈등은 갈등입니다. 코드를 이해하기에 충분히 똑똑하지 않은 한 어떤 시스템이 대부분의 시간에 어떻게 그것을 얻을 수 있는지 모르겠습니다.

브랜치를 생성 한 후 다음 60k + 파일 체크 아웃에 약간의 시간이 걸리지 만 사용하는 모든 소스 제어 시스템에 문제가됩니다.

우리가 보지 못했던 DVCS의 이점이 우리에게 큰 도움이 될 것입니까?


마치 SVN을 DVCS로 이미 사용하고있는 것처럼 보입니다 (어쨌든 분기와 관련하여). 나는 당신이 Mercurial이 SVN으로 할 수있는 거의 모든 것을 할 수 있다고 확신합니다. 그렇다면 문제는 어떤 것이 사용하기 쉽고 특정 개발 시나리오에 더 편리합니까? 가치가 있는지 아닌지를 직접 확인하기 위해 Mercurial을 시험해 봐야합니다.
Cameron

나는 Mercurial의 팬이며 SVN의 기능을 분명히 제공하지만 추가 기능은 소수의 프로젝트에만 유용합니다. 당신은 아마 그것을 필요로하지 않습니다, 그것은 당신의 인생을 바꾸지 않을 것이지만, 더 많은 기능을 얻고 아무것도 잃지 않을 것입니다.
jiggy

Hg Init 을 체크 아웃 했습니까 ? Joel Spolsky가 작성한 Mercurial 튜토리얼입니다. Subversion 사용자를위한 장으로 시작하지만 DVCS에 대해서는 아무것도 모를 것으로 예상합니다.
Barry Brown

답변:


11

"DVCS를 중앙 집중식으로 만 사용하려는 경우 어떤 이점이 있습니까?" 그런 식으로 물어도 그렇지 않습니다. 작업 당 하나의 브랜치는 VCS에서 매우 일반적입니다. 당신이 그것에 대해 생각한다면, 하루 동안 트렁크와 독립적으로 변경되는 개발자 컴퓨터에 소스 코드의 로컬 작업 복사본을 갖는 것은 아무도 그것을 호출하지 않더라도 지점입니다. 그와 워크 플로의 유일한 차이점은 해당 지점에 중앙 서버에서도 영구적 인 이름을 부여한다는 것입니다. 그것은 리누스와 다른 사람들이 말하는 종류의 가지가 아닙니다.

DVCS를 이해하려면 근본적인 사고가 필요합니다. 당신은 당신이 원하는 누구에게나 공유 할 수있는 많은 지점으로 당신이 무엇을 할 것인지 스스로에게 물어봐야합니다. 여기에는 나만 볼 수있는 가지가 포함됩니다.

가능성은 끝이 없습니다. 예를 들어, 두 사람이 인터페이스의 반대편에서 일하는 것은 어떻습니까? 정기적으로 서로 코드를 공유해야하지만 아직 모든 사람과 공유 할만큼 안정적이지 않습니다. 그들은 공유 할 지점을 만든 다음 준비가되면 중앙 저장소로 다시 병합 할 수 있습니다.

중간 로컬 커밋을 수행하는 능력은 그 자체로 가치가 있습니다. 그것은 당신이 스스로 경험해야 할 것입니다.

귀하의 리포지토리를 현지에서 확보함으로써 얻은 속도 또한 그 자체로 가치가 있습니다. 예, 60k 파일 리포지토리의 경우 VCS에서 초기 클론이 불가피하게 느려질 것입니다. 그러나 일단 그런 후에는 DVCS를 사용하여 새 분기를 확인하는 것이 훨씬 빠릅니다.


2
+1! 또한, 수은에 공정하고 철저한 시도를한다면, 돌아가고 싶지 않을 것입니다.
Pete

1
"원하는 사람과 공유 할 수있는 많은 지점으로 원하는 작업을 스스로에게 물어봐야합니다."... "인터페이스의 반대편에서 작업하는 두 사람이 있습니까? 그들은 서로 코드를 공유해야합니다. 다른 사람들과 정기적으로 공유 할 수는 있지만, 아직 모든 사람과 공유 할 수있을만큼 안정적이지 않습니다. 이들은 서로 공유 할 지점을 만든 다음 준비가되면 중앙 저장소로 다시 병합 할 수 있습니다. " 우리는 이제 모든 것을 subversion으로 가지고 있습니다.
Matt

@Matt, 비즈니스가 규칙보다 예외이기 때문에 운이 좋습니다. 대부분의 회사는 중앙 서버의 제한된 리소스에서 분기를 만드는 것에 대해 매우 엄격한 규칙을 가지고 있으므로 사람들은 일시적인 이유로 분기를 만드는 것에 대해 생각조차하지 않습니다.
Karl Bielefeldt

3
나는 원래의 포스터가 SVN의 대부분의 SVN 사용자가 실행 가능한 것으로 생각하는 것보다 DVCS 워크 플로우에 훨씬 더 가까운 방식으로 작동하도록 SVN을 강제하고 있다는 사실이이 답변에 빠지지 않았다고 생각합니다. 본질적으로 그들은 이미 DVCS 사고 방식을 가지고 있으므로 근본적인 사고의 전환 이 필요하지 않습니다.
Mark Booth

좋은 지적 @ 마크. 이러한 소규모 팀에서는 대규모 팀을위한 많은 일반 규칙이 적용됩니다. 나는 여전히 속도상의 이유로 가치가 있다고 생각합니다.
Karl Bielefeldt

1

특별한 경우 DVCS로 전환하면 이점이 없습니다. 기존 시스템에 만족하고 필요한 모든 작업을 수행하므로 전환해야하는 이유는 무엇입니까? SVN은 여전히 ​​활발한 오픈 소스 프로젝트이며 hg 또는 git보다 모든 주요 IDE 및 개발 도구와 더 잘 통합되어 있습니다. 팀 규모와 프로젝트 수를 고려할 때 기존 도구가 제대로 작동 할 때 새 도구로 변환하는 데 시간을 내고 싶습니까?

DVCS없이 작동 할 수없는 개발자가있는 경우 hg 또는 git의 svn 게이트웨이를 지정하십시오. svn 저장소에 대한 체크인은 나머지 팀에서 사용하는 모든 절차와 프로세스를 준수해야한다는 점을 분명히하십시오. 이 방법의 또 다른 장점은 게이트웨이를 이미 사용하고있는 진정한 DVCS 열성 자들이 이제 옷장에서 나올 수 있다는 것입니다.


시간을내어 변경하고 싶습니까? 아니요, 특히 지난 2 년 동안 svn으로 만 전환 한 경우에는 그렇지 않습니다. 귀하의 의견에 감사드립니다.
Matt

1

많은 사람들이 DVCS 사용을 시작한 후에 채택한 워크 플로와 매우 유사한 워크 플로를 이미 사용하고있는 것 같습니다.

DVCS는 사용자의 관점에서 SVN에 비해 다음과 같은 중요한 이점을 제공합니다.

  • 리포지토리를 복제하면 많은 작업을 로컬에서 수행 할 수 있습니다.
    • 저장소 로그를 보면 svn 서버를 건드릴 필요가 없으므로 매우 빠를 수 있습니다 .
    • 마찬가지로 스위칭 브랜치에는 서버에 대한 액세스가 필요하지 않으며 로컬 클론도 필요하지 않습니다.
  • 브랜치는 히스토리를 통해 다양한 경로이므로 저장소는 모든 브랜치가 생성 한 모든 브랜치와 혼잡 하지 않습니다 (우리는 실제로 SVN에 릴리스 브랜치 만 있지만 branches디렉토리에는 더 이상 관련이없는 많은 하위 디렉토리가 있습니다).
    • git에서 브랜치가 다시 병합되고 참조가 삭제되면 해당 브랜치도 알 수 없습니다.
    • 의욕에서 당신의 선택의 여지가 중 (이 경우는 영구적으로 각각 변경 집합으로 인코딩 된) 지점의 이름을 지정하거나 조용히 것이다 무명 (위상) 지점 작성, 병합 이 때 역사를 merge에 D 다시 default( trunk)
  • SVN에서 가지의 가지가 너무 모호하여 유용하지 않습니다. 에서 git그리고 hg그들은 물론 단지 파입니다.
  • DVCS는 소프트웨어 개발이 DAG 라는 것을 이해합니다 . 즉, 병합 할 때 여러 부모가있는 변경 세트가 생깁니다. SVN (적어도 내가 사용한 버전)은 실제로 이것을 이해하지 못합니다.

마지막 시점에서

갈등은 갈등입니다. 코드를 이해하기에 충분히 영리하지 않으면 어떤 시스템이 대부분의 시간에 어떻게 그것을 얻을 수 있는지 알 수 없습니다.

사용하는 스위치에서 hg사용하는 전용 svn단독 다음 gitsvn은 병합이 나의 경험이었다 많은 무료로 간단하고 문제 hggitsvn그들이 함께있는 것보다 svn. svn(적어도 우리가 사용하는 버전) 과 병합 하면 훨씬 더 많은 충돌이 발생하며 수동으로 해결해야합니다.

SVN에서 병합이 더 어려운 이유 중 하나는 각 줄마다 다른 두 가지 옵션 만 제공하기 때문입니다.

  • 합류하려는 지점의 텍스트
  • 병합하려는 지점의 텍스트

DVCS에서 병합하면 일반적으로 세 번째 옵션이 표시됩니다.

  • 병합하려는 두 가지 공통 조상의 텍스트

이것이 얼마나 유익한 지 과소 평가하지 말고 단순한 양방향 diff보다 변경에 대한 훨씬 나은 컨텍스트를 제공합니다 .

대체로 시도해 볼 것을 제안합니다. 같은 도구를 사용 gitsvn하고 hgsubversion, 당신은 당신의 현재의 SVN의 repos로를 시도 할 수 있습니다 .

복제본을 처음 생성하는 것은 왕실의 PItA이지만 일단 완료하면 기존 CVCS로 DVCS의 기능을 최대한 활용할 수 있습니다.


1
SVN은 언급 한 경우에도 충돌을 일으키지 않습니다. 둘 다 같은 줄을 변경할 때만 나타납니다. 병합은 일반적으로 디렉토리 변경 병합을 처리하지 않기 때문에 svn에서 파일 이름 바꾸기 / 이동 또는 추가 / 삭제에서 더 큰 문제입니다. SVN 병합은 그 두 가지보다 더 많은 옵션을 제공합니다. 일반적으로 두 가지 변경 세트를 모두 유지하고 둘 다 삭제하지 않고 일반적으로 "그 다음에 내 것을 사용하십시오"를 사용합니다!
gbjbaanb

@gbjbaanb-내가 찾은 것이 아니기 때문에 SVN에 대한 내 경험을 검증했습니다 at least the version I've used. 내 이해는 최신 버전의 svn 공통 조상에 대해 이해하지만 그 경험이 없으며 동일한 문제를 가진 이전 버전의 svn을 실행하는 서버가 많이 있다고 생각합니다.
Mark Booth

덧붙여서, 나는 hg(그리고 거의 확실 git하지만 시도하지는 않았지만) 세 개의 클래스가있는 파일을 가져 와서 클래스가있는 세 개의 파일로 나눈 다음 나중에와 분기 사이의 변경 사항을 병합 할 수 있다는 사실을 좋아합니다 . 개별 클래스에 대한 변경 사항이 올바른 파일에 적용되도록 '결합 된'파일과 별도의 파일이있는 분기 순수한 마법. * 8 ')
Mark Booth

1
gbjbaanb가 정확합니다. SVN은 설명하는 시나리오에서 충돌이 없습니다. 이것을 자신에게 설명하는 것은 매우 쉽습니다.
Jeremy

@Jeremy @gbjaanb-편집 한 섹션이 더 잘 작동합니까? svn병합이 어떻게 작동 해야하는지 에 대해 논쟁하지 않을 것입니다 . svn명령 줄과 Eclipse에서 SVNKit에 대한 내 경험이 있습니다.이 업데이트에서는 단순히 업데이트를 가져 오는 경우 잘라내어 붙여 넣기를 통해 수동으로 해결 해야하는 '충돌'이 발생할 수 있습니다 ( '이 순서대로 두 가지 변경 사항을 모두 원합니다.'라고 쉽게 말할 수 없습니다.
Mark Booth

0

이러한 전환 후 주목할만한 중요한 변화가 있습니다. 분기를 훨씬 더 자주 전환하고 Subversion으로 감당할 수있는 것보다 더 자주 커밋합니다. 예를 들어, 여러 작은 기능 분기가 순서대로 구성되어 있으며 각 분기에 몇 달씩 비트를 추가하여 끊임없이 변화하는 트렁크에 순차적으로 모두 다시베이스를 만들 수 있습니다. 기능 분기가 병합되는 순서를 재정렬하는 것은 쉽지 않습니다.

그러나 실제로는 실제로 Subversion에서 멀어지지 않았습니다. 내 로컬 svn 클라이언트로 git을 사용하고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.