git clone --bare
中的 --bare
表示创建一个 “裸仓库”(bare repository)。以下是通俗解释:
1. 裸仓库是什么?
- 没有工作目录:普通仓库克隆后会包含项目文件(如代码、文档等),可以直接编辑;但裸仓库只包含 Git 的版本控制数据(即
.git
目录的内容),没有实际文件。 - 像个“空壳”仓库:它专用于存储代码历史,无法直接修改文件(不能执行
git add
或git commit
)。
2. 为什么用裸仓库?
- 作为中央仓库:裸仓库通常用作团队协作的“远程仓库”(类似 GitHub 的仓库),其他人可以推送(
git push
)或拉取(git pull
)代码。 - 避免冲突:如果直接克隆普通仓库作为远程仓库,当有人推送代码时,若远程仓库的工作目录有未提交的修改,会导致冲突。裸仓库没有工作目录,天然规避了这个问题。
- 节省空间:裸仓库只保留 Git 数据,体积更小。
3. 裸仓库 vs 普通仓库
特性 | 普通仓库 | 裸仓库 |
---|---|---|
工作目录 | ✅ 有(可直接编辑文件) | ❌ 无 |
.git 目录 | 隐藏目录(默认不可见) | 直接暴露为仓库根目录 |
用途 | 日常开发(修改、提交代码) | 作为远程仓库(仅接收推送) |
典型命名 | my-project | my-project.git |
4. 使用场景
- 搭建私有 Git 服务器:在服务器上创建裸仓库,供团队推送代码。
# 在服务器上创建裸仓库 git clone --bare https://github.com/yourname/repo.git
- 备份仓库:将本地仓库转换为裸仓库,仅保留 Git 数据。
- 镜像仓库:克隆一个仓库的纯数据副本,用于同步或迁移。
5. 操作示例
-
克隆为裸仓库:
git clone --bare https://github.com/yourname/repo.git
生成的目录名为
repo.git
,里面只有 Git 内部数据(没有项目文件)。 -
推送代码到裸仓库:
# 本地仓库关联裸仓库 git remote add my-bare-repo /path/to/repo.git # 推送代码 git push my-bare-repo main
6. 注意事项
- 不要直接修改裸仓库:它只能通过
git push
、git fetch
等命令操作。 - 命名习惯:裸仓库通常以
.git
结尾(如project.git
),方便区分普通仓库。
总结
- 普通仓库:用于日常开发,可以修改文件。
- 裸仓库:像一个“数据库”,仅存储代码历史,适合作为协作中心。
当你需要创建一个仅供他人推送/拉取代码的仓库时(类似 GitHub 的作用),就用--bare
!