답변:
차이점은 사용하는 경우이다 --mirror
, 모든 심판이 복사됩니다 그대로 . 이는 원격 추적 분기, 메모, 참조 / 원본 / * (필터 분기의 백업) 등 모든 것을 의미합니다. 복제 된 저장소에는 모든 것이 있습니다. 또한 원격 업데이트가 원점에서 모든 것을 다시 가져 오도록 설정되어 있습니다 (복사 된 참조를 덮어 쓰기). 아이디어는 실제로 저장소를 미러링하여 전체 사본을 확보하여 예를 들어 중앙 저장소를 여러 위치에서 호스팅하거나 백업 할 수 있습니다. 훨씬 더 우아한 git 방식을 제외하고 repo를 똑바로 복사하는 것을 생각해보십시오.
새로운 문서는 거의 모든 것을 말합니다 :
--mirror
소스 저장소의 미러를 설정하십시오. 이 의미합니다
--bare
. 비교--bare
,--mirror
뿐만 아니라 대상의 로컬 브랜치에 대한 소스의 로컬 브랜치 매핑, 모든 이러한 심판에 의해 덮어 지도록 refspec 구성 위로 설정 (원격 지점, 메모 등을 포함한) 모든 심판 맵핑git remote update
대상 저장소를 .
내 원래 답변은 베어 클론과 일반 (비 베어) 클론의 차이점을 지적했습니다. 비 베어 클론은 원격 추적 분기를 설정하고에 대한 로컬 분기 만 생성하는 HEAD
반면 베어 클론은 분기를 직접 복사합니다.
가정하자 기원은 몇 가지 (이 master (HEAD)
, next
, pu
, 및 maint
), 일부 태그 ( v1
, v2
, v3
), 일부 원격 지점 ( devA/master
, devB/master
), 그리고 몇몇 다른 심판 ( refs/foo/bar
, refs/foo/baz
, 메모, 숨겨 놨다는 다른 DEVS '네임 스페이스, 누가 알 수 있습니다).
git clone origin-url
(비 베어) : 복사 한 모든 태그를 얻을 것이다, 로컬 브랜치는 master (HEAD)
원격 브랜치를 추적 origin/master
, 원격 지사 origin/next
, origin/pu
및 origin/maint
. 추적 지점은과 같은 작업을 수행 git 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)
( 여기 에서 직접 복사 )
현재 맨 페이지에 넣는 방법 :
비교
--bare
,--mirror
뿐만 아니라 대상의 로컬 브랜치에 대한 소스의 로컬 브랜치 매핑, 모든 이러한 심판에 의해 덮어 지도록 refspec 구성 위로 설정 (원격 지점, 메모 등을 포함한) 모든 심판 맵핑git remote update
대상 저장소를 .
git fetch
그것이 실제로 동일하기 위해서는 그것을 따라야한다고 생각 합니다. 어쨌든, 이것은 일종의 대답이 아닙니다. 문제의 핵심은 "미러 리모컨 / 복제는 일반 리모컨과 어떻게 다른가?"입니다.
basename
경로의 디렉토리 부분을 제거하는 일반적인 유닉스 유틸리티이며 $()
bash의 명령 대체입니다.
--mirror
안에 있습니다. 이것이 무엇을 설명했는지 만 받아 들일만한 대답 일 것 git remote add --mirror
입니다.
git-2.0.0으로 테스트 한 결과 --mirror 옵션은 후크, 구성 파일, 설명 파일, 정보 / 제외 파일 및 적어도 테스트 케이스에는 몇 가지 참조 (복사본)를 복사하지 않습니다. 이해하지 못합니다.) "원본과 호환되는 기능적으로 동일한 사본"이라고 부르지 않습니다.
-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
클론은 리모컨에서 참조를 복사하여 '원격이 가진 참조'라는 하위 디렉토리에 넣습니다.
거울은 리모컨에서 심판을 복사하여 자체 최상위 레벨에 넣습니다. 자신의 심판을 리모컨의 심판으로 대체합니다.
즉, 누군가 미러에서 가져 와서 미러의 참조를 자신의 하위 디렉토리에 넣을 때 원래와 동일한 참조를받습니다. 최신 미러에서 가져 오는 결과는 초기 리포지토리에서 직접 가져 오는 것과 같습니다.
$ git clone --bare https://github.com/example
이 명령은 새로운 자체를 $ GIT_DIR로 만듭니다. 또한 리모콘의 분기 헤드가 매핑없이 해당 로컬 분기 헤드로 직접 복사됩니다. 이 옵션을 사용하면 원격 추적 분기 나 관련 구성 변수가 만들어지지 않습니다.
$ git clone --mirror https://github.com/example
베어 클론과 마찬가지로 미러 클론에는 모든 원격 브랜치 및 태그가 포함되지만 페치 할 때마다 모든 로컬 참조 (원격 추적 브랜치, 노트 등 포함)가 덮어 쓰기되므로 항상 원본 리포지토리와 동일합니다. .