1.8 和远程仓库的那些事
如果只是在一个仓库里管理文件历史,Git和SVN真没啥区别。
远程仓库是 Git 的杀手级功能之一(注意是之一,也就是后面还有之二,之三……)。
生产环境中的实际情况往往是这样,找一台电脑充当 Git 服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。
那现在是不是需要搭建一台 Git 服务器,来作为远程仓库呢?如何搭建 Git 服务器,稍后我们再谈。
目前互联网上已经存在了这样的网站,可以提供 Git 服务器,并且大部分情况下是免费的。
GitHub 网站你知道吧,这是一个神奇的网站,它就可以充当我们的远程仓库。
要想使用 GitHub 作为我们的远程仓库,只需要注册一个账号即可,当然这是免费的。
GitHub 虽然是免费的,但是指针对于你创建的公共仓库;什么是公共仓库?就是放在仓库里的代码互联网的任何用户都可看到,并且可以拉取等操作。要想创建私有仓库,需要花钱。
所以目前大部分公司使用另一个网址的服务 GitLab ,这个网站和 GitHub 唯一的区别是,可以为普通用户提供创建私有仓库,并且为这个私有仓库提供权限服务,免费。
所以我们接下来主要介绍 GitLab 的使用。
1.81 注册 gitlab 账号
网址 https://about.gitlab.com/
填写信息
见到下方图片内容后,就可以去邮箱进行确认了
邮箱确认
确认后,重新打开 GitLab 网站进行登录
1.8.2 创建一个仓库
创建一个私有仓库
填好注册的相关信息后点击绿色的 Create project
按钮进行创建
1.8.3 和远程仓库建立SSH
信任关系
由于 GitLab 和 GitHub 都是用 SSH 协议对你的本地Git仓库和GitHub仓库之间的传输进行加密传输的。
为什么需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送,所以,需要一点设置
我们这里选择是 SSH
的通信方式,所以执行相关操作前,需要先解决本地机器和远程仓库的服务器之间的 SSH 信任关系,需要让远程仓库的服务器信任我们本地的机器。
只需要把本地的公钥传给远程仓库的服务器即可。
- 首先在本地机器上创建自己的密钥对
[shark@git ~]$ ssh-keygen # 一路敲回车键即可
-
复制自己的公钥内容
用 vim 打开公钥文件,之后赋值文件的整个内容
[shark@git ~]$ vim ~/.ssh/id_rsa.pub
-
添加公钥
在刚才的
GitLab
创建仓库的页面上,点击头像,再点击Settings
在弹出的网页左侧边栏,点击 SSH Keys
把自己的公钥内容添加到远程仓库 GitLab
网站上
-
回到自己新建仓库的页面
- 继续按照提示执行相关命令
设置本地仓库和 GitLab 仓库的通信方式为 SSH
在本地 Linux 机器上按照不同的情况执行如下命令
应该在每台需要给这个 GitLab 仓库建立联系的 Linux 机器上执行这些操作
我这里选择第一种,就是本地没有仓库,比如我要在我的家目录下建立仓库,做如下操作即可:
[shark@git ~]$ pwd
/home/shark
[shark@git ~]$ git config --global user.name "sharkyun"
[shark@git ~]$ git config --global user.email \
"[email protected]"
[shark@git ~]$ git clone \
[email protected]:sharkyun/my_project_one.git
克隆成功后,在当前目录下会有一个和你远程仓库同名的一个目录。
这个目录就是本地的仓库了。
- 测试本地仓库
接下来继续按照 GitLab 网站上的提示,在这个本地仓库里创建测试文件并提交到本地仓库,最后同步到远程仓库(即: GitLab)
[shark@git ~]$ cd my_project_one/
[shark@git my_project_one]$ touch README.md
[shark@git my_project_one]$ git add README.md
[shark@git my_project_one]$ git commit -m "add README"
[master(根提交) 5e2b547] add README
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
[shark@git my_project_one]$ git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 211 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:sharkyun/my_project_one.git
* [new branch] master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
[shark@git my_project_one]$
- 验证远程仓库
1.8.4 总结
# 克隆一个远程仓库到本地
git clone [email protected]:sharkyun/my_project_one.git
# 推送本地仓库的内容到远程仓库, 只有在第一次是使用 -u 之后不必再用 -u 参数
git push -u origin master
# 以后再此同步使用如下命令即可
git push origin master
# origin 默认的远程仓库名
# master 本地仓库名
最后有彩蛋赠送 git 和 github 的合作