본문 바로가기
목차
utils/git and github

git init --bare : 편집가능한 소스 코드가 없는 (서버용) 저장소 만들기

by ds31x 2025. 12. 1.
728x90
반응형

--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를 서버로 사용할 경우, 다음과 같은 문제가 발생할 수 있음

  1. Server의 일반 repository는 사람이 볼 수 있는 code 파일이 존재
  2. 해당 respository의 특정 소스 파일 (예를 들어, test.py)이 열려 있고 누군가 보고 있을 경우.
  3. 연결된 Client의 repository에서 해당 소스 파일(test.py)을 수정한 뒤 push를 하다면
  4. 서버의 working directory의 파일을 업데이트하지 못하는데, .git의 관련 정보는 업데이트를 해야 하는 문제가 발생함.
    • "서버의 폴더에 있는 test.py 파일을 client가 push한 새 버전으로 덮어써야 하나?"
    • "아니면 서버의 working directory의 파일은 그대로 두고 메타 데이터 및 관련 객체들(.git/에 버전관리를 위해 저장된)만 업데이트해야 하나?"
  5. 이로 인해 충돌(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

 

728x90