[Git/GitHub] `--bare`와 `--mirror` 뭐가 다른가?

Git을 사용하다 보면 --bare--mirror 옵션을 접하게 될 때가 있어요. 이 옵션들이 뭐하는 녀석들인지 궁금하시죠? 오늘은 이 두 가지 옵션에 대해 살펴보겠습니다. 먼저, 이 단어들의 의미를 통해 쉽게 이해해볼까요?

--bare 옵션

--bare가 뭐야?

bare라는 단어는 '벌거벗은', '아무것도 없는'이라는 의미를 가지고 있어요. --bare 옵션도 이와 비슷하게, 작업 디렉토리 없이 Git 데이터만 있는 저장소를 만들어요. 일반적으로 사용하는 Git 저장소는 .git 디렉토리와 작업 디렉토리로 구성되지만, --bare 옵션을 사용하면 .git 디렉토리만 있는 저장소가 만들어집니다.

왜 쓰는 거야?

--bare 저장소는 주로 중앙 저장소로 사용됩니다. 예를 들어, 여러분의 팀이 Git을 사용해 프로젝트를 진행한다고 가정해볼게요. 이때 모든 팀원이 자신의 로컬 저장소에서 작업한 변경 사항을 푸시할 중앙 저장소가 필요해요. 이 중앙 저장소는 --bare 옵션을 사용해 생성된 저장소여야 합니다.

다음과 같은 상황을 생각해볼 수 있어요!

  1. 중앙 저장소 설정: 회사 내 서버에 --bare 옵션을 사용해 중앙 저장소를 생성합니다.이 명령어를 통해 /path/to/repo.git이라는 중앙 저장소가 생성됩니다.
    • git init --bare /path/to/repo.git
  2. 팀원들이 중앙 저장소를 클론: 각 팀원은 중앙 저장소를 클론하여 자신의 로컬 저장소를 만듭니다.
    • git clone /path/to/repo.git
  3. 작업 후 푸시: 팀원들이 각자 로컬에서 작업한 후, 변경 사항을 중앙 저장소로 푸시합니다.
    • git push origin main

이런 방식으로 --bare 저장소는 직접 코드를 수정하지 않고, 팀원들이 각자의 변경 사항을 푸시하거나 풀 할 수 있는 중앙 저장소로 사용됩니다. 이를 통해 협업이 원활하게 이루어질 수 있죠.

어떻게 사용하는 거야?

--bare 옵션을 사용해서 저장소를 만듭니다.

git init --bare my-bare-repo.git

이렇게 하면 my-bare-repo.git이라는 이름의 --bare 저장소가 생성돼요. 이제 이 저장소는 다른 개발자들이 푸시하거나 풀 할 수 있는 공유 저장소로 사용할 수 있습니다.

--bare 저장소 복제 예시

회사에서 여러 팀원이 함께 작업하는 중앙 저장소를 설정하려고 할 때, --bare 옵션을 사용해 공유 저장소를 만들어볼 수 있어요.

예를 들어, my-bare-repo.git이라는 이름으로 중앙 저장소를 생성하고, 팀원들이 이 저장소를 복제하여 작업할 수 있게 합니다.

--mirror 옵션

--mirror가 뭐야?

mirror라는 단어는 '거울'이라는 의미를 가지고 있어요. --mirror 옵션은 원본 저장소의 모든 정보를 그대로 반영(복제)하는 역할을 합니다. 일반적으로 git clone 명령어로 저장소를 복제할 때는 브랜치, 태그, 원격 설정 등 기본적인 정보들만 가져오지만, --mirror 옵션을 사용하면 원본 저장소의 모든 정보가 포함됩니다.

왜 쓰는 거야?

--mirror 옵션은 원본 저장소와 완벽하게 동일한 복제본이 필요할 때 유용합니다. 주로 백업이나 마이그레이션 용도로 사용되죠. 예를 들어, 여러분의 회사가 현재 사용 중인 GitHub 저장소를 새로운 서버로 이전해야 한다고 가정해볼게요. 이때 --mirror 옵션을 사용하면 모든 브랜치, 태그, 원격 설정 등을 포함한 저장소의 전체 복제본을 만들 수 있습니다.

다음과 같은 상황을 생각해볼 수 있어요.

  1. 백업: 중요한 프로젝트를 안전하게 백업하기 위해 --mirror 옵션을 사용해 저장소의 전체 복제본을 생성합니다.이 명령어를 통해 repo.git 디렉토리에 원본 저장소의 모든 정보가 복제됩니다.
    • git clone --mirror https://github.com/username/repo.git
  2. 마이그레이션: 기존 서버에서 새로운 서버로 저장소를 이전해야 할 때 --mirror 옵션을 사용해 복제본을 만들고, 새로운 서버로 옮깁니다.
    1. git clone --mirror https://github.com/username/repo.
    2. git cd 해당 디렉토리
    3. git push --mirror ssh://newserver.com/path/to/repo.git

이런 방식으로 --mirror 옵션은 저장소의 모든 데이터를 완벽하게 복제하여, 백업 및 서버 이전 등의 작업을 원활하게 수행할 수 있게 합니다.

어떻게 사용하는 거야?

--mirror 옵션을 사용해서 저장소를 복제할 때는 아래와 같이 명령어를 입력합니다

git clone --mirror https://github.com/username/repo.git

이렇게 하면 원본 저장소의 모든 정보가 포함된 repo.git 디렉토리가 생성됩니다.
이 디렉토리를 다른 서버로 옮기거나 백업 용도로 사용할 수 있겠죠?

--mirror 저장소 복제 예시

회사의 GitHub 저장소를 다른 서버로 이전하려고 할 때, --mirror 옵션을 사용해 모든 정보를 그대로 복제할 수 있어요.

예를 들어, company-repo를 새로운 서버로 마이그레이션하려고 할 때, --mirror 옵션을 사용해 원본 저장소의 모든 정보를 포함한 복제본을 생성할 수 있습니다.

요약

  • --bare: 작업 디렉토리 없이 Git 데이터만 있는 저장소를 만들 때 사용해요. 주로 중앙 저장소나 공유 저장소로 사용
  • --mirror: 원본 저장소의 모든 정보를 그대로 복제할 때 사용해요. 주로 백업이나 마이그레이션 용도로 사용