2014-10-08 5 views
1

Git과 SVN 그래프의 차이점을 이해하려고합니다. 나는 망할 놈의 그래프가 DAGGit 내역 그래프와 SVN 내역 그래프

것을 알고하지만 비교할 때이 두 :

예 망할 놈의 역사 그래프 : http://gugod.org/2009/12/12/3389620_29acb2fe86d3e03e7f8c665c4225c454.jpg

예 SVN의 역사 그래프 : http://svn-graph-branches.googlecode.com/svn/wiki/nxt-python-r222.svg

정말하지 않습니다 그 지식을 적용하는 법을 아십시오 - 저와 꽤 비슷하게 보입니다. 여기

는 : 2 세대 도구 라인

으로 저장소의 역사를 모델링하는 경향이하지만 그건 정말 SVN 위의에 맞지 않는 :

http://ericsink.com/vcbe/html/directed_acyclic_graphs.html

이 말한다 역사 그래프의 예 - SVN이 2 세대 도구가 아니거나 기사가 잘못되었습니다. 위의 내용을 명확히하는 데 도움을 줄 수 있습니까?

+0

SVN은 2 세대가 아닙니다 :) –

+0

SVN 그래프도 DAG라고 말하는 것이 안전하다고 생각합니다. SVN 워크 플로는 일반적으로 많은 분기/병합/등을 필요로하지 않기 때문에 대부분의 경우 일반적으로 DAG가됩니다. – twalberg

+0

그래도 SVN과 Git이 모두 DAG로 구현 된 경우 유일한 차이점은 병합, 분기 등이 구현됩니까? – u123

답변

2

차이점은 SVN에서 모든 사람은 항상 동일한 커밋 시퀀스를 가짐을 의미합니다. SVN에서, 완전히 최신의 작업 카피는 정의 된 것으로, 노드의 순서가 항상 똑같습니다.

Git에서 저장소는 다른 저장소와 관련하여 완전히 "최신"일 수 있지만 세 번째 저장소는 공유 기록의 특정 지점 이후 완전히 다른 노드 집합을 가질 수 있습니다.

다른 말로하면 SVN에서 버전 5를 생성하고 그 바로 앞에 커밋이 버전 4 인 경우 프로젝트의 모든 사람이 동일한 버전 5를 봐야합니다. 3 버전 4 이전에 왔고 아무도 병합해야 할 버전 5 '을 가질 수 없습니다. 순서는 항상 모든 작업 카피, 3-4-5-5 '에있을 것입니다.

그러나 Git이나 Mercurial과 같은 분산 도구에서 397afeg815 버전을 생성하면 바로 그 버전이 연대순으로 8290e7ab8f가되어 버전 839eabcdef7이 떨어질 수있는 곳을 알려주지 않으며 중국에있는 일부 사람이 커밋 된 버전 인 9876543231abc도 8290e7ab8f와 정확히 일치합니다. 나뭇 가지가 여기에 있는데, 선형이 아닙니다. 부모 - 자식 관계를 넘어서는 정의 된 순서는 없습니다. 모든 커밋이 정확히 하나의 부모를 가지고 있고 하나의 자식 (같은 브랜치에서)을 가진 SVN과는 달리, Git이나 Mercurial에서는 커밋이 동일한 브랜치에 여러 부모와 자식을 가질 수 있습니다.

SVN이 분기 할 때 의도적 인 선택이며 모두가 동일한 지점에서 분기를 볼 것이며 어떤 트렁크가 앞으로 발전 할 것인지는 의문의 여지가 없습니다. Git과 Mercurial 및 다른 유사한 시스템은 잠재적으로 매번 커밋 할 때마다 새로운 분기를 만들고, 주어진 커밋이 "트렁크"에 있는지 여부는 전적으로 팀의 개발 프로세스 또는 사용자가 묻는 대상에 따라 결정됩니다.

더 설명

힘내이나 의욕 같은 사실 DAG의 차이에 대한 편집 및 SVN과 같은 "선형"역사는 당신이 맞는 볼 당신이 망할 놈의 DAG에있는 노드를 재 배열 할 수있다. 당신은 여전히 ​​같은 역사가 있습니다.사실 어떤 순서로 끌어 오거나 커밋/푸시하는지에 따라 실제로는 자신의 리포지토리에서 여러 가지 DAG 순열을 볼 수 있습니다. 노드의 순서는 중요하지 않으며 상위 - 하위 관계 만 중요합니다.

SVN의 역사가 다릅니다. SVN 트리를 보는 유일한 방법이 있습니다. 버전 2는 항상 버전 1을 따른다. 버전 3은 항상 버전 2를 따른다. "선형"히스토리에 어떤 일이 일어 났는지는 의심의 여지가 없다. 노드의 순서는 변경할 수 없습니다. SVN의 경우 그것은 분기 경계를 넘어서기도합니다.

+0

hm 나는 당신의 요지를 이해하지만 더 추상적이거나 덜 상세한 설명을 원했을 것이라고 생각합니다 - 설명이 명확하지 않기 때문에 커밋의 특정 순서를 사용하십시오. Git/DAG 부분과 SVN의 차이점을 이해하면 간단하고 이해하기 쉬운 간결한 정의/그림을 찾기가 어렵다는 것이 이상하다고 생각합니다. – u123

+0

확인. 연결된 두 그림을 다시보십시오. SVN 그림은 다양한 지점에서부터 시작하는 많은 수의 브랜치를 보여줍니다.하지만 모두 모두 별개입니다. 각 지점에는 정확히 한 줄의 개발 단계가 있습니다. 가지가 태어나고 죽을 수도 있지만 직선적으로 진행되며 모든 사용자는 동일한 그래프를 보게됩니다. 힘내 그림은 또한 여러 지점에서 시작하는 지점을 보여 주지만,이 지점들은 서로 병합되고, 서로 떨어져 분기하고, 서로 병합하고 엉망으로 엉망이된다. 또한 그래프의보기는 하나뿐입니다. 모든 사람은 다른 것을 볼 수 있습니다. – Ben