借助Github,我们可以建立远程仓库。本讲结合实战,介绍了Git和远程仓库相关的命令。

第一讲中,我们有介绍过: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数据过去。

实战如下:

克隆远程仓库

当我们想要把远程仓库的内容下载到我们本地电脑时,用下面指令。

git clone [remote-url]

实战如下:

注意到:当使用该命令时,Git会自行帮你添加该远程仓库。

提取远程仓库的内容

# 获取远程仓库所有分支的更新
$ git fetch [remote-alias]

# 将某更新的分支合并到当前分支
$ git merge [remote-alias]/[remote-branch]

当fetch了远程仓库的更新后,我们在本地就拥有了远程仓库中所有分支的引用,如 origin/div1origin/main。我们可以随时查看或合并。合并的命令就和之前在分支篇介绍的一样。

例如当远程仓库中的属于 main 分支的 README.md 文件和属于 div1分支中的 div1.txt 文件有了更新后,利用上述命令,我们就可以把这两个文件的更新合并到本地。

当然,$ 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 文件作出修改后,我们想把这次修改推送到远程仓库。

这时,再打开Github中我们的远程仓库,就可以看到修改已被推送完毕。

注意:只有当你有远程仓库的写入权限,并且在你进行本次推送前,没人有再进行过推送了,该命令才可生效。例如你和你的同事正在合力开发一个新的项目,你的同事在一秒前把他们的工作推送到上游了,那么此时你再推送就会被拒绝。你必须先把刚刚他们的推送拉取下来,合并进你的工作后才能推送。

参考

  1. http://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes

 
有问题欢迎大家在评论区留言,转载请注明出处。

版权声明:本文为linj7原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/linj7/p/14377278.html