Git 的使用
写一些有关于 Git 的个人使用心得。
什么是 Git
用 AI 的话说,Git 是一个分布式版本控制系统,用来记录代码或文件的修改历史,并支持多人协作开发。
也就是说,Git 的核心功能有两个,一个是版本控制,一个是多人协作。
Git 的安装
Windows 系统上并没有自带 Git,它是一个命令行工具,我们需要手动进行安装。
可以访问这个网站下载安装 Git 的最新版本。在安装过程中,如果有“Add to PATH”之类的选项请进行勾选。安装完成后,电脑上会多一个 Git Bash。我们很少直接从这里打开。
因为 Git 是一个命令行工具,所以它不像别的软件一样有一个可以打开并显示的窗口。我们很多操作是直接敲命令运行的。也有一些工具可以让我们直观地看到 Git 的运行,比如 VS Code,后面会进行介绍。
Git 的本地使用
检查安装
很多人提到 Git 就会想到 GitHub。但其实,Git 可以不依赖这些网站,完全在本地运行。这个时候它主要被用来进行版本管理。
如果前面“Add to PATH”成功了,我们应该可以直接在电脑的任意一个终端运行 Git。在文件夹空白处右键,“在终端中打开”,然后输入:
|
如果提示的不是“未找到命令”,而是以
|
开头的一长串文本,则说明 Git 已经安装成功并可以运行了。
设置本地用户和邮箱
为了在多人协作时知道每一步操作是谁做的,在使用之前需要先配置 Git 的邮箱。
运行以下命令:
|
将<username>和<email>替换为自己的用户名和邮箱,敲进去的命令中不需要有尖括号。
要注意,这里的邮箱需要是你在对应远程服务中使用的邮箱。以及这里不会对你的邮箱进行验证,所以按下回车前务必检查是否输入正确。
初始化仓库
接下来介绍仓库和如何初始化仓库。
Git 需要以“仓库”为单位进行版本管理。这个仓库是在电脑中的一个文件夹。一般来说,如果我们有一个项目,那么会在这个项目的根目录进行仓库的初始化。比如,你可以新建一个文件夹,然后在终端中打开它,输入:
|
按 Enter ,这个文件夹就会被初始化成一个仓库。这时候 Git 会在仓库里新建一个名为 .git 的隐藏文件夹,用来进行版本管理和记录远程地址等。
将文件添加到缓冲区
刚建立仓库,Git 是不知道要追踪哪些文件的。我们可以执行命令:
|
这条命令的意思是将<file>文件或文件夹加入缓冲区。
如果我们需要把仓库里的所有文件都加入缓冲区,只需要运行
|
.表示的是当前文件夹,也就是把当前文件夹下的所有文件加入缓冲区。
需要注意的是,这里加入缓冲区,只对文件的当前状态有效。如果你已经运行了一次git add命令,之后对文件进行了修改,需要再一次运行才能追踪到文件的最新状态。
以及,上面提到了git add .这个命令。如果我们需要追踪仓库里的大部分文件,但有一部分文件始终不追踪,可以在仓库中创建.gitignore文件,让 Git 忽略这些文件,详细介绍在后面。
创建一次提交
Git 的版本管理是以“提交”(commit)为单位的。
当我们完成了这一次所有的修改,运行了git add命令之后,就可以进行一次提交,命令是:
|
其中,commit message需要替换成我们对这一次提交的描述。按下 Enter 之后,就提交完成了。
.gitignore 文件
前面提到了 .gitignore 文件。它的作用就是把不希望进入 Git 追踪的文件排除在外,比如一些操作系统相关的文件、编译的中间产物和不属于代码的结果。其中有些操作系统相关文件可能是隐藏文件,平时看不到,但会被 Git 追踪。
下面这一段是一个比较通用的.gitignore文件,只包含了操作系统的相关文件。
|
其他本地使用
Git 在本地还可以进行分支切换/版本回退等,留待大家自行探索。
Git 的远程使用
前面提到,Git 的功能有版本控制和多人协作。远程使用就主要是多人协作相关。
选择一个 Git 服务
世界上最知名的 Git 服务商是 GitHub。但其实,提供 Git 服务的服务商有很多,比如GitLab、Gitee等。
对于文档、博客类的站点,GitHub 的优势是它提供了 GitHub Pages 的功能,可以直接进行静态站点的部署。
新建远程仓库
在网页端点击新建仓库,输入仓库名和仓库描述即可新建仓库。
新建仓库之后,网页端会给出将本地仓库和远程仓库连接的命令。一般有两种类型,分别是将新仓库克隆,和将已有仓库连接到远程。
克隆一个已有的仓库
将远程仓库下载到本地的过程叫“克隆”(clone)。
在对应的仓库页面找到.git结尾的链接,然后在想要放置仓库的文件夹里打开终端,输入:
|
将“remote url”替换为远程链接,按回车即可。
拉取远程仓库的更新
在协作过程中,一个人编辑远程仓库之后,其他人的本地仓库并不会自动更新。我们需要执行命令:
|
这将会从远程拉取最新的更新。
将更新推送至远程仓库
在本地完成更新,commit 了之后,需要将更新推送至远程仓库。执行命令:
|
即可。
对自己没有权限编辑的仓库做操作
git push 命令只能对自己有权限编辑的仓库做推送。如果是别人的仓库,自己没有编辑权限,则需要先在网页Fork对应的仓库到自己的账户下,然后把自己的远程仓库链接添加到本地仓库,对自己的仓库做 push。
Push 至远程后,到网页端对方的仓库新建一个 Pull Request,请求对方拉取你的仓库。对方经过审查之后,就会拒绝这个PR或者合并这个PR。
工作流程图
flowchart LR
A((新建仓库)) --> B[clone]
B --> C[建立新分支]
C --> D[写代码]
D --> E[git add]
E --> F[git commit]
F --> G[git push]
G --> H[合并分支]
F --> H
H --> G
flowchart LR
A((Fork仓库)) --> B[clone]
B --> C[建立新分支]
C --> D[写代码]
D --> E[git add]
E --> F{已完成?}
F -- No --> D
F -- Yes --> G[git commit]
G --> H[git push]
H --> I[提交PR]
I --> J[同步原仓库]
在 VS Code 中使用 Git
现在很多IDE都支持图形方式进行 Git 的版本管理。这里以 VS Code 为例。
在 VS Code 左侧菜单栏中有一个“源代码管理”的按钮,点击它,或者按下快捷键Ctrl+Shift+G,打开面板。
如果当前工作区已经是 Git 仓库,在上半部分会显示当前的更改,下半部分会显示 Git 的提交记录。
我们完成内容编辑后,在“更改”选项卡右侧有个“+”号,点击之后暂存所有更改。然后在“消息”中输入 commit message,点“提交”,就完成了提交。然后点击“同步”,就完成了本地仓库和远程仓库的同步。
命令速查
本地操作
git init:初始化仓库git add <file>:将仓库里的<file>文件加入暂存区git commit -m "commit message":将当前暂存的文件提交,git checkout <branchname>切换分支git stash暂存工作区
远程操作
git clone将远程仓库克隆到本地 git pull拉取远程仓库的更新,相当于fetch+mergegit remote add <name> <url>给本地库添加一个远程链接git fetch获取远程仓库的更新git rebase变基git merge合并git push将本地仓库的更新推送到远程
结语
Git 还有很多其他功能,在这里没有写出来,留待前辈们自行探索。