Git 저장소의 구조


15

이것이 중복이라면 죄송합니다.

우리는 힘내로 이사하고 있습니다. Subversion에서는 \ trunk, \ branches 및 \ tags 폴더를 사용했습니다.

Git을 사용하면 브랜치 간 전환이 작업 디렉토리의 내용을 대체하므로 작업에 사용 된 방식이 Git에 적용되지 않는다고 가정 할 수 있습니까?

내 생각에 아마도 gitignore와 readme.txt가있는 repo 폴더가 있고 repo를 구성하는 프로젝트의 폴더가있을 것입니다.

답변:


15

"트렁크"(이제 "마스터")를 갖게되고 "브랜치"(이제 "헤드")를 갖게되고 "태그"(여전히 "태그")를 갖게 되지만 폴더는되지 않습니다 . " refs ", 리포지토리 내부의 별도 네임 스페이스에있는 개정판의 레이블입니다.

Subversion과 Git에는 분기를 수행하는 다른 방법이 있습니다. 기본 서브 버전 모델은 단일 글로벌 타임 라인이있는 디렉토리 트리를 갖고 분기하려는 경우 하위 디렉토리를 다른 디렉토리에 복사합니다.

반면에 Git에는 부모를 정의하는 개정판이있는 디렉토리 트리가 있지만 각 개정판에는 여러 개의 상위 (병합) 및 여러 개의 하위 (분기)가있을 수 있습니다. 따라서 브랜치 용 디렉토리를 가지지 않고 독립적으로 작성된 개정을 얻습니다. "refs"는 주어진 "branch"에 대한 최신 개정과 관련된 이름 일뿐입니다.

이 차이점은 분산 버전 제어의 기본입니다. Git (및 기타 분산 시스템)에는 히스토리를 선형으로 유지할 수있는 중앙 권한이 없으므로 서로에 대해 알지 않고도 여러 저장소에서 독립적으로 개정을 작성할 수 있으며 시스템은이를 수용해야합니다. 일반화로 인해 분기 및 병합이 훨씬 쉬워졌습니다.

Git에서 개정판은 어떤 브랜치에도 없습니다. 그들은 단지 있고 가지가 그들을 포함합니다. 그러나 지점이 합쳐 지거나 죽은 골목으로 판명되면 해당 지점을 가리키는 "ref"를 삭제하고 완전히 잊어 버릴 수 있습니다 git gc. 이것은 당신이 더 이상 그들이 무엇에 관한 것인지 기억하지 않는 오래된 실험에서 늪에 빠지지 않도록 도와줍니다.


멋있는. 태그, 분기 및 기타 폴더 넌센스가 필요하지 않습니다. 아름다운.
Luke Puplett

2
@LukePuplett : Subversion의 브랜칭 방법은 다소 독특합니다. 그것은 Perforce에서 나 왔으며 그것이 유일하게 다른 버전 제어 시스템이라고 생각합니다. 서브 버전이 브랜치가 무엇인지 명확하게 구별하지 못한다는 사실은 병합 알고리즘을 크게 복잡하게 만듭니다. 약간의 융통성을 제공하지만 3 방향 병합으로 융통성을 실제로 지원할 수 없으므로 코너 사례를 이해하기가 어렵습니다.
Jan Hudec

SVV의 영적 전신 인 CVS조차도 (이상한) 가지와 태그가 실제로 디렉토리 접근 방식을 사용하지 않았습니다. 나는 CVS가 분기를 잘 수행했다고 말하지는 않지만 적어도 디렉토리가 아닌 "적절한"개념을 갖는 곳이다.
Joachim Sauer

@JoachimSauer : CVS가 Subversion의 영적인 선행자 인지 잘 모르겠습니다 . 그들은 "더 나은 CVS"를 만들기위한 임무를 설정했지만 주로 Perforce의 개념을 취했습니다.
Jan Hudec

@ JanHudec : 그것은 Perforce에 대해 잘 모릅니다. 내가 의미하는 바는 바로 그 사명입니다. CVS의 훌륭한 후계자가 되십시오.
Joachim Sauer

3

Git을 SVN에서 2D에서 볼 수있는 것과 동일한 데이터의 3D보기로 생각하십시오. 즉 SVN을 사용하면 루트를 분기하고 트리에서 새 폴더로 표시된 사본으로 나타납니다. Git을 사용하면 분기 할 때 기존 트리의 상단에 "레이어"로 표시되는 사본으로 나타납니다. 일단 차이점을 개념화하는 것이 쉽다는 것을 알게되면.

SVN을 사용하면 여전히 Git과 동일한 방식으로 작업 할 수 있습니다. 분기 간 전환은 코드베이스의 단일보기를 분기보기로 대체합니다. 이는 svn 스위치를 사용하든 git checkout을 사용하든 적용됩니다.

분명히 분기를 폴더 위치로 체크 아웃하여 SVN에서 분기의 사본을 얻을 수 있습니다. 이는 git repo를 디스크의 다른 위치로 복제하는 것과 같습니다.

태그에도 동일하게 적용됩니다-git 개정판에 레이블을 지정하거나 릴리스에 대한 브랜치를 만들 수 있습니다. SVN 태그는 브랜치와 동일하며 '태그'라는 유일한 규칙입니다. SVN 저장소의 레이블을 지정 (글로벌 번호 기록)하여 릴리스의 스냅 샷도 얻을 수 있습니다.

git과 svn의 차이점은 소스 제어의 기본이 아니라 체크인 및 체크 아웃이 발생하는 방식과 더 관련이 있습니다. 코드의 뷰는 다를 수 있습니다 (git에 브랜치를 포함하는 코드 트리의 단일 뷰는 절대 볼 수 없으며 SVN에서 부분 저장소를 분기 할 수는 있지만 궁극적으로 사소한 차이입니다)

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