一、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分支