Git Bare Repository(裸倉庫)是一種 不包含工作目錄(working directory) 的 Git 儲存庫,通常用於遠端儲存庫,讓多個開發者可以推送(push)與拉取(pull)程式碼,而不會直接在該儲存庫中編輯檔案。
裸倉庫與一般 Git 儲存庫的差異
項目 | 一般 Git 儲存庫(有工作目錄) | 裸倉庫(Bare Repository) |
是否有工作目錄 | 有 (.git 目錄 + 專案檔案) | 無(只有 .git 目錄的內容) |
主要用途 | 本地開發、版本控制 | 作為遠端儲存庫(Remote Repository) |
允許直接修改檔案 | 允許 | 不允許 |
是否可以 checkout 分支 | 可以 | 不行(僅能管理 Git 物件) |
適合場景 | 個人開發、團隊合作 | 共享遠端儲存庫,如 Git Server |
如何建立裸倉庫?
如果你想建立一個裸倉庫,使用 git init --bare
命令,例如:
git init --bare my-repo.git
這樣會建立一個 my-repo.git
目錄,該目錄內只包含 Git 物件和版本控制資訊,但 沒有工作目錄。
裸倉庫的用途
作為中央遠端儲存庫
- 裸倉庫通常部署在 Git 伺服器(如 GitHub、GitLab、Bitbucket 或自行架設的 Git Server)。
- 開發者透過
git remote add
來連結遠端裸倉庫,並用 git push
與 git pull
進行協作。
團隊協作
- 裸倉庫可作為專案的共享倉庫,所有開發者都透過它來同步程式碼。
Git 伺服器(如 Gitolite)
- Gitolite 等工具允許使用者管理裸倉庫,設定權限並限制哪些人可以存取哪些儲存庫。
如何使用裸倉庫作為遠端?
在遠端機器(或伺服器)上建立裸倉庫:
git init --bare /path/to/repo.git
在本機專案中,將遠端裸倉庫設為 origin
:
git remote add origin user@server:/path/to/repo.git
將本機程式碼推送到遠端:
git push -u origin main
其他開發者可以使用 git clone
來取得專案:
git clone user@server:/path/to/repo.git
為何裸倉庫不能 checkout
分支?
裸倉庫沒有工作目錄,因此它無法執行 git checkout
來切換分支,因為:
checkout
會將某個分支的內容展開到工作目錄,但裸倉庫根本沒有工作目錄。
- 你只能使用
git symbolic-ref
來檢查目前指向的 HEAD:
git symbolic-ref HEAD
這會顯示當前的預設分支,例如:
refs/heads/main
結論
Git Bare Repository(裸倉庫)是一種 不包含工作目錄 的 Git 儲存庫,適合作為遠端儲存庫,讓開發者推送與拉取程式碼。它無法直接修改檔案或 checkout
分支,主要用於 Git 伺服器或團隊協作環境。