一、git init
是干什么的?
一句话解释:
git init
就像给文件夹“激活”了Git功能,让Git开始记录这个文件夹里的文件变化。
类比:
你买了个空白笔记本(文件夹),git init
相当于在第一页写“这是我的日记”,然后Git就会帮你记录每一页的修改。
二、使用场景
1. 新建本地项目
比如你写了个Python脚本,想开始用Git管理:
mkdir myproject
cd myproject
git init # 初始化Git仓库
touch main.py # 创建文件
git add main.py # 添加到暂存区
git commit -m "first commit" # 提交到本地仓库
2. 导入已有项目
如果你有个旧项目想用Git管理:
cd existing_project # 进入已有项目目录
git init # 初始化仓库
git add . # 添加所有文件
git commit -m "Import existing project"
3. 创建裸仓库(用于远程服务器)
如果你要搭建Git服务器:
ssh server
mkdir /opt/repo/myproject.git
cd /opt/repo/myproject.git
git init --bare # 创建裸仓库(没有工作目录)
本地推送到远程:
git remote add origin ssh://server/opt/repo/myproject.git
git push -u origin main
三、底层实现(简化版)
1. 软件层面
当你执行 git init
时,Git会:
-
在当前目录创建一个 .git 文件夹(隐藏文件夹),结构如下:
.git/ ├── HEAD # 指向当前分支 ├── config # 仓库配置 ├── objects/ # 存储文件内容和历史(核心!) ├── refs/ # 存储分支和标签的引用 └── index # 暂存区(staging area)
-
objects 目录:
Git把文件内容拆分成“对象”(blob)存储,每个对象有唯一的哈希值。
比如:objects/3b/18e512dba79e4c8300dd08a45f119e3f4063a8
(哈希值前两位作为文件夹名,剩余作为文件名) -
暂存区(index):
这是Git特有的概念,类似于“草稿箱”,你可以选择性地提交部分修改。
2. 硬件层面
- 文件系统:Git本质是在硬盘上创建
.git
文件夹和一堆文件。 - 性能:
- 小文件(如代码):Git很高效,因为它用哈希值快速比对文件差异。
- 大文件(如视频):Git不适合,因为每次修改都要完整存储,推荐用Git LFS(大文件存储)。
四、总结
作用 | 使用场景 |
---|---|
创建Git仓库 | 新建项目或导入已有项目 |
生成.git文件夹 | 存储版本历史、分支信息等 |
本地操作(不联网) | 先在本地管理版本,再推送到远程仓库 |
注意:
git init
只创建本地仓库,要和远程仓库关联还需git remote add
。.git
文件夹很重要,不要手动修改里面的内容! 😄