
--bare 옵션은 git init의 옵션으로,
- "사람이 직접 수정 가능한 코드"를 가지고 있는 repository를 만드는 게 아닌,
- working directory가 없는
- 코드만 저장해두는 'Server' 역할 의 repository를 만드는 옵션.
달리 표현하면
- "워킹 디렉토리(Working Directory)가 없는 저장소"
- "협업을 위해 push만 받는 중앙 공유 저장소"
1. Bare repository와 일반 repository의 차이점
가장 큰 차이는 "눈에 보이는 소스코드 파일이 있느냐 없느냐"입니다.
| 구분 | 일반 저장소 (git init) |
Bare 저장소 (git init --bare) |
| 목적 | 개발자용 (코드 작성, 수정, 실행) | 서버용 (중앙 저장, 공유, 백업) |
| 구조 | .git 폴더(숨김) + 실제 소스 파일들 |
.git 폴더 내부의 파일들만 밖으로 나와 있음 |
| 작업 | 파일 수정, add, commit 가능 |
파일 직접 수정 불가능, 오직 push/pull만 가능 |
2. Bare repository의 존재 이유
만약 일반 repository를 서버로 사용할 경우, 다음과 같은 문제가 발생할 수 있음
- Server의 일반 repository는 사람이 볼 수 있는 code 파일이 존재
- 해당 respository의 특정 소스 파일 (예를 들어,
test.py)이 열려 있고 누군가 보고 있을 경우. - 연결된 Client의 repository에서 해당 소스 파일(
test.py)을 수정한 뒤push를 하다면 - 서버의 working directory의 파일을 업데이트하지 못하는데,
.git의 관련 정보는 업데이트를 해야 하는 문제가 발생함.- "서버의 폴더에 있는
test.py파일을 client가 push한 새 버전으로 덮어써야 하나?" - "아니면 서버의 working directory의 파일은 그대로 두고 메타 데이터 및 관련 객체들(
.git/에 버전관리를 위해 저장된)만 업데이트해야 하나?"
- "서버의 폴더에 있는
- 이로 인해 충돌(Conflict)과 데이터 불일치가 발생.
때문에,
"서버에는 아예 눈에 보이는 파일(Working Tree)을 없이" 만들어진 repository가 bare repository임.
3. 폴더 구조 비교
일반 저장소 (git init):
my-project/
├── .git/ <-- 버전 관리 정보는 이 안에 숨어 있음
├── file.txt <-- 눈에 보임 (작업 가능)
└── src/ <-- 눈에 보임
Bare 저장소 (git init --bare):
my-server.git/
├── HEAD
├── config
├── description
├── hooks/
├── info/
├── objects/ <-- 실제 파일 내용은 압축되어 이 안에 들어감
└── refs/
(file.txt 같은 소스 파일이 아예 없음!)
4. 예제
fake-remote.git 을 bare repository로 만들고, my-project 를 연결하는 예제임.
bare repository의 로컬 경로(../fake-remote.git)를 마치 인터넷상의 주소(https://github.com/...)처럼 등록하면 됨.
# 1. 예제 폴더 생성 및 이동
mkdir bare-repo-practice
cd bare-repo-practice
# 2. bare repository 폴더 생성
mkdir fake-remote.git
cd fake-remote.git
# 3. Bare 옵션으로 초기화 (이게 핵심!)
git init --bare -b main
# 출력결과: Initialized empty Git repository in .../fake-remote.git/
# 4. 다시 상위 폴더로 이동
cd ..
# 5. working directory 생성 및 이동
mkdir my-project
cd my-project
# 6. Git 초기화 및 파일 생성
git init -b main
echo "Hello Git" > hello.txt
git add hello.txt
git commit -m "First Commit"
# 7. 원격 저장소 연결 (별칭: origin, 경로: ../fake-remote.git)
git remote add origin ../fake-remote.git
# 8. 파일 업로드 (Push)
git push -u origin main
# 출력결과: ... To ../fake-remote.git ... new branch -> main
# 9. 상위 폴더로 이동
cd ..
# 10. 다른 폴더 이름(coworker)으로 받아오기 (Clone)
git clone fake-remote.git coworker
# 11. 확인
cd coworker
cat hello.txt
# 출력결과: Hello Git (정상적으로 clone성공함을 확인 가능!)
주요 사용처
개인 개발자의 경우,
bare repository는
- 인터넷 연결 없이도 로컬 환경에서 원격 저장소(Remote Repository)를 모사(Simulation)하여 실습하기 위해 사용됨
- 로컬 디스크나 USB 등을 마치 원격 서버처럼 활용하여(Simulate) 중앙 저장소를 구축하기 위해 사용됨."
같이 보면 좋은 자료들
2024.05.20 - [utils/git and github] - [Git] init : local repository 생성.
[Git] init : local repository 생성.
git init기존 로컬 디렉토리를 Git repository(저장소)로 만들어주는 명령어.git init Local repository 를 생성하기 때문에remote repository 없이 처음 git 으로 버전 관리할 때 사용하는 명령어.실습mkdir first-gitcd
ds31x.tistory.com
2024.05.20 - [utils/git and github] - [Git] Git Summary (작성중)
[Git] Git Summary (작성중)
git이란2024.05.20 - [utils/git and github] - Git : 소개 git 설치 후 해줘야 하는 작업들[Git] git 설치 후 우선 해줘야 하는 작업들 (tistory.com)local repository 초기화2024.05.20 - [utils/git and github] - [Git] init : local repo
ds31x.tistory.com
'utils > git and github' 카테고리의 다른 글
| Relative Reference-Git-caret and tilde + Reflog Reference (1) | 2025.07.24 |
|---|---|
| git difftool 과 git mergetool (1) | 2025.07.22 |
| SSH Agent 사용법 (2) | 2025.07.21 |
| 새로 remote 에 추가된 submodule 을 local 에 반영하기 (3) | 2025.07.11 |
| [git] How to Add a New Remote Branch to Your Local Repository (0) | 2024.12.26 |