网站首页 > 技术文章 正文
当前工作目录中的文件就是工作区,在工作区里有文件变化,可以通过 git status 查看状态:
wangbo@wangbo-VirtualBox:~/test/git-demo$ touch main.c
wangbo@wangbo-VirtualBox:~/test/git-demo$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
main.c
nothing added to commit but untracked files present (use "git add" to track)
通过 git add 后文件就被放到了暂存区,暂存的意思就是等待最终的提交,也就是打入版本库。
wangbo@wangbo-VirtualBox:~/test/git-demo$ git add main.c
wangbo@wangbo-VirtualBox:~/test/git-demo$ git status -s
A main.c
wangbo@wangbo-VirtualBox:~/test/git-demo$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: main.c
如果在最终提交之前,希望了解一下暂存区和最后一次本地版本库的内容区别,输入 git diff --cached 后:
--cached 表示暂存区,事实这个这个命令是一个简写,完整的写法是 git diff --cached HEAD,比较暂存区和 HEAD(最后一次提交的版本库) 之间的区别,由于 HEAD 是默认参数,被省略了。
同样的如果我们修改了一个已经被跟踪的文件,输入 git diff HEAD 就可以比较工作区和最后一次版本库的区别,可以简写为 git diff 命令:
把这两个文件都提交以后,它们就进入了版本库 HEAD,提交之前先查看一下 .git 这个目录的存储大小。
wangbo@wangbo-VirtualBox:~/test/git-demo$ du -sh .git
304K .git
提交之后比较一下:
wangbo@wangbo-VirtualBox:~/test/git-demo$ git add .
wangbo@wangbo-VirtualBox:~/test/git-demo$ git commit -m 'make some changes'
[master 8ef4571] make some changes
2 files changed, 4 insertions(+)
create mode 100644 main.c
wangbo@wangbo-VirtualBox:~/test/git-demo$ du -sh .git
328K .git
其中 git commit -am 是 git add 和 git commit 的合并写法,提交之后比提交整个文件夹比之前多了 24K,我们计算一下当前工作区的文件大小是多大 (排除 .git 文件夹):
wangbo@wangbo-VirtualBox:~/test/git-demo$ du --exclude=".git" -sh
24K .
原来 .git 在提交的时候,除了记录变更历史信息等操作外,我们有理由怀疑 git 直接把我们的文件进行了一次 backup,不基于内容差异化保存,这导致 git 的工作速度非常快,而且对非文本文件可以工作顺利,缺点就是会增加磁盘的使用,有些版本管理工具基于内容差异化保存,需要去存储文件的差异,工作就非常的慢,而且不能很好的处理非文本文件。
通过本文的小例子,希望你建立了对工作区、暂存区、版本库的概念,我觉得比直接解释那些晦涩的概念好用。
猜你喜欢
- 2024-10-07 如何编写gitignore文件(git怎么用)
- 2024-10-07 Git 工具 - 子模块(github 子模块)
- 2024-10-07 用git管理版本,你必须知道的事情
- 2024-10-07 详解Github的.gitignore忽略文件+.gitignore不生效解决+生产配置
- 2024-10-07 Git数据迁移:迁移代码到新仓库(git版本库迁移)
- 2024-10-07 收藏就行了:最全git总结(gitjournal)
- 2024-10-07 程序员必须掌握版本控制的工具 --- git(一)
- 2024-10-07 Github怎么上传超过100M的大文件?
- 2024-10-07 Git最全总结(git ci)
- 2024-10-07 Git使用的小技巧(git的使用超详细版教程)
- 10-02基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- 10-02Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- 10-02AWD-LSTM语言模型是如何实现的_lstm语言模型
- 10-02NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 10-02使用ONNX和Torchscript加快推理速度的测试
- 10-02tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- 10-02Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- 10-02Gateway_gateways
- 最近发表
-
- 基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- AWD-LSTM语言模型是如何实现的_lstm语言模型
- NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 使用ONNX和Torchscript加快推理速度的测试
- tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- Gateway_gateways
- Coze开源本地部署教程_开源canopen
- 扣子开源本地部署教程 丨Coze智能体小白喂饭级指南
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)