标题中提到了GitHub和GitLab,两个平台,功能非常类似。因为本文讨论的点对于两者通用,所以文中不再做区分。

两个平台的核心都是基于git,其核心理念是用于帮助管理代码版本以及协助团队合作(多个程序员参与同一个项目开发)。其功能之强大无法通过一篇小文详述,所以本文只讨论了如何将一个GitHub云端的仓库(repository)克隆到本地(个人笔记本或者服务器),并随时保持两地的内容同步。但是这一小小的功能也已经很实用,比如可以用来帮助大家写论文。估计很多毕业生在写毕设时都有过这样的经历:

gitlab间同步项目 gitlab和github同步_github

GitHub的版本管理功能就可以很好解决这个问题,帮你井井有条地管理各种版本,即使有上百个版本也不在话下。

安装Git

首先需要在自己电脑上安装git。以Mac为例,打开Terminal,使用命令 brew install git 安装。

将云端的仓库克隆到本地(讲解)

假设你已经在GitHub网页端(云端)创建了一个仓库,现在想要把它克隆到自己的电脑,并且后面时刻保持两者同步(一般的应用场景是在本地做了修改后,需要将其同步到云端)。

我们以这个GitHub仓库作为例子:https://github.com/zhxiaokang/RASflow 

gitlab间同步项目 gitlab和github同步_gitlab间同步项目_02

这里的下拉菜单有多种选择,最流行的两种协议是HTTPS和SSH。

网上可以找到很多详细介绍,这里不再赘述。简单来讲就是:HTTPS适合给别人用,SSH适合给自己用。

稍微展开讲一下就是,HTTPS链接可以直接将整个仓库克隆到本地而无需提供任何认证(所以适合用来下载别人的GitHub仓库或者将自己的仓库分享给别人),但是当你在本地做了修改想要同步到云端时,需要账户和密码的认证,以此告诉GitHub是你本人的操作,但是每次都需要输入账号、密码难免太麻烦。

这时我们就来到了SSH。它是通过将电脑的密钥(可以理解为这台电脑的一个唯一的身份ID)跟你的GitHub账号绑定,相当于将这台电脑添加进你的GitHub的whitelisting里,告诉你的GitHub:这台电脑是我的人,从今往后你要无条件信任它。

所以SSH的缺点也显而易见了,你需要将电脑的密钥添加进GitHub的whitelisting里面,所以它不适用于将仓库分享给他人。但是针对个人使用,添加SSH是一个一劳永逸的工作。因为一旦添加,之后这台电脑就可以随意下载和上传你的GitHub账号下的所有仓库,而且不再需要账号、密码认证。

使用SSH将电脑和GitHub账号联通

给电脑生成SSH Key

这里我们要生成一对密钥 ------ 一个公钥和一个私钥。私钥留在电脑本地保密,公钥用于分享(放到GitHub云端)。

打开Terminal,切换到下面的目录:

cd ~/.ssh

使用以下命令生成密钥:

ssh-keygen -C "petitKang"

-C 是指给这个密钥一个注释,可有可无

而后会看到以下信息:

Generating public/private rsa key pair.

Enter file in which to save the key (/Users/petitKang/.ssh/id_rsa): 

这里我们直接使用默认路径和文件名,所以直接回车。

Enter passphrase (empty for no passphrase): 

Enter same passphrase again:

我们假设这台电脑只会被你本人使用,所以为了方便起见,我们不设置密码,直接回车。而后就会看到以下信息:

Your identification has been saved in /Users/petitkang/.ssh/id_rsa.

Your public key has been saved in /Users/petitkang/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:wLc4vAWCTBX56M0w11ax7IZ4/Kl07Vf2OzEETgcFJdY petitKang

这时,你会看到当前目录下已经生成了以下两个文件:id_rsa, id_rsa.pub,分别是私钥和公钥。

将公钥添加到自己的GitHub账号里

复制公钥内容,登录自己的GitHub账号,在设置里面找到添加新的 SSH key 的选项,粘贴公钥内容。

gitlab间同步项目 gitlab和github同步_应用场景_03

至此,恭喜你已经成功联通了自己的GitHub账号和电脑。

将云端的仓库克隆到本地(实战)

这样,我们来使用刚才添加的SSH key把云端仓库克隆到本地。按照前面提到的,来到自己的一个GitHub的仓库页面,比如 https://github.com/zhxiaokang/RASflow 在克隆选项中选择SSH,拷贝链接,然后打开Terminal,切换到自己想要的目录下,使用以下命令克隆云端仓库:

git clone git@github.com:zhxiaokang/RASflow.git

将本地修改同步到云端

当我们在本地对这个仓库进行了一些修改之后,比如新建了一个文件叫 test.txt,想要把它们同步到云端,需要经过以下几个操作:

  1. 查看自己进行了哪些修改

git status

  1. 将修改添加进暂存区

git add test.txt

  1. 将修改提交到当前分支

git commit -m ‘add a test file’

  1. 将本地更新同步到云端

git push

这时,在去云端查看时,就会发现多出来刚添加的这个文件,并且带有注释“add a test file”。

将云端修改同步到本地

另一种场景就是,当你在云端做了修改(有可能是你直接在云端修改,也可能是在其它电脑上修改后同步到了云端,也可能是项目合作伙伴把他的修改同步到了云端),现在需要把云端的修改同步到本地电脑,只需要使用这个命令即可:

git pull

如何使用GitHub管理论文版本

掌握了以上的使用方法之后,我们这里介绍一个实用的应用场景:使用GitHub来管理写作。每当在文档里做了一些修改,想要保存为某一个版本,就可以将其整体同步到云端。这里大家需要注意的是,你在创建仓库时,也许并不想共享,所以注意选择private,这样只有你自己能访问这个云端的仓库,就像这个:https://github.com/zhxiaokang/wordDoc 由于我设置为private,所以大家肯定是访问不了这个链接的。

如此,本地永远只有一个文档(wordTest.docx):

gitlab间同步项目 gitlab和github同步_应用场景_04

云端虽然看上去也只有一个文档:

gitlab间同步项目 gitlab和github同步_如何修改id 白卡_05

但是背后却隐藏着完整的修改史:

gitlab间同步项目 gitlab和github同步_git_06

你后面任何时候,可以通过云端保存的修改时下载任何某个版本,或基于那个版本进行后续创作。

结语

本文只涵盖了强大的 git 的非常局部的功能,但是其实已经能够对我们的生活和工作起到非常大的帮助,并且文中也涵盖了最常用的几个 git 命令,足以应付基本使用,比如文章开头提到的论文版本管理这个应用场景。另外当然还有无数应用场景,待大家去慢慢探索。