programing

git clone --mirror와 git clone --bare의 차이점은 무엇입니까?

golfzon 2023. 4. 9. 22:39
반응형

git clone --mirror와 git clone --bare의 차이점은 무엇입니까?

에는 git clone에 대한 .--mirror:

원격 저장소의 미러를 설정합니다.하는 바가 있습니다.--bare.

어떻게 일이 일어났는지는 하지 않습니다.--mirror는 복제와는 .--bare

점은 '하다'를 사용할 때 '을 쓰다'를 사용한다는 것입니다.--mirror모든 참조가 그대로 복사됩니다.즉, 리모트 트래킹 브랜치, 노트, refs/originals/*(필터 브랜치로부터의 백업)등의 모든 것을 의미합니다.복제된 레포는 모든 것을 가지고 있다.또한 원격 업데이트가 원본에서 모든 내용을 다시 가져오도록 설정됩니다(복사된 참조를 덮어씁니다).이 아이디어는 저장소를 미러링하고, 전체 복사본을 보유하여 중앙 보고서를 여러 곳에서 호스팅하거나 백업할 수 있도록 하는 것입니다.훨씬 더 우아한 방법을 제외하고 레포만 곧장 베끼는 것을 생각해 보세요.

새로운 문서에서는 이 모든 것을 다음과 같이 기술하고 있습니다.

--mirror

소스 저장소의 미러를 설정합니다.하는 바가 있습니다.--bare 에해 to --bare,--mirror만 아니라 (리모트브런치, 등하고, 모든 는, 「」에 .git remote update대상 저장소로 이동합니다.

베어되어 있습니다.비브랜치를 하고, 「」의 합니다.비베어 클론은 리모트 트래킹브런치를 셋업하고 로컬브런치만 만듭니다.HEADBARE는 BARE를 사용하고 있습니다.

에 가지가 개 .master (HEAD),next,pu , , , , 입니다.maint태그)v1,v2,v3 리모트브런치devA/master,devB/master 「」( )refs/foo/bar,refs/foo/baz( 모 、 트 、 른른 )

  • git clone origin-url (비표준):로컬 브랜치인 모든 태그가 복사됩니다.master (HEAD), ", " " "origin/master및, 「」origin/next,origin/pu , , , , 입니다.origin/maintgit fetch origin예상대로 가져올 것입니다.(복제된 리모트 내의) 리모트브런치 및 기타 참조는 완전히 무시됩니다.

  • git clone --bare origin-url: 모든 태그 복사, 로컬브런치 취득master (HEAD),next,pu , , , , 입니다.maint리모트 트래킹브런치는 없습니다.즉, 모든 브랜치가 그대로 복사되고 완전히 독립적으로 설정되므로 다시 가져올 필요가 없습니다.(복제된 리모트 내의) 리모트브런치 및 기타 참조는 완전히 무시됩니다.

  • : 이 모든 참조는 그대로 복사됩니다git clone --mirror origin-url.모든 태그와 지역 지사를 얻을 수 있습니다.master (HEAD),next,pu , , , , 입니다.maint, " " "devA/master ★★★★★★★★★★★★★★★★★」devB/master , " " "refs/foo/bar ★★★★★★★★★★★★★★★★★」refs/foo/baz이치노은, 「 」를 실행하고 있는 됩니다.git remote update거울을 지우고 뒤로 젖힌 것처럼 모든 참조가 원본에서 덮어씁니다.원래 의사 선생님들이 말씀하셨듯이 거울이에요.원래와 바꿔 쓸 수 있는 기능적으로 동일한 복사본이어야 합니다.

$ git clone --mirror $URL

의 손이 모자라다

$ git clone --bare $URL
$ (cd $(basename $URL) && git remote add --mirror=fetch origin $URL)

(여기서 직접 복사)

현재 man-page의 표현:

--bare,--mirror만 아니라 (리모트브런치, 등하고, 모든 는, 「」에 .git remote update대상 저장소로 이동합니다.

오늘 git-2.0.0을 사용한 테스트에서는 --mirror 옵션이 훅, 컨피규레이션파일, 설명파일, info/exclude 파일, 그리고 적어도 제 테스트 케이스에서는 몇 가지 참조를 복사하지 않는 것으로 나타났습니다(이해할 수 없습니다)."기능적으로 동일한 원본과 교환 가능한 복사본"이라고는 할 수 없습니다.

-bash-3.2$ git --version
git version 2.0.0
-bash-3.2$ git clone --mirror /git/hooks
Cloning into bare repository 'hooks.git'...
done.

-bash-3.2$ diff --brief -r /git/hooks.git hooks.git
Files /git/hooks.git/config and hooks.git/config differ
Files /git/hooks.git/description and hooks.git/description differ
...
Only in hooks.git/hooks: applypatch-msg.sample
...
Only in /git/hooks.git/hooks: post-receive
...
Files /git/hooks.git/info/exclude and hooks.git/info/exclude differ
...
Files /git/hooks.git/packed-refs and hooks.git/packed-refs differ
Only in /git/hooks.git/refs/heads: fake_branch
Only in /git/hooks.git/refs/heads: master
Only in /git/hooks.git/refs: meta

해서 보여드릴게요.config거울과 나체의 차이점여기에 이미지 설명 입력 왼쪽은 맨발이고 오른쪽은 거울이다.미러의 구성 파일에는fetch즉할 수 .git remote update ★★★★★★★★★★★★★★★★★」git fetch --all

저장소 복제에 대한 GitHub 문서의 미묘한 설명:

베어 클론과 마찬가지로 미러링된 클론에는 모든 원격 브랜치 및 태그가 포함되지만 가져올 때마다 모든 로컬 참조가 덮어쓰기되므로 원래 저장소와 항상 동일합니다.

클론은 리모트에서 참조를 복사하여 '이것이 리모트에 있는 참조입니다'라는 이름의 서브디렉토리에 넣습니다.

미러는 리모컨에서 참조를 복사하여 자체 최상위 레벨에 배치합니다. 즉, 자체 참조를 리모컨의 참조로 대체합니다.

이것은 누군가가 거울에서 꺼내 거울의 참조를 서브디렉토리에 넣을 때, 그들은 원본과 같은 참조를 얻을 수 있다는 것을 의미합니다.최신 미러에서 가져오는 결과는 초기 repo에서 직접 가져오는 것과 동일합니다.

$ git clone --bare https://github.com/example

이러다"가 .example는 $GIT_DIRGIT_D 아아아아아아아아아아아아아아아아아아아악example/.git또한 리모트 브랜치헤드는 매핑 없이 대응하는 로컬 브랜치헤드에 직접 복사됩니다.이 옵션을 사용하면 원격 추적 브랜치나 관련 설정 변수가 생성되지 않습니다.

$ git clone --mirror https://github.com/example

베어 클론과 마찬가지로 미러링된 클론에는 모든 리모트브런치 및 태그가 포함되지만 가져올 때마다 모든 로컬 참조(리모트 트래킹브런치, 노트 등)가 덮어쓰기되므로 원래 저장소와 항상 동일합니다.

★★★★★★★★★★★★★★★와 달리git clone,git clone --mirror ★★★★★★★★★★★★★★★★★」git clone --bare둘 다 베어 저장소입니다.는 들들에 .configfilename을 클릭합니다.

git clone과 같습니다

[remote "origin"]
    url = https://github.com/example
    fetch = +refs/heads/*:refs/remotes/origin/*

git clone --bare과 같습니다

[remote "origin"]
    url = https://github.com/example

git clone --mirror과 같습니다

[remote "origin"]
    url = https://github.com/example
    fetch = +refs/*:refs/*
    mirror = true

그래서 우리는 refspec의 주요 차이점이 fetch에 사용되는 것을 볼 수 있습니다.

의 refspec +그에 , , 음음음음음 , ,<src>:<dst>서, snowledge.<src>이며, 「원격측」의 참조 패턴입니다.<dst>로컬로 참조가 추적되는 장소입니다.+는 Git에게 참조가 빨리 전달되지 않더라도 업데이트하도록 지시합니다.

git clone는 문장이에요.git remote add origin은 령어,, Git 명 git git under under under command の 모든 참조를 가져옵니다.refs/heads/.refs/remotes/origin/지방적으로.

git clone --bare refspec 」입니다.

git clone --mirror、 、 득 、 spec 、 spec 、 spec 음 、 음 음 음 , , , , , , , , , , 。fetch = +refs/*:refs/* '아, 아, 아, 아, 아, 아, 아, 아, 아...tags,remotes,replace)refs와 지정합니다heads에도 취득됩니다.디폴트로는 fetch만 가능합니다.

1 1 1: git clone --mirror ★★★★★★★★★★★★★★★★★」git clone --bare --mirror등합니니다다

2: 에서는 다른 점도 있습니다.이것은, 와 같은 정보를 기록하기 때문입니다.refs/heads/,refs/tags/이 좀 더 을 합니다

언급URL : https://stackoverflow.com/questions/3959924/whats-the-difference-between-git-clone-mirror-and-git-clone-bare

반응형