답변:
"트렁크"(이제 "마스터")를 갖게되고 "브랜치"(이제 "헤드")를 갖게되고 "태그"(여전히 "태그")를 갖게 되지만 폴더는되지 않습니다 . " refs ", 리포지토리 내부의 별도 네임 스페이스에있는 개정판의 레이블입니다.
Subversion과 Git에는 분기를 수행하는 다른 방법이 있습니다. 기본 서브 버전 모델은 단일 글로벌 타임 라인이있는 디렉토리 트리를 갖고 분기하려는 경우 하위 디렉토리를 다른 디렉토리에 복사합니다.
반면에 Git에는 부모를 정의하는 개정판이있는 디렉토리 트리가 있지만 각 개정판에는 여러 개의 상위 (병합) 및 여러 개의 하위 (분기)가있을 수 있습니다. 따라서 브랜치 용 디렉토리를 가지지 않고 독립적으로 작성된 개정을 얻습니다. "refs"는 주어진 "branch"에 대한 최신 개정과 관련된 이름 일뿐입니다.
이 차이점은 분산 버전 제어의 기본입니다. Git (및 기타 분산 시스템)에는 히스토리를 선형으로 유지할 수있는 중앙 권한이 없으므로 서로에 대해 알지 않고도 여러 저장소에서 독립적으로 개정을 작성할 수 있으며 시스템은이를 수용해야합니다. 일반화로 인해 분기 및 병합이 훨씬 쉬워졌습니다.
Git에서 개정판은 어떤 브랜치에도 없습니다. 그들은 단지 있고 가지가 그들을 포함합니다. 그러나 지점이 합쳐 지거나 죽은 골목으로 판명되면 해당 지점을 가리키는 "ref"를 삭제하고 완전히 잊어 버릴 수 있습니다 git gc. 이것은 당신이 더 이상 그들이 무엇에 관한 것인지 기억하지 않는 오래된 실험에서 늪에 빠지지 않도록 도와줍니다.
Git을 SVN에서 2D에서 볼 수있는 것과 동일한 데이터의 3D보기로 생각하십시오. 즉 SVN을 사용하면 루트를 분기하고 트리에서 새 폴더로 표시된 사본으로 나타납니다. Git을 사용하면 분기 할 때 기존 트리의 상단에 "레이어"로 표시되는 사본으로 나타납니다. 일단 차이점을 개념화하는 것이 쉽다는 것을 알게되면.
SVN을 사용하면 여전히 Git과 동일한 방식으로 작업 할 수 있습니다. 분기 간 전환은 코드베이스의 단일보기를 분기보기로 대체합니다. 이는 svn 스위치를 사용하든 git checkout을 사용하든 적용됩니다.
분명히 분기를 폴더 위치로 체크 아웃하여 SVN에서 분기의 사본을 얻을 수 있습니다. 이는 git repo를 디스크의 다른 위치로 복제하는 것과 같습니다.
태그에도 동일하게 적용됩니다-git 개정판에 레이블을 지정하거나 릴리스에 대한 브랜치를 만들 수 있습니다. SVN 태그는 브랜치와 동일하며 '태그'라는 유일한 규칙입니다. SVN 저장소의 레이블을 지정 (글로벌 번호 기록)하여 릴리스의 스냅 샷도 얻을 수 있습니다.
git과 svn의 차이점은 소스 제어의 기본이 아니라 체크인 및 체크 아웃이 발생하는 방식과 더 관련이 있습니다. 코드의 뷰는 다를 수 있습니다 (git에 브랜치를 포함하는 코드 트리의 단일 뷰는 절대 볼 수 없으며 SVN에서 부분 저장소를 분기 할 수는 있지만 궁극적으로 사소한 차이입니다)