git + gitolite 搭建版本管理服务器 及操作使用说明

一、GIT安装及使用说明

1、不同系统安装git及设置

yum install git #centos
apt-get install git #ubuntu
#mac 安装需要两步如下:
homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” #mac step1
brew install git #mac step2

2、安装好git后,配置用户名和用户邮箱,以后每次与Git的交互都会使用该信息。

git config --global user.name “your_name"  #设置用户名
git config --global user.email "your_email@gmail.com”  #设置邮箱
进入项目目录
git init #初始化项目仓库
git config core.ignorecase false  #大小写敏感
git commit -ma “第一个版本存储到本地仓库"

3、服务器端git用户设置

$ adduser git #添加用户git
$ passwd git password123. #设置用户git的密码
阻止git用户组的ssh登录 (找到类似于):
$ vi /etc/passwd
git:x:1001:1001:,,,:/home/git:/bin/bash
#改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

4、本地RSA证书 免密登录设置
通信的时候,客户端与服务器需要一个证书进行免密验证。
4.1、在本地电脑上(mac/ubuntu/centos)生成自己的一个公钥:

$ cd ~
$ ssh-keygen -t rsa
#或者 
$ ssh-keygen -t rsa -C "youremail@example.com"

本地电脑上会生成一个公钥: id_rsa.pub,在~/.ssh目录下,复制里面的所有字符串,放到服务器端做git免密登录用。

$ cd ~/.ssh
$ cat id_rsa.pub #复制里面的所有字符串

4.2、服务器端配置RSA证书公钥:

$ cd /home/git/ #进入git对应的目录
$ mkdir .ssh
$ cd .ssh
$ vi authorized_keys

如果是裸机,服务器上面/home/git目录下应该没有.ssh目录,所以我们自己创建,打开(自动创建)authorized_keys之后,把 4.1 步骤里复制下来的公钥黏贴进去,ok了,保存退出。
使用证书,主要是为了免密 登录&提交代码。

5、git服务器端 远程仓库创建
服务器端操作

$ cd /var
$ mkdir git
$ chown -R git:git git
$ chmod -R 777 git
$ cd git
#然后初始化一个仓库:
$ git init --bare test.git

初始化完成之后,这个空的仓库就OK了。
注意:.git目录必须要有可读写权限,因为在push的时候,是使用git用户推送到服务器上面去,会有一个写入的过程,如果不赋予可写权限,push就会失败。

6、本地Git操作:

$ git add . #提交修改到本地缓存 
$ git commit -m "本次提交注释" #提交修改到本地仓库,中文注释有时候终端会崩溃
$ git push #推送到远端
$ git checkout -- readme.txt #把readme.txt文件在工作区做的修改全部撤销,

这里有2种情况,如下:
readme.txt自动修改后,还没有放到暂存区,使用 撤销修改就回到和版本库一模一样的状态。
另外一种是readme.txt已经放入暂存区了,接着又作了修改,撤销修改就回到添加暂存区后的状态。
注意:命令 git checkout -- readme.txt 中的 – 很重要,如果没有 – 的话,那么命令变成创建分支了。
只要没有commit之前,如果我想在版本库中恢复此文件如何操作呢?
可以使用如下命令

git checkout -- b.txt

7、本地连接Git服务器:

$ git clone git@47.104.92.84:/var/git/test.git #输入密码后,就克隆到了一个远端版本库
$ git remote add origin git@47.104.92.84:/var/git/test.git #添加远端仓库到当前目录,以后所有的git远程操作都对应改远程库
$ git remote -v #查看当前配置的远端仓库 -v带详细地址
$ git branch #查看本地分支
$ git branch -r #查看远端分支
$ git push -u origin master #本地推送到服务器 master分支
$ git fetch [repo] [remote_branch] #拉取仓库repo 的 remote_branch分支
$ git merge branch_name #合并branch_name到当前分支
# 可以这样理解:git pull = git fetch + merge to local

8、主程操作指南
版本更新操作 (流程:拉取远端库->修改差异->本地更新版本库->本地新版本推送到远端库)

$ git remote add origin git@47.104.92.84:gitolite-admin.git #连接远端仓库
$ git fetch origin #拉取远端库,不与本地合并,不要用pull
$ git checkout -b dev #新建并切换到 dev 分支
# 修改差异文件代码,并去掉差异标志后
$ git commit -am "已修改差异文件" #本地更新版本库
$ git merge master --allow-unrelated-histories #本地dev分支合并到本地master分支, 允许未关联记录
$ git checkout master #切换到本地 master分支
$ git merge --no-ff dev #合并dev到当前master分支
$ git push origin master #本地master分支推送到远端分支 如果加-f强制推送,忽略错误

其他操作:

$ git rebase master #更新master的信息到当前dev分支(假设当前分支是dev)
$ git branch –no-merged #查看哪些分支未合并入当前分支
$ git branch -d mybranch #删除分支

二、Gitolite安装及使用说明
优先看官方文档: http://gitolite.com/gitolite/fool_proof_setup/

1、创建本地机器的公私钥

$ ssh-keygen -f ~/.ssh/git_admin
#然后将生成的 git_admin.pub 上传到服务器(下面暂时放在了 /tmp 目录下),暂时不要将公钥放在 ~/.ssh/authorized_keys 中

2、安装gitolite

#在git用户的家目录/homt/git 执行
$ git clone https://github.com/sitaramc/gitolite
#当前目录会生成gitolite
$ mkdir bin
$ ./gitolite/install -ln

3、公钥设置

$ gitolite setup -pk ~/.ssh/git_admin.pub # 本地上传到服务器的pubkey所在路径
#生成两个仓库
#gitolite-admin.git是用户权限管理的仓库

4、仓库添加与管理

$ cd ~/.ssh/
$ vi config

并写入如下配置

host git-server
user git
hostname 47.104.92.84
port 22
identityfile ~/.ssh/git_admin  #用户认证的密钥
host git-server
user admin
hostname 47.104.92.84
port 22
identityfile ~/.ssh/admin
$ git clone git-server:gitolite-admin.git  #将 gitolite-admin.git 仓库克隆到本地

本地进入 gitolite-admin目录 中会有如下两个目录

conf   keydir

conf/gitolite.conf 用于管理仓库和用户权限,例如下图包含了两个仓库,如果需要添加仓库,只需要按照格式添加,然后推到服务器就可以了
keydir/ 该目录存放了用户的公钥文件,推到服务器后 gitolite 会自动将其权限添加到 ~/.ssh/authorized_keys 文件中

5、修改管理员的公钥
上面设置了 git 账号,所以在这一步中一定要切换到 git 账号才能操作,否则 gitolite 会把配置文件写到其他用户的根目录下。

$ su git
$ gitolite setup -pk  new_admin.pub

6、修复管理员的权限
当管理员的权限被破坏后(比如不小心将 RW 权限去掉了),可以登录到服务器,切换到 git 账号,执行下面的命令

$ git clone /home/gitadmin/repostories/gitolite-admin.git
#将管理仓库克隆下来,修改相应的文件(conf/gitolite.conf),然后执行
$ gitolite push  # (也可能是 gitolite push -f)  , 将修改推送并应用权限即可

7、权限管理配置
7.1 添加用户

 $ scp 用户名.pub git@ip:gitolite-admin/keydir #将pub公钥拷贝到gitolite-admin仓库

7.2 添加仓库

$ vi gitolite-admin/conf/gitolite.conf 

修改其中内容如下

   /*
    repo gitolite-admin
         RW+         =     git admin
    repo demo
         RW          =     git admin test wanghui wangkun
    repo testing
         RW+         =     @all

   */

repo 代表是创建了一个demo仓库
RW+ 代表可读
等号后面的代表是此仓库的权限用户,多用户使用空格隔开。

8、本地添加仓库、用户,并push到git服务器:
本地工作台(macbook)当前目录(比如: /Users/zhangwei/gitadmin):

$ git clone git@47.104.92.84:gitolite-admin.git
$ ls
# gitolite  gitolite-admin  testing
$ cd gitolite-admin
$ ls
# conf  keydir
$ cd keydir
$ ls
# admin.pub wanghui.pub
$ vi zhangke.pub #公钥复制进去,并保存
$ ls
# admin.pub wanghui.pub    zhangke.pub
$ cd ..
$ cd conf
$ ls
# gitolite.conf
$ vi gitolite.conf

修改内容如下:

    repo gitolite-admin
        RW+     =       admin wanghui
    repo wanghui
        RW+     =       admin wanghui zhangke #zhangke是新增的用户,对应公钥文件../keydir/zhangke.pub,保存退出
    repo testing
        RW+     =       @all

然后继续

$ cd ..
$ git add .
$ git commit -m "add keydir/wangkun.pub  and add user wangkun to repo: admin.git"
$ git push

如果推送出错,原因及解决办法如下

可能权限不足:更改git用户组的ssh权限

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

不同项目合并:

git push origin master --allow-unrelated-histories #允许不同的项目合并

远程与本地历史版本有冲突:

git push —-force origin #强制推送

本地与远端仓库未建立对应关系:

git push -u origin master:branch_wanghui #本地master分支 对应远端 branch_wanghui分支
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值