序言
在这篇文章中,我们将理解分布式版本控制系统,学习远程仓库与本地仓库的交互操作,掌握多⼈协作开发模式。
1. 理解分布式版本控制系统
前两篇中的所有内容都是针对于在本地的文件管理,Git 的强大之处肯定不仅仅只是体现于此。什么是分布式版本管理系统呢?Git 给予每个开发者一份 完整的代码库工作副本(包括所有版本信息)
,这使得所有开发者即使是没有网络连接也是可以正常工作的!
Git 的分布式管理系统通过其独特的分布式架构、数据完整性保护、分支和合并支持、易于备份和灾难恢复、离线操作支持、灵活的工作流程、可扩展性以及多用户支持等特点
,为开发者提供了一个强大而高效的版本控制和管理工具。
2. 远程仓库的关联
分布式管理系统的特点还包括会设置一个远程仓库(或称为中央仓库、中心仓库)来 方便团队成员之间的协作和代码共享
。现在最常用的远程仓库托管平台包括 GitHub,Gitee等
,在这篇文章中我们使用 Github
来介绍如何建立远程仓库和本地的连接。
2.1 新建远程仓库
进入 GitHub 的官网后,点击以下按钮创建一个新的仓库:
你需要填写基本信息,比如 仓库名,描述,是否开源等
,这里有两个选项建议大家勾上,稍后会介绍他们的用处:
点击创建则成功创建一个线上的仓库了,仓库中包含两个默认的我们勾选的文件 README.md, .gitignore
。
2.3 关联远程仓库
在这里你可以直接将远程仓库克隆下来,但是我采取的方式为将远程仓库和本地一个仓库建立关联,首先你需要获取你远程仓库的链接(选用 HTTPS, SSH安全性更高但是还需要配备公钥,在这里不是重点,前者完全够用了
):
获取该链接后,前往你需要关联的文件夹使用指令:
git remote add origin [远程仓库URL]
之后你可以使用指令查看是否成功建立关联:
git remote -v
会显示如下信息:
3. 拉取远程仓库
所谓拉取远程仓库,就是 更新本地仓库的信息与远程仓库保持一致
,之前我们的远程仓库是包含两个默认文件的,现在我们使用指令拉取到本地:
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull <远程主机名> <远程分支名> // 若远程的分支名和本地一致则可省去后一个
现在我们尝试一下该指令:
成功的将远程的文件拉取到了本地上!
4. 向远程仓库推送
现在我们对文件随意写入内容,之后我们需要将更新后的文件再次推送的远程仓库,首先 你需要将你的更改更新到版本库中
,之后使用指令:
git push <远程主机名> <本地分支名>:<远程分支名>
git push <远程主机名> <本地分支名> // 若远程的分支名和本地一致则可省去后一个
成功的将我们的修改推送到在远程库上!
5. 分支的跟踪
你可以让你本地的一个特定分支跟踪远程的一个特定分支,这样当你 pull, push
操作时就不需要指定两个分支了,就可以简化如下:
git push // 向特定分支推送信息
git pull // 拉取特定分支的信息
你可以告诉 Git,你想要当前分支跟踪远程仓库的特定分支,指令如下:
git branch --set-upstream-to=<远程仓库的名称>/<远程分支的名称> <本地分支的名称>
如果你当前就在该分支上,可以省略本地分支的名称:
git branch -u origin/remote-branch
如果你想要你创建一个分支时就跟踪一个分支:
git checkout -b <本地分支名称> <远程仓库的名称>/<远程分支名称>
设置跟踪之后,会显示如下信息:
你可以使用指令来显示当前所有分支的跟踪信息:
git branch -vv
取消分支之间的跟踪关系使用指令:
git checkout <本地分支名称> // 切换到该分支下
git branch --unset-upstream // 取消分支跟踪
6. 特殊文件的作用
现在我们逐一来介绍两个特殊文件的作用。
6.1 README.md
当我们大家随意点击一个开源项目的时候,往下翻会显示这个项目的功能,如何使用,等等信息,如下:
这就是使用 README.md
文件的内容,用来介绍你的项目,但是编写使用的是 MarkDown
的语法格式,入门也非常简单。
6.2 .gitignore
有时,我们并不希望将工作的所有文件都提交到版本库中管理,比如:
在这里我们就希望管理 readme
文件就可以了,不需要管理 info.txt
文件,但是我们使用 git status
时,他又一直提示我们将该文件添加到暂存区,这怎么办呢?
.gitignore
作用就来啦,它可以让 Git 忽略指定的文件,这样该文件就不会被管理了,我们将该文件的名称添加到 .gitignore
中,现在我们在使用指令 git status
:
可以看到我们的目的达成啦!
7. 总结
这些指令看起来非常的多,但是当我们带入实际场景时,就可以很快熟悉起来,希望大家有所收获!