Git轻松入门3:远程仓库篇
![](https://i.loli.net/2021/02/02/Sp8b7AFnh64isou.png)
在第一讲中,我们有介绍过:Git是分布式版本控制系统。每个人的电脑上都有一份完整的版本库。当对项目作出了修改后,只要把修改推送给对方即可。但很有可能的情况是:两台电脑不在一个局域网内,无法互相访问;或者是你俩工作时间不一样,你上日班,他上夜班,两人很难找到时间连接到对方的电脑去推送修改。
所以在实际使用分布式版本控制系统时,是有一台电脑充当服务器的角色。这样,当我们有了修改时直接把修改提交到服务器的仓库里。其他人若是想获取这次修改,直接从服务器仓库中拉取即可。
而GitHub就扮演着这个服务器仓库的角色。你需要先注册一个GitHub账号,配置好你电脑的SSH Key(如何配置SSH Key?),因为Github是支持SSH协议的,所以有了该密钥后,当从你电脑上的仓库往GitHub仓库推送时,GitHub就能识别出你推送的提交确实是你推送的,而不是别人冒充的。而有些同学有多台电脑,他们一会从公司的电脑上传,一会从家里的电脑上传,这就需要配置多个密钥对。
配置好SSH Key后,再新建一个GitHub仓库,你的远程仓库就建立完毕。
与远程仓库建立连接
在本地仓库下运行以下指令可以与远程仓库建立连接。只要建立好这一次连接后,以后本地仓库和远程仓库就可以愉快方便地玩耍了~
$ git remote add [remote-alias] [remote-url]
其中 remote-url
指的是远程仓库的地址;remote-alias
指的是给该远程仓库起的外号,这样以后有什么事要找它直接喊它外号就可以了(通常,系统会默认给它起外号叫origin)。
- 以后想换外号的话,用
$ git remote rename [old-name] [new-name]
- 本地仓库若想和远程仓库绝交(断开连接),用
$ git remote rm [remote-alias]
- 要查看现在和哪些仓库建立连接了,用
$ git remote
。若添加-v参数,可以看到具体是往远程仓库的哪个地址fetch数据过来以及是往远程仓库的哪个地址push数据过去。
实战如下:
![](https://i.loli.net/2021/02/05/UYJ43IO1evnwACG.png)
克隆远程仓库
当我们想要把远程仓库的内容下载到我们本地电脑时,用下面指令。
git clone [remote-url]
实战如下:
![](https://i.loli.net/2021/02/02/9lGQ7Fe2q1Uor6A.jpg)
注意到:当使用该命令时,Git会自行帮你添加该远程仓库。
提取远程仓库的内容
# 获取远程仓库所有分支的更新
$ git fetch [remote-alias]
# 将某更新的分支合并到当前分支
$ git merge [remote-alias]/[remote-branch]
当fetch了远程仓库的更新后,我们在本地就拥有了远程仓库中所有分支的引用,如 origin/div1
,origin/main
。我们可以随时查看或合并。合并的命令就和之前在分支篇介绍的一样。
例如当远程仓库中的属于 main
分支的 README.md
文件和属于 div1
分支中的 div1.txt
文件有了更新后,利用上述命令,我们就可以把这两个文件的更新合并到本地。
![](https://i.loli.net/2021/02/02/wcuznoLXAdt2Pks.png)
当然,$ git fetch
和 $ git merge
命令可以简化成下面一条:
# 从远程仓库的某分支获取代码并与本地仓库中的某分支合并
$ git pull [remote-alias] [remote-branch-name]:[local-branch-name]
若合并的是当前分支,那么冒号后面的内容可以省略,即为:
$ git pull [remote-alias] [remote-branch-name]
推送到远程仓库
当你想把你的项目放到远程仓库时,你可以使用如下命令:
# 把本地仓库的某分支推送到远程仓库的同名分支里
$ git push [remote-alias] [branch-name]
例如:当我们对 div1
分支里的 div1.txt
文件作出修改后,我们想把这次修改推送到远程仓库。
![](https://i.loli.net/2021/02/05/ZmndTJawAKG154r.png)
这时,再打开Github中我们的远程仓库,就可以看到修改已被推送完毕。
注意:只有当你有远程仓库的写入权限,并且在你进行本次推送前,没人有再进行过推送了,该命令才可生效。例如你和你的同事正在合力开发一个新的项目,你的同事在一秒前把他们的工作推送到上游了,那么此时你再推送就会被拒绝。你必须先把刚刚他们的推送拉取下来,合并进你的工作后才能推送。
参考
有问题欢迎大家在评论区留言,转载请注明出处。