您的位置:首页 > 其它

Git学习笔记(三)——Git远程版本库的搭建

2016-03-16 14:53 483 查看

引言

通过Git学习笔记(一)和Git学习笔记(二)的学习,我们掌握了Git的基本操作,SVN能完成的我们也可以使用Git完成了。但是Git的作为分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,每个人都是本地版本库的主人,可以在各自的本地版本库中创建各自的分支,可以独立完成各自的工作互不影响,最后再推送到远程版本库中里,这样就完成了多人协同工作,异地团队开发不再是梦。

Git远程版本库概述

Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上甚至是不同地理区域的机器上。那么如何分布呢?最早,肯定只有一台机器(作为远程版本库)有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分。在实际的项目经验中,往往是找一台电脑充当服务器的角色,每天24小时开机,项目组的成员每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自创建各自的分支,完成之后再把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。这是公司商业项目的情况,如果只是个人往往都是选择通过使用第三方的代码托管平台作为自己的“服务器”。

一、使用第三方Git代码托管平台GitHub

支持Git代码托管的平台比较多,而且都是免费的,国外的像GitHubGitlab支持无限的公有项目和私有项目、Bitbucket 免费支持5个开发成员的团队创建无限私有代码托管库 。国内的开源中国最多可以创建1000个项目,包含公有和私有,coding.net必须提的是速度快,功能与开源中国相似,CSDN代码托管等。

1 注册一个GitHub账号,就可以免费获得Git远程仓库

一般来说注册了账号之后,应该为自己的账号设置公钥,以便能够使用SSH协议读写远程版本库。

2 生成SSH Keys

在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,Linux下打开终端(Windows下打开Git Bash),创建SSH Keys可参考GitHub生成SSH Keys官方指导文档

//把邮箱替换成你自己的GitHub 邮箱地址
$ ssh-keygen -t rsa -C "youremail@example.com"


然后回车,使用默认值即可。如果创建成功的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。



3 给GitHub 配置上SSH Key

登陆GitHub,打开“Account settings”,“SSH Keys”页面:



上图中,点击 Add Key,你就应该可以看到已经添加的key



在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)

所以GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,GitHub只有知道了你的公钥,才可以保证只有你自己才能推送。

如果你既需要在公司电脑提交,又需要在家里的笔记本里提交,很简单,GitHub是支持多个SSH Key的,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

4 验证链接是否成功

在终端(Git Bash)输入以下命令

ubuntu2@ubuntu:~$ ssh -T git@github.com
The authenticity of host 'github.com (192.30.252.129)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes


以前使用svn的都知道,淘宝code—— 最给力的国内免费SVN(不限语言),异地团队开发、打造个人开源项目不再是梦那么使用Git到底有什么好处呢?最为明显的是支持Git代码托管的平台比较多,而且都是免费的。今天就为大家推荐几款比较火的Git代码托管平台

其实一台电脑上也是可以克隆多个版本库的,只要不在同一个目录下。不过,现实生活中是不会有人这么傻的在一台电脑上搞几个远程库玩,因为一台电脑上搞几个远程库完全没有意义,而且硬盘挂了会导致所有库都挂掉,所以我也不告诉你在一台电脑上怎么克隆多个仓库。

实际情况往往是这样,找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。

二、GitHub 远程版本库的使用

1、创建远程版本库使之与本地版本库关联

假设本地电脑里已创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让两者实现远程同步,这样GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协同。

1.1、登陆GitHub,在右上角找到“Create a new repo”按钮,创建一个新的仓库并命名:



1.2、关联GitHub仓库



在GitHub上的这个GitTest仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

在本地的GitTest仓库下执行:

/*把上面的crazymo替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,关联没有问题,但是无法推送,因为你的SSH Key不在我的账户列表中
远程库的名字就是origin,这是Git默认的,当然你也可以改成你喜欢的名字*/
$ git remote add origin git@github.com:crazymo/GitTest.git


1.3、把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

$ git push -u origin master


我们第一次推送master分支时,远程库是空的,加上了-u参数,Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

1.4 把本地版本库的提交推送至远程版本库

$ git push origin master


至此,你就拥有了真正的分布式版本库!每次本地提交后,就可以使用命令git push origin master推送最新修改,分布式的优势在于在本地工作完全不需要考虑远程库的存在,无论是否联网都可以正常工作,现在本地修改,当有网络的时候,再把本地提交推送至远程版本库。

2 、克隆远程库到本地

那么假设我们从零开发,那么最好的方式是先创建远程库,然后从远程库克隆到本地

2.1 登陆GitHub,创建一个新的仓库,名字叫GitTest02



勾选箭头处的按钮,GitHub会自动为我们创建一个README.md文件。

2.2 克隆远程版本库至本地

执行git clone命令

git clone git@github.com:crazymo/GitTest02.git


2.3 把本地版本库的修改推送至远程版本库

如果在本地版本库的工作工程目录中继续添加了文件,就可以先把所有文件add到版本控制中去:

git add .git commit -m "我在本地做了修改"


然后将提交的内容同步到远程版本库即GitHub上

git push origin master


git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等。

三、搭建自己的Git服务器

搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu

1、安装Git

$ sudo apt-get install git


2、创建一个Linux用户gitadmin运行Git服务

$ sudo adduser gitadmin


3、创建证书登录

把所有需要登录的用户的公钥即他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

4、初始化Git仓库并把Owner改为运行Git服务的用户

选定一个目录/exp/gitbank.git作为Git仓库,在该目录下输入

///在/exp目录下输入命令
$ sudo git init --bare gitbank.git


执行之后Git会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了协同共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。

$ sudo chown -R gitadmin:gitadmin gitbank.git


5、禁用shell登录:

出于安全考虑,第二步创建的gitadmin用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

gitadmin:x:1001:1001:,,,:/home/gitadmin:/bin/bash


改为

gitadmin:x:1001:1001:,,,:/home/gitadmin:/bin/bash


这样该用户可以正常通过ssh使用Git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

6、克隆远程仓库

$ git clone git@server:/exp/gitbank.git
Cloning into 'gitbank'...
warning: You appear to have cloned an empty repository.


除了后面的还有一些公钥管理和权限管理,再搭配Gerrit 审核提交,Git服务器搭建工作基本结束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: