참고 : 현재 질문에 대한 답변 은 "편집" 을 참조하십시오.
우선 Joel Spolsky의 Subversion Re-education 을 읽으십시오 . 나는 당신의 질문 대부분이 거기에 대답 될 것이라고 생각합니다.
또 다른 추천, 힘내에 리누스 토발즈 (Linus Torvalds) '토론 : http://www.youtube.com/watch?v=4XpnKHJAok8 . 이 다른 질문도 대부분의 질문에 대답 할 수 있으며 매우 재미있는 질문입니다.
BTW, 제가 재밌는 점 : 브라이언 피츠 패트릭 (Brian Fitzpatrick)과 벤 콜린스-서스 먼 (Ben Collins-Sussman)조차도 서브 버전을 만든 최초의 제작자 중 한 사람은 수은보다 열등한 서브 버전 (그리고 일반적으로 DVCS)을 언급하는 구글 대화에서 "그것에 대해 미안하다"고 말했다.
이제 IMO와 일반적으로 팀 역학은 모든 DVCS와 함께보다 자연스럽게 발전하며 다음과 같은 사항을 암시하므로 오프라인 커밋이 가능하다는 이점이 있습니다.
- 서버와 연결에 의존하지 않으므로 시간이 더 빨라집니다.
- 인터넷 커밋 (또는 VPN)을 통해 커밋 할 수있는 장소에 종속되지 않습니다.
- 모든 사람은 서버뿐만 아니라 모든 것 (파일, 기록)의 백업을 가지고 있습니다. 누구나 서버가 될 수 있음을 의미합니다 .
- 다른 사람의 코드를 엉망 으로 만들지 않고 필요한 경우 강박 적으로 커밋 할 수 있습니다 . 커밋은 로컬입니다. 커밋하는 동안 서로의 발가락을 밟지 않습니다. 커밋만으로 다른 사람의 빌드 나 환경을 깨뜨리지 않습니다.
- "커밋 액세스"가없는 사람은 커밋 할 수 있으며 (DVCS에서 커밋하는 것은 코드 업로드를 암시하지 않기 때문에) 기여에 대한 장벽을 낮추고 변경 사항을 통합 자로 통합할지 여부를 결정할 수 있습니다.
- DVCS는 이것을 서브 버전에서 커밋 레이스 (Commit Races)로 만들어 의사 소통을 강요하지만 업무를 방해함으로써 자연스러운 의사 소통을 강화할 수 있습니다.
- 기고자는 팀을 구성하고 자체 병합을 처리 할 수있어 결국 통합 자에 대한 작업이 줄어 듭니다.
- 기고자들은 다른 사람들에게 영향을 미치지 않고 자신의 지점을 가질 수 있습니다 (그러나 필요한 경우 공유 할 수는 있습니다).
당신의 요점에 관하여 :
- DVCSland에는 지옥 합병이 존재하지 않습니다. 처리 할 필요가 없습니다. 다음 요점을 참조하십시오 .
- DVCS에서 모든 사람은 "브랜치"를 나타냅니다. 즉, 변경 사항을 가져올 때마다 병합됩니다. 명명 된 지점은 또 다른 것입니다.
- 원하는 경우 지속적인 통합을 계속 사용할 수 있습니다. IMHO가 필요하지 않은 이유는 무엇입니까? 왜 복잡성을 더해야합니까? 문화 / 정책의 일부로 테스트를 유지하십시오.
- Mercurial은 어떤 경우에는 빠르며, git은 다른 경우에는 빠릅니다. 실제로는 일반적으로 DVCS가 아니라 특정 구현 AFAIK에 달려 있습니다.
- 모든 사람은 당신뿐만 아니라 항상 완전한 프로젝트를 가질 것입니다. 분산 된 것은 로컬에서 커밋 / 업데이트 할 수있는 것과 관련이 있으며, 컴퓨터 외부에서 공유 / 취득하는 것을 푸시 / 풀링이라고합니다.
- 다시 Subversion Re-education을 읽으십시오. DVCS는 더 쉽고 자연 스럽지만 다르지만, cvs / svn === 모든 버전의 기본이라고 생각하지 마십시오.
DVCS 로의 마이그레이션을 전파하는 데 도움을주기 위해 Joomla 프로젝트에 몇 가지 문서를 제공했으며 여기에서 중앙 집중식과 분산 형 을 나타내는 다이어그램을 만들었습니다.
중앙 집중식
일반적인 배포
최대한으로 배포
다이어그램에는 여전히 "중앙 집중식 저장소"가 있으며 이는 "중앙 집중식 저장소"가 단지 저장소이기 때문에 중앙 집중식 버전 관리 팬이 가장 좋아하는 논쟁 중 하나입니다. 모두 동의합니다 (예 : 공식 github repo)하지만 언제든지 필요할 수 있습니다.
다음은 DVCS를 사용하는 오픈 소스 프로젝트 (예 : 대규모 협업 프로젝트)의 일반적인 워크 플로우입니다.
Bitbucket.org 는 수은과 다소 비슷한 깃 허브 입니다. 팀이 5보다 작 으면 무료로 사용할 수 있습니다.
DVCS 사용을 확신 할 수있는 가장 좋은 방법은 DVCS를 시험해 보는 것입니다. svn / cvs를 사용해 본 경험이있는 모든 DVCS 개발자는 그 가치가 있으며 그것이 없이도 어떻게 살아남 았는지 모른다는 것을 알게 될 것입니다.
편집 : 두 번째 편집에 대답하기 위해 DVCS를 사용하면 다른 워크 플로우가 있음을 반복 할 수 있습니다. 모범 사례로 인해 시도하지 말아야 할 이유를 찾지 않는 것이 좋습니다. 사람들은 OOP가 아니라고 주장 할 때 느낌이 듭니다. 패러다임 XYZ로 항상하는 일로 복잡한 디자인 패턴을 해결할 수 있기 때문에 필요합니다. 어쨌든 혜택을 누릴 수 있습니다.
사용해보십시오. "개인 지점"에서 작업하는 것이 실제로 더 나은 옵션 인 방법을 알 수 있습니다. 마지막이 참인 이유에 대해 내가 알 수있는 한 가지 이유는 커밋에 대한 두려움을 잃어 버릴 수 있기 때문 입니다.
"지옥 병합"과 관련하여 "우리가 실험하지 않는 한"이라고 말하면 "실험중인 v2.0에서 동시에 실험 + maintenanceg + 작업 중일지라도"라고 말합니다 . 앞서 말했듯이 지옥을 합병하는 것은 존재하지 않습니다.
- 커밋 할 때마다 이름없는 브랜치를 생성하고 변경 사항이 다른 사람의 변경 사항을 충족 할 때마다 자연스럽게 병합됩니다.
- DVCS는 각 커밋마다 더 많은 메타 데이터를 수집하므로 병합하는 동안 충돌이 줄어 듭니다. 따라서 "지능형 병합"이라고 할 수도 있습니다.
- 병합 충돌에 부딪 치면 다음을 사용할 수 있습니다.
또한 프로젝트 크기는 중요하지 않습니다. Subversion에서 전환했을 때 실제로 혼자 작업하는 동안 실제로 이점을 보았습니다. 모든 것이 올바르게 느껴졌습니다. 체인지 (개정,하지만 코드베이스의 상태에서 고립 당신이 커밋을 포함하는 특정 파일에 대한 변경 사항의 특정 세트 정확히)는, 당신은 당신이 파일의 특정 그룹에하던 일을 의미 정확히 시각화하자 전체 코드베이스가 아닙니다.
변경 세트 작동 방식 및 성능 향상 나는 github 네트워크 그래프에 설명 된 svn의 mootools 프로젝트 스위치 .
전에
후
당신이보고있는 것은 개발자가 다른 사람의 코드를 손상시킬 염려없이 커밋하면서 자신의 작업에 집중할 수 있다는 것입니다 .DVCS : 먼저 커밋 한 다음 푸시 / 풀 한 다음 업데이트 한 후 다른 사람의 코드를 깨뜨릴 염려가 있습니다. ) 그러나 병합이 더 똑똑하기 때문에 병합 충돌이 발생하더라도 (종종 드물지만) 수정하는 데 5 분 이하 만 소요됩니다.
당신에게 추천하는 것은 수은 / 깃털 사용법을 알고있는 사람을 찾아서 직접 설명해주는 것입니다. 데스크톱 및 비트 버킷 계정에서 머큐리얼을 사용하는 동안 명령 행에서 일부 친구들과 약 30 분을 머 금고 병합하는 방법을 보여주고, 어리석은 시간에 문제를 해결하는 방법을 알기 위해 갈등을 만들어 보았습니다. 그들은 DVCS의 진정한 힘입니다.
마지막으로 Windows 사람들과 함께 작업하는 경우 git + github 대신 mercurial + bitbucket을 사용하는 것이 좋습니다. Mercurial도 조금 더 간단하지만 git은 좀 더 복잡한 저장소 관리 (예 : git rebase )에 더 강력합니다 .
몇 가지 추가 권장 사항 :