Git是目前全球最流行的分布式版本控制系统,用于高效管理代码(或任何文件)的修改历史,支持多人协作开发

  • 分布式:每个开发者本地都有完整的代码仓库,无需依赖中央服务器即可提交、分支等操作
  • 高效性:对大项目的操作(如分支切换、提交)速度极快
  • 安全性:通过哈希算法确保代码历史不可篡改
  • 强大的分支功能:支持灵活的分支创建、合并,轻松实现并行开发

总之:高效的管理代码,可以查看不同时间段提交的,修改过的、没修改过的,增加了哪个文件,删除了哪个文件,改了哪个文件,改了哪一行代码,什么时候改的,谁改的,谁提交的……

理解git

想要使用git,首先得了解git,git是如何配合各个仓库分支和开发者的。

仓库:我们的代码都放在仓库里,我们可以将一个项目的根目录作为仓库目录

  • 本地仓库:仓库和代码都存在自己的电脑上
  • 远程仓库:仓库和代码存在一台服务器上,其他开发者可以访问这个仓库
    • 公有仓库:一个所有人都可以访问的远程仓库
    • 私有仓库:只有我和我的团队才能访问的远程仓库

分支:仓库里面存放着代码,代码又可以有不同的分支,开发不同的功能。你姑且可以吧抖音tiktok看成同一个项目的两个不同分支。对于老版本的git,创建主分支默认名为master,新版本的git一般叫main,就是名字不一样,没别的区别。

克隆:从远程(仓库)把代码拿到本地,一般使用克隆,这会直接将远程仓库中的所有代码包括提交记录等等,全部原封不动的拿到本地你指定的文件夹中。一般不建议直接下载zip压缩包拿代码(小破站某知名博主就是这么塌房的),这仅仅只会拿代码到本地而不会携带任何作者信息,不利于二次开发。

提交:当你写完代码后,你可以将代码提交到仓库中,并(必须)携带一条提交概要(summary),这时,你可以在本地仓库的提交记录中看到这条记录,你于某时某刻提交,对项目做了哪些修改,精确到具体某一行。

推送:你本地仓库里面已经写好了代码,并且提交到了本地仓库,这时你可以将本地的提交推送到远程,推送完成后,远程仓库就能看到你的这条提交记录了。

拉取:你将远程的代码克隆到了本地,一段时间后,其他开发者向远程推送了新的代码,你则可以将远程最新的代码拉取到本地。

更多待补充……

Git的安装和简要配置

不同系统安装

平台 安装方法
Windows 1.下载官方安装包:Git For Windows
2.双击安装并无脑下一步(初学者不建议修改安装选项)
macOS 方法1:使用Homebrew,安装命令:brew install git
方法2:安装苹果官方的命令行工具(Command Line Tools)
安装命令: xcode-select --install,官方的开发工具中自带了Git等开发环境
Linux 你都用上linux还能不会安装软件???
大便系列(Debian):sudo apt install git

win的建议

  • 在安装时,一般不建议取消 “Add Git to PATH”,方便命令行调用
  • 安装后,一般建议配置一个HOME环境变量指定一个自己的工作目录作为家目录,这样,在git bash中使用cd ~时可以像linux一样有一个家目录可以用,并在家目录中配置各种奇奇怪怪的文件

验证安装

1
2
git --version
# 示例输出:git version 2.39.5 (Apple Git-154)

配置用户名与邮箱

用户名
这里的用户名可以看作是你的昵称,可以使用中文等字符。在项目版本管理中,将会显示某某提交于某年某月。一般设置成一个有标识性,能让人一眼认出你来的英文名。

1
git config --global user.name "你的用户名"

邮箱:邮箱在git中是开发者的唯一标识。
场景理解:我在a电脑配置的用户名叫xukun,我在b电脑的叫zhiyin,但是我都配置了同一个邮箱,那么在统计数据时,系统都将认为是同一个开发者提交的代码。在一些远程仓库中(比如github),有点击查看提交者主页的功能,只要邮箱是同一个,就会跳转到同一个用户的主页。

1
git config --global user.email "你的邮箱"

配置的适用范围
以上命令均携带--global,这将使配置在全局生效,配置保存在~/.gitconfig文件中

对于某一个项目,可以单独配置这个仓库使用另一个用户名和邮箱
场景理解:在自己的电脑中有一些个人项目,使用全局配置的用户名和邮箱,现在回家加班,在自己电脑上拉取了公司的代码,这时给仓库单独配置一个用户名和邮箱(一般是自己的大名和公司邮箱),这样既不影响自己的个人项目,也不影响公司项目。

都配置好后,你就可以愉快地写代码,提交代码了!

特殊文件

官方定义

.gitignore:当你使用集成开发环境(IDE)创建项目时,一般开发工具会给你自动生成一个.gitignore,这个文件里面标记不需要被git跟踪的文件或文件夹。
一般来说,IDE的配置文件,编译产生的文件都会标记在.gitignore中,让git不要记录这些文件或文件夹

约定俗成

.gitkeep:如果一个文件夹是空的,git不会记录这个文件夹,这时可以在文件夹中创建一个名为.gitkeep的空文件,用于让git跟踪空目录

Git的基本操作

初始化(git init)

你是项目作者,你新建了一个项目,这时你可以将项目初始化为一个git仓库

1
2
3
4
5
# 在项目根目录下
cd project-root

# 初始化仓库,生产隐藏文件夹 .git
git init

使用命令后,git会在当前目录下生成一个.git隐藏文件夹,仓库的所有信息都会存放在这个文件夹里,删除这个文件夹,git仓库就没了只剩下代码里。

克隆(git clone)

你是新来的开发者,你接手了一个项目,现在你要拿到代码并进入开发状态。不要直接在仓库下载zip压缩包,下载压缩包是没有.git文件夹的,也就没有仓库信息,你将无法提交和推送代码。

1
2
3
4
5
# 创建一个项目目录并进入
mkdir project-dir && cd project-dir

# 克隆代码到当前文件夹,这时project-dir就是项目的根目录
git clone https://xxx.com/user/repo.git

使用命令后,project-dir目录中的内容就会与远程仓主分支中的内容同步,或者

1
2
# 创建文件夹并克隆
git clone https://xxx.com/user/repo.git project-dir

这会创建一个project-dir文件夹,并将远程的代码放进去,二者任选其一即可,没有区别。

暂存(git add)

提交代码前,你需要将代码加入暂存区,提交时,只有暂存区的代码会被提交到仓库。在一些图形化的git工具里面,可能都不会提到暂存这个词,变成了用复选框打勾,勾上要提交的修改点击提交就行。VSCode中有暂停的概念,点击加号添加到暂存区再点击提交,其实就跟其他图形工具的打勾一样,看着不同罢了。

1
2
3
4
5
6
7
8
# 暂存单个文件
git add 文件 # 如 git add index.html

# 暂存所有修改的文件
git add .

# 暂存指定类型文件(如所有 .js 文件)
git add *.js

使用命令后,指定的文件就会添加到暂存区等待提交

提交(git commit)

代码写完后,或实现某个功能后,可以进行一次代码提交,这将记录本次修改了什么,谁修改的……
后面可以在提交记录中找到这条提交,查看提交内容,也可以一键回退到这个提交记录的版本。

1
git commit -m "提交说明"

使用命令后,暂存区的修改会被提交到本地仓库,并附上提交说明,请务必携带提交说明,否则提交失败。
没有被add的文件则不会被提交。

重新提交(修订):刚才提交错了,并且提交还没有推动到远程,这时还有后悔药

1
git commit --amend

远程(git remote)

将一个本地仓库与多个远程仓库进行关联。这样,推送代码的时候,git就知道代码要推送到哪。

对于一个新的git仓库,肯定是没有定义远程的。如果代码是克隆过来的,那么远程已经定义好了,就是被克隆的这个仓库。

1
2
3
4
5
# 查看当前已定义的远程仓库
git remote -v

# 定义远程仓库
git remote add origin https://github.com/your-username/your-repo.git

这里origin是你在本地给远程仓库取的名字,用这个名字代替那一长坨链接。一般我们都会取名为origin,只有一个远程仓库时,不推荐取别的名字。

推送(git push)

你写完代码,并将修改提交到了本地的某个分支,这时,你可以将这些修改同步到远程,既推送。

1
2
3
4
5
# 将本地的master分支推送到远程的master分支
git push origin master:master

# 如果本地分支与远程分支的名字相同,可以省略冒号
git push origin master

这时系统会验证你的权限,是否有同送代码的权限,权限校验成功后,远程的提交记录就会与本地同步,其他开发者(有权限)就能看到这些代码是你写的,你什么时候提交的等等。

后续如果还是提交这个分支,命令还可以再省略

1
2
# 省略再省略的命令
git push

强制推送:本地的提交与远程的提交发生冲突时,可以使用强制推送(不推荐)

1
2
3
4
5
# 强制推送,在后面加 --force
git push origin master --force

# 或省略成 -f
git push -f

强制推送需要谨慎使用,如果是保护分支,在强制推送时会提示没有权限。

强制推送后,本地的记录会强制覆盖远程,如果其他开发者提交了别的代码,也会被覆盖。

图形化工具

让开发者更专注于写代码,而不是调教git

Github Desktop

链接:https://github.com/apps/desktop
github官方开源的图形化git工具,界面简洁实用
Github Desktop截图

UGit

链接:https://ugit.qq.com/zh/
腾讯家的git图形化工具,功能相对更多
UGit截图