git clone --mirror
는 원본 저장소를 통채로 복사하기 위해 사용하는 옵션입니다.
일반적으로 저장소의 백업을 생성하거나, 저장소를 통째로 이전/복제하기 위해 사용합니다.
git clone | --mirror | |
---|---|---|
복사 대상 | default branch | 모든 branches, tags |
저장소 유형 | non-bare | bare |
git fetch 동작 (branch) | 원격에서 삭제되어도 로컬에서는 삭제 X | 원격에서 삭제되면 로컬에서도 삭제 |
여기서 non-bare는 .git
디렉토리와 모든 작업 디렉토리를 포함한 저장소이고, bare는 .git
디렉토리만 포함된 저장소입니다.
즉 bare 저장소 상태에서는 개발 작업을 하거나 push/pull을 할 수 없습니다.
위 사진처럼 git clone --mirror
로 복제된 저장소에는 .git
디렉토리에 해당하는 파일만 있는 것을 확인할 수 있습니다.
git clone --mirror [REPO_URL]
cd [REPO_NAME].git
git lfs fetch --all
git lfs fetch --all
은 저장소에 100MB가 넘는 lfs 파일이 있을 때, 이를 반영하여 clone하기 위해 사용합니다.
git push --mirror
를 통해 bare 저장소를 non-bare 저장소로 원격 저장소에 push 할 수 있습니다.
이 때, push가 되는 원격 저장소는 clone을 해온 저장소이므로 필요에 따라 먼저 원격 저장소의 주소를 변경해주어야 합니다.
git remote set-url --push origin [NEW_REPO_URL]
git push --mirror
때로는 새로운 원격 저장소에 push하는 대신 로컬에서 작업을 해야할수도 있습니다.
이 경우에는 작업 디렉토리를 따로 생성한 뒤, 여기에 clone을 하면 됩니다.
# 현재 [REPO_NAME].git 디렉토리에 있다고 가정
mkdir ../[REPO_NAME]
git clone . ../[REPO_NAME]
cd ../[REPO_NAME]
이렇게 워킹 디렉토리를 포함한 non-bare 저장소로 clone 되었음을 확인할 수 있습니다.