source

베어 저장소와 비베어 저장소의 실질적인 차이점은 무엇입니까?

ittop 2023. 5. 17. 23:27
반응형

베어 저장소와 비베어 저장소의 실질적인 차이점은 무엇입니까?

Git에 있는 기본 저장소 및 기본 저장소에 대해 읽고 있습니다.저는 그것들 사이의 차이점과 왜 제가 맨 저장소로 "밀어야" 하는지 (이론적으로) 잘 이해하지 못했습니다.이게 조건이다:

현재 저만 3대의 컴퓨터로 프로젝트를 진행하고 있는데 나중에 더 많은 사람들이 참여할 예정이라 버전 관리를 위해 Git을 사용하고 있습니다.저는 모든 컴퓨터에서 기본 레포를 복제하고, 그 중 하나에서 수정 작업을 마치면 기본 레포에 변경 사항을 적용하고 푸시합니다.제가 읽은 바로는 맨 저장소에는 "작업 트리"가 없기 때문에 맨 저장소를 복제하면 "작업 트리"가 없습니다.

작업 트리에는 프로젝트의 커밋 정보, 지점 등이 저장되어 있을 것으로 예상됩니다.그것은 맨 레포에 나타나지 않을 것입니다.따라서 작업 트리로 repo에 커밋을 "푸시"하는 것이 더 나은 것 같습니다.

그렇다면, 왜가 맨 저장소를 사용해야 하고 사용하지 말아야 합니까? 실질적인 차이는 무엇입니까?그것은 프로젝트에 참여하는 더 많은 사람들에게 도움이 되지 않을 것이라고 생각합니다.

이런 종류의 일에 대한 당신의 방법은 무엇입니까?제안?

베어 저장소와 비베어 저장소의 또 다른 차이점은 베어 저장소에 기본 원격 오리진 저장소가 없다는 것입니다.

~/Projects$ git clone --bare test bare
Initialized empty Git repository in /home/derek/Projects/bare/
~/Projects$ cd bare
~/Projects/bare$ git branch -a
* master
~/Projects/bare$ cd ..
~/Projects$ git clone test non-bare
Initialized empty Git repository in /home/derek/Projects/non-bare/.git/
~/Projects$ cd non-bare
~/Projects/non-bare$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

의 설명서 페이지에서:

또한 원격의 분기 헤드는 refs/remote/origin/에 매핑하지 않고 해당 로컬 분기 헤드에 직접 복사됩니다.이 옵션을 사용하면 원격 추적 분기나 관련 구성 변수가 생성되지 않습니다.

Git는 베어 저장소를 생성할 때 베어 저장소가 여러 원격 사용자의 오리진 저장소 역할을 할 것이라고 가정하므로 기본 원격 오리진은 생성되지 않습니다.이것이 의미하는 것은 기본적인 것입니다.git pull그리고.git pushGit는 작업 공간이 없으면 기본 저장소에 변경 사항을 적용할 의도가 없다고 가정하기 때문에 운영이 작동하지 않습니다.

~/Projects/bare$ git push
fatal: No destination configured to push to.
~/Projects/bare$ git pull
fatal: /usr/lib/git-core/git-pull cannot be used without a working tree.
~/Projects/bare$ 

5년이나 늦었지만 아무도 대답하지 않았습니다.

그렇다면, 왜 제가 맨 저장소를 사용해야 하고 왜 사용하지 말아야 합니까?실질적인 차이는 무엇입니까?그것은 프로젝트에 참여하는 더 많은 사람들에게 도움이 되지 않을 것이라고 생각합니다.

이런 종류의 일에 대한 당신의 방법은 무엇입니까?제안?

Loeliger/Mcullough 책(978-1-449-31638-9, p196/7)에서 직접 인용하기:

맨 저장소는 거의 쓸모가 없어 보이지만, 공동 개발을 위한 권위 있는 초점 역할을 하는 것이 중요합니다. 기타개자clone그리고.fetch 및 기저에서소에서.push개발자가 있는 ...push변경 사항, 맨몸이어야 합니다.사실상, 이는 게시된 리포지토리를 공개해야 하는 보다 일반적인 모범 사례의 특별한 경우입니다.

Bare Git 저장소와 Non-Bare Git 저장소를 구분하는 것은 인위적이며 오해의 소지가 있습니다. 워크스페이스는 저장소의 일부가 아니며 리포지토리에는 워크스페이스가 필요하지 않기 때문입니다.엄밀히 말하면 Git 저장소에는 저장소의 상태를 설명하는 개체가 포함됩니다.할 수 만에 합니다..git작업영역의 최상위 디렉토리에 있는 디렉토리입니다.작업영역은 리포지토리의 특정 커밋을 나타내는 디렉터리 트리이지만 모든 디렉터리에 존재하거나 존재하지 않을 수 있습니다. 환수변$GIT_DIR워크스페이스를 원본 저장소에 연결합니다.

Git 명령 및 둘 다 옵션이 있습니다.--bare초기 작업 공간 없이 리포지토리를 생성합니다.Git이 작업 공간과 저장소에 대한 별개의, 그러나 관련된 두 개념을 혼동한 다음 두 개념을 분리하기 위해 bare라는 혼란스러운 용어를 사용하는 것은 유감스러운 일입니다.

베어 리포지토리는 .git 폴더 자체에 불과합니다. 즉, 베어 리포지토리의 내용은 로컬 작업 리포지토리 내의 .git 폴더의 내용과 동일합니다.

  • 원격 서버의 기본 리포지토리를 사용하여 여러 명의 기여자가 작업을 진행할 수 있습니다.
  • Non-bare - 작업 트리가 있는 트리는 프로젝트의 각 기여자의 로컬 컴퓨터에서 의미가 있습니다.

기본/비배어 Gitrepo에는 다음 두 가지 상태가 포함됩니다.

  1. 저장소에 있는 모든 파일의 스냅샷(Git 전문 용어로 "작업 트리"가 의미함)
  2. 저장소에 있었던 모든 파일에 대한 모든 변경 내역(이 모든 내용을 포함하는 Git 전문 용어는 없는 것 같습니다)

스냅샷은 코드 파일, 빌드 파일, 도우미 스크립트 및 기타 Git로 버전을 설정하는 모든 것과 같은 프로젝트라고 생각할 수 있습니다.

기록은 다른 커밋을 체크아웃하고 해당 커밋이 추가되었을 때 저장소에 있는 파일의 전체 스냅샷을 가져올 수 있는 상태입니다.그것은 Git 내부에 있는 많은 데이터 구조들로 구성되어 있습니다. 여러분이 직접적으로 상호작용한 적은 없을 것입니다.중요한 것은 기록이 메타데이터만 저장하는 것이 아니라(예: "U 사용자가 Commit C"의 일부로 F 파일에 이렇게 많은 줄을 추가했다), 데이터도 저장한다는 것입니다(예: "U 사용자가 F 파일에 정확한 줄을 추가했다").

기본 저장소의 핵심 아이디어는 스냅샷을 실제로 보유할 필요가 없다는 것입니다.Git는 코드와 상호 작용하기를 원하는 사람 및 기타 Git 이외의 프로세스에 편리하기 때문에 스냅샷을 보관하지만 스냅샷은 이미 기록에 있는 복제 상태일 뿐입니다.

베어 저장소는 스냅샷이 없는 Git 저장소입니다.그것은 단지 역사를 저장할 뿐입니다.

왜 이런 걸 원하죠?Git만 사용하여 파일과 상호 작용할 경우(즉, 파일을 직접 편집하거나 실행 파일을 빌드하는 데 사용하지 않을 경우) 스냅샷 주변에 보관하지 않음으로써 공간을 절약할 수 있습니다.특히 어딘가의 서버에서 중앙 집중식 버전의 리포를 유지하고 있는 경우(즉, 기본적으로 자신의 GitHub를 호스팅하는 경우), 해당 서버에는 기본 리포가 있어야 합니다(단, 스냅샷을 편집하기 위해 로컬 컴퓨터에서 기본 리포가 아닌 리포를 사용합니다).

bare repos와 또 다른 예제 사용 사례에 대한 보다 심층적인 설명이 필요하다면 여기에 블로그 게시물을 작성했습니다. https://stegosaurusdormant.com/bare-git-repo/

비어 있는 리포지토리에는 체크아웃된 작업 트리가 있습니다.작업 트리는 저장소의 상태(분기, 태그 등)에 대한 정보를 저장하지 않으며, 오히려 작업 트리는 저장소의 실제 파일을 표현한 것일 뿐이므로 파일에 대한 작업(편집 등)을 수행할 수 있습니다.

기본 저장소는 다음과 같은 이점이 있습니다.

  • 디스크 사용량 감소
  • 원격 푸시와 관련된 문제 감소(동기화에서 벗어나거나 충돌하는 변경 사항이 있는 작업 트리가 없기 때문)

Non Bare 리포지토리를 사용하면 새 커밋을 만들어 변경 사항을 작업 트리에 캡처할 수 있습니다.

기본 리포지토리는 다른 리포지토리에서 변경 사항을 전송하는 경우에만 변경됩니다.

저는 확실히 Git "전문가"가 아닙니다.저는 한동안 TortooGit을 사용했는데, TortooGit을 만들 때마다 "맨날" 레포를 만들고 싶은지 물었을 때 무슨 말인지 궁금했습니다.저는 이 튜토리얼인 https://www.atlassian.com/git/tutorials/setting-up-a-repository/git-init 을 읽고 있었고, 이 튜토리얼은 문제를 다루지만, 저는 여전히 그 개념을 잘 이해하지 못했습니다.이것은 많은 도움이 되었습니다: http://bitflop.com/tutorials/git-bare-vs-non-bare-repositories.html .자, 첫 번째 것도 말이 됩니다!

이러한 소스에 따르면, 간단히 말해서, 배포 지점을 설정할 서버에서 "베어" 레포가 사용됩니다.로컬 컴퓨터에서 사용할 수 없습니다.일반적으로 커밋을 로컬 시스템에서 원격 서버의 맨 레포로 푸시하고, 사용자 및/또는 다른 사용자가 맨 레포에서 로컬 시스템으로 풀합니다.GitHub, Assembla 등의 원격 스토리지/배포는 "베어" 저장소가 생성되는 예입니다.당신이 당신 자신의 유사한 "공유 센터"를 설립한다면 당신은 그것을 직접 만들 것입니다.

이것은 새로운 답변은 아니지만, 위의 답변의 다른 측면을 이해하는 데 도움이 되었습니다(그리고 논평하기에는 너무 많습니다).

Git Bash를 사용하여 다음을 시도하십시오.

me@pc MINGW64 /c/Test
$ ls -al
total 16
drwxr-xr-x 1 myid 1049089 0 Apr  1 11:35 ./
drwxr-xr-x 1 myid 1049089 0 Apr  1 11:11 ../

me@pc MINGW64 /c/Test
$ git init
Initialized empty Git repository in C:/Test/.git/

me@pc MINGW64 /c/Test (master)
$ ls -al
total 20
drwxr-xr-x 1 myid 1049089 0 Apr  1 11:35 ./
drwxr-xr-x 1 myid 1049089 0 Apr  1 11:11 ../
drwxr-xr-x 1 myid 1049089 0 Apr  1 11:35 .git/

me@pc MINGW64 /c/Test (master)
$ cd .git

me@pc MINGW64 /c/Test/.git (GIT_DIR!)
$ ls -al
total 15
drwxr-xr-x 1 myid 1049089   0 Apr  1 11:35 ./
drwxr-xr-x 1 myid 1049089   0 Apr  1 11:35 ../
-rw-r--r-- 1 myid 1049089 130 Apr  1 11:35 config
-rw-r--r-- 1 myid 1049089  73 Apr  1 11:35 description
-rw-r--r-- 1 myid 1049089  23 Apr  1 11:35 HEAD
drwxr-xr-x 1 myid 1049089   0 Apr  1 11:35 hooks/
drwxr-xr-x 1 myid 1049089   0 Apr  1 11:35 info/
drwxr-xr-x 1 myid 1049089   0 Apr  1 11:35 objects/
drwxr-xr-x 1 myid 1049089   0 Apr  1 11:35 refs/

마찬가지로git --bare:

me@pc MINGW64 /c/Test
$ ls -al
total 16
drwxr-xr-x 1 myid 1049089 0 Apr  1 11:36 ./
drwxr-xr-x 1 myid 1049089 0 Apr  1 11:11 ../

me@pc MINGW64 /c/Test
$ git init --bare
Initialized empty Git repository in C:/Test/

me@pc MINGW64 /c/Test (BARE:master)
$ ls -al
total 23
drwxr-xr-x 1 myid 1049089   0 Apr  1 11:36 ./
drwxr-xr-x 1 myid 1049089   0 Apr  1 11:11 ../
-rw-r--r-- 1 myid 1049089 104 Apr  1 11:36 config
-rw-r--r-- 1 myid 1049089  73 Apr  1 11:36 description
-rw-r--r-- 1 myid 1049089  23 Apr  1 11:36 HEAD
drwxr-xr-x 1 myid 1049089   0 Apr  1 11:36 hooks/
drwxr-xr-x 1 myid 1049089   0 Apr  1 11:36 info/
drwxr-xr-x 1 myid 1049089   0 Apr  1 11:36 objects/

$ git help repository-layout

Git 저장소는 두 가지 다른 맛으로 제공됩니다.

  • 작업 트리의 루트에 있는 .git 디렉토리.
  • .git 디렉터리는 맨 저장소(즉, 자체 작업 트리가 없음)이며, 일반적으로 다른 사람과 기록을 교환하는 데 사용됩니다.

언급URL : https://stackoverflow.com/questions/5540883/whats-the-practical-difference-between-a-bare-and-non-bare-repository

반응형