Git服务器搭建

1、Git的简介与优缺点

什么是git?

  Git是目前世界使用最广泛的分布式版本控制系统,它是由林纳斯·托瓦兹(Linus Torvalds)创作,最初的目的是为了更好地管理Linux内核开发而设计的。

与svn对比优缺点?

  1、与svn对比最核心区别就是Git是分布式,而svn是非分布式。这主要表现在使用Git时每一个开发人员电脑本地上存在一个Local Repository,这个Local Repository包含着远程库中的所有文件,因此,即使在没网的时候也可以进行commit提交,查看历史版本记录,创建项目分支等操作,等网络再次连接上Push到Server端。

  2、Git把内容按元数据方式存储,而SVN是按文件方式存储。表现为.git文件与.svn文件大小区别很大

  3、SVN存在一个自增的全局版本号;而Git每次提交,通过对文件的内容或目录的结构计算出一个SHA-1 哈希值,得到一个40位的十六进制字符串,以此来作为版本号。

  4、Git的内容的完整性要优于SVN:Git的内容存储使用的是SHA-1哈希算法。Linux kernel开创者和Git的开发者——Linus说,Git使用了SHA-1并非是为了安全性,而是为了数据的完整性;它可以保证,在很多年后,你重新checkout某个commit时,一定是它多年前的当时的状态,完全一摸一样,完全值得信任。

  5、Git下载下来后,在OffLine状态下可以看到所有的Log,SVN不可以。

  6、SVN必须先Update才能Commit,忘记合并时就会出现一些错误,git还是比较少的出现这种情况。

  7、克隆一个新项目,Git只需克隆master分支;svn则需要复制所有的版本。Git省时。

  8、 版本库(repository):SVN只能有一个指定中央版本库。当这个中央版本库有问题时,所有工作成员都一起瘫痪直到版本库维修完毕或者新的版本库设立完成。而 Git可以有无限个版本库。或者,更正确的说法,每一个Git都是一个版本库,区别是它们是否拥有活跃目录(Git Working Tree)。如果主要版本库(例如:置於GitHub的版本库)发生了什麼事,工作成员仍然可以在自己的本地版本库(local repository)提交,等待主要版本库恢复即可。工作成员也可以提交到其他的版本库!

  9、SVN创建分支会影响其他人;Git则可以在本地创建任意分支,只要我不合并及提交到主要版本库,则不会影响任何人。
  10、提交(Commit)在SVN,当你提交你的完成品时,它将直接记录到中央版本库。当你发现你的完成品存在严重问题时,你已经无法阻止事情的发生了。如果网路中断,你根本没办法提交!而Git的提交完全属於本地版本库的活动。而你只需“推”(git push)到主要版本库即可。Git的“推”其实是在执行“同步”(Sync)。
  11、模式上会比SVN相对较复杂
 

 2、Git的安装

  安装环境:Linux  CentOS7

  我直接使用yum安装,直接在linux中执行下面两行命令

 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel    //安装依赖
 yum install git        //安装Git 也可以直接运行yum intall git  yum会自动安装软件依赖

  这样子Git环境就安装好了,接下老就是权限设置,哪些人可以访问这个Git服务器呢?

 

3、用户访问设置

  3.1、秘钥登陆类型

   1、首先创建一个用户组以及用户

1 groupadd git    //创建git用户组
2 useradd git -g git   //创建git用户,用来运行git服务

  2、收集所需登陆用户的公钥,并将公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。  

  Linux中的公钥在每个用户的home目录下(/home/用户/.ssh),没有则使用命令进行创建:ssh-keygen -t rsa

  Windowns中的公钥创建:

  使用git,打开Git Bash。
  1. 安装git,从程序目录打开 "Git Bash" 
  2. 键入命令:ssh-keygen -t rsa -C "suifengin412@gmail.com"   //红色字体可有可无
  3. 指定文件生成的目录
  4. 在指定的目录下产生两个文件:id_rsa和id_rsa.pub

  进入git家目录,将收集的公钥(id_rsa.pub里面的内容),添加到authorized_keys文件中(一行一个)。

  没有authorized_keys文件则创建:

 cd /home/git/
 mkdir .ssh
 chmod 700 .ssh
 vim .ssh/authorized_keys
 chmod 600 .ssh/authorized_keys

  注意:.ssh 目录必须是700权限、authorized_keys文件必须是600权限

  3.2、密码登陆类型

  1、创建登陆用户并添加到git用户组中

useradd -M git1        //-M 表示不创建家目录
useradd -M git2    
passwd git1  //设置密码
passwd git2
usermod -G git git1   //将新建的两个用户添加到git组中                 
usermod -G git git2 

  2、禁止新创建的用户ssh登陆linux服务器

which git-shell       //查看git-shell所在路径 (我的是:/usr/bin/git-shell)
vim /etc/passwd   //将用户名称:x:1000:1000::/home/用户名称:/bin/bash  将/bin/bash替换为git-shell所在路径

注意:

  创建用户的时候加-M,主要目的是不在home目录下生成该用户的拥有读写权限的家目录。这是因为我们创建的这些用户是用于git服务上面,并不想给用户除了git访问以外其他的权限;同理,需禁止用户通过ssh登陆linux服务器。 

 

4、初始化git服务器

  我们就选取git目录作为git的仓库

chmod g-w /home/git    //这个是必要的
cd /home/git    //进入git家目录
git init --bare test.git    //创建一个空仓库,服务器上的Git仓库通常都以.git结尾
chown -R git:git test.git/    //设置权限,因为我使用root来创建这个空仓库,因此需要变相应的权限设置
chmod  -R 775 test.git/     //设置所属组的所有权限,否则秘钥类型push不成功

  注意:变更文件的所有者以及组权限非常重要,切记。

5、克隆仓库

git clone git@git_ip:/home/gitrepo/runoob.git   //git_ip为Git所在服务器ip ,需要将其修改为你自己的 Git 服务ip。

 

6、参考资料

 1. 《话说Svn与Git的区别(以后别再问我了)》

 

(以上是自己的一些见解,若有不足或者错误的地方请各位指出)

 作者:那一叶随风   http://www.cnblogs.com/phpstudy2015-6/

 原文地址:https://www.cnblogs.com/phpstudy2015-6/p/9153497.html

 声明:本博客文章为原创,只代表本人在工作学习中某一时间内总结的观点或结论。转载时请在文章页面明显位置给出原文链接

posted @ 2018-06-10 20:44 那一叶随风 阅读(...) 评论(...) 编辑 收藏