2009-02-05 3 views
3

분산 된 DVCS는 어떻게 작동합니까? 중앙 서버가 없다면 어떻게 개발자 머신이 다른 개발자 머신의 저장소와 저장소를 알고 동기화 할 수 있습니까? 변경 사항은 어떻게 병합됩니까? 중앙 서버가 없어서 시스템이 각 저장소에 다른 개정 번호를 갖게 할 수도 있습니다. 그리고 충돌 해결 방법은 어떻게 처리됩니까?분산 개정 관리 시스템의 분산 된 동작은 어떻게 작동합니까?

답변

2

,하지만 이론은 대부분의 다른 적용 생각 : 나는 그에게 연기 할 수 있습니다 (특히, 귀하의 질문에 대한 원격 워크 플로우 부분은 그것으로 약 18 분 시작) 시스템 ...

분산 VCS는 모든 커밋에서 이전 커밋에 대한 포인터를 유지함으로써 DNA의 일부로 분기 및 병합을 처리하도록 설계되었으므로 모든 변경 사항을 공통 조상으로 추적 할 수 있습니다.

개정판 "numbers"는 커밋을 나타내는 데 사용되지 않습니다. 분명히, 그 경우에는 하나 이상의 시퀀스가있을 것입니다 ... Git의 경우, 커밋을 고유하게 식별하는 포인터 "key"는 SHA1 해시입니다. 전체 배열을 순차적으로 만드는 유일한 방법은 각 커밋의 부모를 참조하는 포인터의 그래프입니다. 실제로

는, 개발자는 자신의 로컬 복사본에 자신의 작품을 커밋하고 다른 사람과 공유하는 시간을 때, 그들은 세 가지 방법으로 그렇게 :

  • 변경 사항을 직접 끌어 다른 개발자 질문 중앙 위치에 대한 변경 사항은 다른 사람들이

에서 풀 수있는 다른 개발자의 사본

  • 푸시에 직접가
  • 푸시에서이 정말 t에서 같은 일이다 그는 단지 diff를 합병하기 때문에 끝납니다. 세 번째 시나리오에서 중앙 위치는 단지 프록시 역할을합니다. 동일한 위치는 프록시없이 작동 할 수 있습니다.

    시스템은 사용자가 선택한대로 중앙 집중화 또는 분산화 될 수 있습니다. 대부분의 프로젝트는 실제적인 이유에서 어느 정도 집중화되어 있지만 포크는 언제든지 새로운 중앙 저장소가되거나 개발자가 임의로 코드를 교 체할 수 있습니다.

    커밋을 가져 와서 자신의 복사본으로 병합하면 상위 업스트림 저장소와 공유하는 공통 상위 항목 위에 적용됩니다. 충돌이 있으면 충돌이 발생한 커밋 단계에서 병합 프로세스가 일시 중지되고 남아있는 커밋을 계속 적용하기 전에 문제를 해결할 것인지 묻는 메시지가 표시됩니다.

    대부분의 병합은 자동으로 발생하지만 충돌이있는 경우 대부분 해결하기가 쉽지 않습니다. 좋은 점은 여러 커밋에 걸친 갈등으로 끝나지 않는다는 것입니다. 역사의 한가운데 일시 중지되어 더 작고 논리적 인 덩어리로 처리 할 수 ​​있기 때문에 해결하기가 훨씬 쉽습니다.

  • +0

    SHA1 해시를 사용하여 커밋을 식별하지 않습니까? – Shoan

    +0

    감사합니다. –

    2

    작년 RailsConf에서 발표 된 Scott Chacon의 프레젠테이션은 대단했습니다. 제가 지금까지 보아온 최고의 계획과 정보 전달 중 하나입니다. 나는 힘내에 부분 해요

    RailsConf Git Talk

    관련 문제