Git介绍及用法
这篇blogs算是读git官方的这个 Pro Git Book 整的一个笔记。很多都是直接cv的。这篇blogs就看了他的前两章,后面的像是在服务器上搭建Git之类的之后再说吧。 # Git历史
版本控制发展
本地版本控制->集中版本控制->分布式版本控制
Git是在linux的开发过程中,在分布式版本控制系统bitkeeper收回免费linux开发组对该系统的使用权力后,由linus牵头写的一个版本开发系统,有简单而快速、支持并行开发、完全分布式、支持超大规模项目管理的特点。
思路与优势
Git的思路是每次存下一个文件快照的索引,每当提交更新,他就会做一个快照,并保存这个快照的索引。为了效率,如果有文件没有更改,他就不会重新储存,直接保留一个连接指向之前存过的文件的。在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。
这和之前的例如CVS、Subversion、Perforce按照类似于记录下各个版本之间的差异,按照类似于补丁的形式给记录下来,(通常称作基于差异(delta-based)的版本控制)。Perforce 的话,没有连接服务器时几乎不能做什么事;而用 Subversion 和 CVS 的话, 你能修改文件,但不能向数据库提交修改(因为你的本地数据库离线了)。
Git 有三种状态,你的文件可能处于其中之一: 已提交(committed)、已修改(modified) 和 已暂存(staged)。
- 已修改表示修改了文件,但还没保存到数据库中。
- 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
- 已提交表示数据已经安全地保存在本地数据库中。
这会让我们的 Git 项目拥有三个阶段:工作区(某个版本独立出来让你改的)、暂存区(一个Git仓库目录的文件,写了下次提交要上报什么东西)以及 Git 目录(.git)。
Git安装
- linux(Debian系为例):
sudo apt install git-all
- MacOS:
git --version
之后跟着系统提示走就行,直接用二进制安装程序详见Git官网:Git - Downloading - Windows:直接用二进制安装程序详见Git - Downloading Package
- 源码编译:详见Git - 安装 Git,这个我觉得没必要还耗费时间,有兴趣可以自己做一下。
Git配置
用Git自带的工具git config
。具体变量会存在三个位置:
系统内全部用户:
/etc/gitconfig
,如果在执行git config
时带上--system
选项,那么它就会读写该文件中的配置变量。注意这个是系统配置文件,要sudo。当前用户:
~/.gitconfig
或~/.config/git/config
,你可以传递--global
选项让 Git 读写此文件,这会对你系统上所有的仓库生效。当前使用仓库:
.git/config
,你可以在该仓库下传递--local
选项让 Git 强制读写此文件,虽然默认情况下用的就是它。
每一个更细的级别会覆盖上一个大级别级别的配置。
在 Windows 系统中,Git
会查找 $HOME
目录下(一般情况下是 C:\Users\$USER
)的 .gitconfig
文件。
Git 同样也会寻找 /etc/gitconfig
文件,但只限于 MSys
的根目录下,即安装 Git 时所选的目标位置。 如果你在 Windows 上使用 Git
2.x 以后的版本,那么还有一个系统级的配置文件,Windows XP
上在 C:\Documents and Settings\All Users\Application Data\Git\config
,Windows
Vista
及其以后的版本在 C:\ProgramData\Git\config
。此文件只能以管理员权限通过 git config -f <file>
来修改。
1 |
|
用户信息
安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:
1 |
|
这个 --global
从上文可知是当前用户下的配置,如果要在特定项目下配其他的话在此项目中用去掉
--global
的命令就行。
IDE配置
一般来说在linux下会直接用系统默认的文本编辑器,更换编辑器命令(以emacs为例):
1 |
|
Windows 系统上,指定可执行文件的完整路径即可。
Git帮助
1 |
|
Git拉包
在已存在的目录中初始化仓库
在当前目录下:
1 |
|
克隆现有的仓库
Git克隆的是该仓库服务器上几乎所有数据,默认是没一个版本都会拉下来
在目标克隆目录下:
1 |
|
这会在当前目录下创建一个名为 “libgit2”
的目录,并在这个目录下初始化一个 .git
文件夹,
从远程仓库拉取下所有数据放入 .git
文件夹,然后从中读取最新版本的文件的拷贝。
如果你进入到这个新建的 libgit2
文件夹,你会发现所有的项目文件已经在里面了,准备就绪等待后续的开发和使用。
传输协议之后再写。
Git上传(zzzz)
文件的状态变化周期:
![[file-20250604000404216.png]]
接下来根据这个文件状态变化周期来进行叙述:
跟踪新文件与暂存更改
只有把文件添加到更新下面之后才能进行版本控制!新建文件后仍为未跟踪状态,需要执行
git add <文件>
将其转为已暂存,后续所有提交都只包含暂存区的内容;git add
也可接受目录路径,递归跟踪目录下所有文件。
1 |
|
注意有的时候你中途add进去一个新文件,在add之后在上传时,上传的是你add时的版本,再次修改的文件还在非暂存区中,需要重新add。
忽略不需要版本控制的文件
在项目根目录(或子目录)创建
.gitignore
,列出要忽略的模式(支持 glob 语法);
1 |
|
查看文件状态
git status
:显示当前分支、与远程分支的关系,以及“已暂存”和“未暂存”更改、和“未跟踪”文件;git status -s
(或--short
):以紧凑格式显示状态
查看修改细节
在提交前,应先用 git status
确认所有需要包含的修改都已暂存,然后再检查差异。
有一点需要注意的是,若只想看“未暂存”的修改,直接运行
git diff
;若想查看“已暂存且待提交”部分,可用
git diff --cached
(或 --staged
)。
移除文件
1. 彻底移除(工作目录 & Git 仓库):
git rm <file>
:
- 从工作目录中删除文件。
- 将删除操作暂存(记录到暂存区)。
- 提交后,文件将不再被 Git 跟踪,且从磁盘消失。
2. 仅移除 Git 跟踪(保留文件在工作目录):
git rm --cached <file>
:
- 将文件从 Git 的跟踪列表和暂存区移除。
- 保留文件在工作目录中,使其成为未跟踪文件。
- 适用于误添加到暂存区但需保留本地的文件(如日志、编译产物)。
3.
强制移除(-f
):
- 当文件已被修改且添加到暂存区时,需使用
git rm -f <file>
强制删除。 - 防止误删尚未提交快照的修改(这些修改无法由 Git 恢复)。
4. 删除模式匹配的文件:
- 使用
git rm
配合 glob 模式(如git rm log/\*.log
删除log/
下所有.log
文件)。 - 注意:通常需转义
*
等特殊字符(如\*
)。
移动/重命名文件
Git
通过内容变化智能推断文件是否被移动或重命名。可以用git mv <old_name> <new_name>
进行重命名或者移动,该命令等效于执行以下三条命令:
1 |
|
提交后,Git
会将其识别为重命名操作(git status
会显示 renamed
)。
如果你使用其他方式(如系统命令或文件管理器)移动/重命名了文件,需要手动执行:
1 |
|
提交前完成这两步,Git 同样能识别为重命名。
提交更改
执行 git commit
会打开默认文本编辑器,其中包含对本次提交的注释模板(类似
git status
输出的注释行),在文件首行输入提交说明即可;也可使用
git commit -m "提交信息"
将提交说明写在命令行中。注意每次git commit
实现一个功能或者改好一个bug就好,注释一定要写清楚,一定,一定。
提交完成后,会输出当前所在分支、生成的提交 SHA-1 以及此次修改涉及的文件数、行数等统计信息;
每次提交只记录暂存区的快照,未暂存的更改不会被包含,仍保留在工作目录中,需在下次提交前再次执行
git add
。
进阶:跳过使用add
为了方便,可以直接:
1 |
|
以此来跳过使用add和暂存区域,但是会给所有跟踪过的文件暂存一块提交,就不这么精细
Git回顾
查看提交历史
1 |
|
这个是用来看提交历史流程,最新的在上,旧的在下面。会给作者名、提交者、概要之类的信息。
这个可以有很多参数进行细致的查看,这里由于笔者本人大型项目开发经验欠缺,暂时先略过,等我用到再说。
Git撤销
这个可能会导致工作丢失,如果操作不好的话。
暂时先写到这里,等期末考完再说下一步。
Git GUI汉化包:stayor/git-gui-zh
参考资料: