什么是版本控制?
版本控制(Revision control)是一种在开发过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
Git是分布式版本控制
如标题所言,Git是分布式版本控制,即所有的版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需要在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题,就可以恢复所有的数据,但这增加了本地存储空间的占用。
Git安装
有的电脑是自动安装了Git的,查看自己是否安装,只需要在终端执行以下代码就行,如果出现了版本号,则证明本机安装有Git。如果出现一条提示信息提示你安装或升级Git,按着提示信息走就行。如果下载Git速度太慢,可以上网去寻找镜像文件。
git --version
安装好Git后,我们多是使用Git Bash,其中以Linux命令为主。
Git基本理论(核心)
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository 或 Git Directory)。如果加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个工作区域之间的转换关系如下:
Working Directory:工作区,平时存放项目代码的地方
Stage/Index:暂存区,用于临时存放改动,事实上它只是一个文件,保存即将提交到文件列表的信息
Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有自己提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
Remote Directory:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
在 Working Directory 使用
git add filename
命令将工作区的代码提交到暂存区(Stage/Index),但目前只是暂存,并未永久保存,这时使用
git commit [-m]
# -m表示添加文件时文件的描述信息
命令将暂存区的文件提交到本地仓库,然后可以在本地仓库使用
git push
命令将本地仓库的版本信息提交到远程仓库,反向操作如上图所示。
Git必要的配置项
# Git会跟踪是谁修改了项目,哪怕参与项目开发的人只有一个。为此,Git需要知道你的用户名和电子邮箱地址。你必须提供用户名,但可使用虚构的电子邮箱地址:
git config --global user.name "username"
git config --global user.email "username@example.com"
# 设置每个项目中主分支的默认名称,一个不错的主分支名称是main,当然也可以设置为master
git config --global init.defaultBranch main
上述配置意味着,在使用Git管理的每个新项目中,一开始都只有一个分支,该分支名为main。
Git项目创建
# 使用以下命令创建项目
git init
忽略文件
创建 .gitignore 文件,在文件中写入要忽略的内容
# "#"为注释
*.txt # 忽略所有以.txt结尾的文件,这样的话上传就不会被选中
!lib.txt # 所有的lib.txt文件都不会被忽略
/temp # 忽略根目录下除了temp目录的其他所有文件
build/ # 忽略build目录下的所有文件
doc/*.txt # 忽略doc目录下所有以.txt结尾的文件
本人使用的是python语言,就无需让git跟踪.pyc文件,所以在.gitignore文件中写入__pycache__即可,若是macOS系统,则还需要多加一个.DS_Store。
通常情况下,一个项目的前端文件也是可以忽略的。
其他代码
# 检查仓库状态
git status
# 添加至缓存区(.表示所有文件,若只想添加某个文件,将.换为文件名即可)
git add .
# 将缓存区中的所有文件提交至本地仓库
git commit -am "Start Project"
# -m 表示给提交的文件添加提示信息,双引号中的内容就是要添加的提示信息
# -a 表示提交缓存区的所有文件
# 查看提交历史
git log
# 只查看提交的引用ID和提交记录的信息
git log --pretty=oneline
# 放弃修改
git restore .
# . 表示放弃所有文件的修改,若想放弃指定文件的修改,只需要将.换成指定文件的文件名即可
# 检出以前的提交
git checkout 引用ID前6位字符
# 注意: 此时已经离开了main分支了,进入了分离头指针(detached HEAD),若想回到之前的状态,执行
git switch -
# 将项目重置到以前提交的状态(即以前版本)
git reset --hard 该版本引用ID的前6位字符
# 删除仓库
# 可以到项目目录删除.git文件,也可以执行如下命令
rm -rf .git/
# 注意: 该情况仅限于项目的历史记录被弄乱了且本人实在没有办法恢复,并且参与项目开发的仅本人一人或征得项目开发组全员同意的情况,才能使用该命令,该命令会删除提交过的所有历史记录和版本,但不会影响当前正在编写的版本。但如果当前写的版本已经提交了,那么该命令会连带当前版本的内容以及本人目前在编写的内容一并删除。慎重使用该命令。