git服务器的建立
git简介
git安装
git安装
- sudo apt-get install git-core
- ps -ef|grep "sshd"
如果你能看到一些sshd相关的进程信息,则说明你已经有这个服务了,否则(或者你想更新的话),使用下面的命令安装openssh
- sudo apt-get install openssh-server openssh-client
然后,安装git“服务器”
- sudo apt-get install git-core
再然后,为自己配置身份信息,这样多个人提交代码的时候,就可以方便的查看是谁提交的,该如何联系ta了(如果该机器只做服务器,不做开发,本步骤应该可以省略)
- git config --global user.name "yourname"
- git config --global user.email "your@email.com"
- sudo useradd -m git
- sudo passwd git(change to yours)
说明:上述命令生成一个用户名与密码均为git的账户,也可以自己创建别的用户名跟密码,只要进行相关操作(比如clone)时指定用户名即可(本文章一律以git为例),-m 选项是让其在home目录下生成用户的主文件夹,我们的代码仓库会布置在这个主文件夹下。
- sudo mkdir /home/git/repositories # 最好使用repositories作为文件夹名称,这样可以简化后面的操作
- sudo chown git:git /home/git/repositories
- sudo chmod 755 /home/git/repositories
至此,一个简单(非常简单)的git服务器已经搭建好了,可以自己创建一个简单的工程测试一下。
为了方便后面的操作,我们先切换到git用户下
- su git
在respositories下新建一个目录(仓库),并切换到这个目录
- mkdir helloworld
- cd helloworld
在此处初始化一个空的仓库(只能接受push/pull代码,不能本地commit)
- git --bare init
好了,一个空的仓库建立好了,用另外一台安装了git的机器(比如你的开发机)测试一下,此处假设你上面所用的服务器IP为192.168.0.123
- git clone git@192.168.0.123:/home/git/repositories/helloworld
然后在开发机上进行一些基本操作测试:为这个项目add一些文件,然后commit,然后push,如果除了要几次输入git用户的密码外,其他一切正常的话,那说明上面的安装与配置就已经成功了
在上面的测试过程中,是不是发现那个clone的路径好长,很容易错?几个步骤都需要输入git用户的密码(clone、push),是不是很烦,而且照这个节奏,每增加一个开发成员,就得告诉他git用户的密码,是不是既繁琐又不安全?所以,如果能clone的时候只要指定项目名称,clone/push/pull自动完成身份认证,并且最好能对不同的仓库给予不同用户不同的权限,那就好了!接下来介绍的工具与配置就可以搞定这一切,让git仓库的管理变得更简单,操作更方便!
- # 某开发机上
- ssh-keygen #接下来一路回车就好了,在默认目录下生成默认密钥文件
- cp ~/.ssh/id_rsa.pub /path/to/one/visiabl/fold/ #将隐藏文件夹下的公钥文件拷贝到一个可以文件夹下(如果接下来用scp提交,此步骤可省略)
- # 将上面的公钥文件以某种方式提交给服务器
- # 管理员在服务器下
- # 将开发机提交上来的公钥文件,添加到/home/git/.ssh/authorized_keys文件中(每行一个)
gitolite安装
- su git
上面说过,gitolite本质就是根据你的配置,自动生成authorized_keys文件,所以它要求你的authorized_keys文件必须是空的,或者不存在,所以我们干脆删了它(请注意一定要切换到git用户,否则,误删除了其他用户下的authorized_keys文件导致服务器的其他功能受影响,那就悲剧了,这应该也算是为什么要专门弄一个git用户来管理的原因吧)
- rm ~/.ssh/authorized_keys
然后,gitolite在初始化时需要通过某一用户的公钥文件指定一个超级管理员,gitolite安装成功后,只有这个超级管理员可以更新gitolite以更新各种权限控制(包括对其自身的更新权限控制),所以在初始化时需要指定该超级管理员账户的公钥文件(最好直接将其拷贝到git用户的主文件夹下)(下面的示例程序使用同一服务器上的另一常用管理员用户admin)
- su admin
- ssh-keygen
- sudo cp ~/.ssh/id_rsa.pub /home/git/id_rsa.pub
- su git
好~准备工作已经完成了,开始安装gitolite
- cd ~ # 回到git主文件夹下
- git clone git://github.com/sitaramc/gitolite # 获取gitolite的源码
- mkdir -p $HOME/bin #为gitolite的二进制文件生成创建目录
- gitolite/install -to $HOME/bin # 编译生成安装文件
- $HOME/bin/gitolite setup -pk id_rsa.pub # 安装并初始化,指定id_rsa.pub公钥文件对应的用户为超级管理员
Bingo! gitolite安装完成!不过,你要用它来进行管理,那还需要一定的操作。上面提到,gitolite安装后本身是一个特殊的git版本库——gitolite-admin,分布式的进行修改,然后通过push的方式提交,其会通过钩子脚本执行权限更新。看一下上述步骤的最后一步你会发现,gitolite自动生成了两个版本库:gitolite-admin.git和testing.git,其中的gitol-admin.git就是那个特殊的神奇版本库。所以,接下来我们要做的,就是回到你刚刚指定的超级管理员账户的电脑跟账户下,clone出gitolite-admin这个特殊的git版本库(当前情况下,只有该超级管理员账户可以clone并更新gitolite-admin这个版本库),然后根据自己的需要对其进行配置(如添加更多的管理员账户、添加新的版本库并为不同的用户指定权限)
- su admin # 回到指定的超级管理员账户
- git clone git@192.168.0.123:gitolite-admin.git # clonegitolite-admin这个特殊的版本库
如果上面的步骤都成功了的话,应该可以查看到有一个gitolite-admin的文件夹,文件夹下有两个目录conf、keydir
- # 假设你之前创建了helloworld版本库,现在使用git clone git@192.168.0.123:helloworld试图clone
- FATAL: R any helloworld id_rsa DENIED by fallthru
- (or you mis-spelled the reponame)
- fatal: The remote end hung up unexppectedly
- repo helloworld
- RW+ = id_rsa
3、commit到本地
- git commit -am 'add the helloworld repo and add RW+ to id_rsa'
4、push到git仓库
- git push
如果push成功,当前超级管理员用户应该就可以成功clone helloworld版本库,并进行添加、删除、修改与push等操作了。
git基本操作
1.在服务器端创建专用帐号,所有用户通过此帐号访问git库,一般方便易记,选择git作为专用帐号名称。
$sudo adduser --system --shell /bin/bash --group git
添加git用户到ssh用户组中
$sudo adduser git ssh
为git用户设置口令,当整个git服务配置完成,最好取消git口令,只允许公匙认证。
$sudo passwd git
2.到管理员主机将管理员公匙添加到服务器主机的.ssh/authorized_keys文件中,建立新的公匙认证,如:
$ssh-copy-id -i .ssh/<filename>.pub git@server
3.服务器切换到git用户
$su git
安装gitolite
$sudo apt-get install gitolite
执行gitolite安装
$gl-setup /<filename>.pub 以管理员公匙安装gitolite
安装过程会询问是否修改配置文件,一般会自动打开vi编辑.gitolite.rc文件。有些配置需要修改
$REPO_BASE="repositories"
用于设置Git服务器的根目录,缺省是git用户主目录下的repositories目录,可以使用绝对路径。所有git库都
部署在该路径下。
$REPO_UMASK=0007;#gets you 'rwxrwx--'
版本库创建使用的掩码。即新建立的版本库权限为‘rwxrwx’
$GL_BIG_CONFIG=0
如果授权文件非常复杂,更改此项配置为1,以免产生庞大的授权编译文件。
$GL_DILDREPOS=1
支持通配符版本库授权。
退出保存。
如果安装时没有配置,后续可以打开git用户跟目录下.gitolate.rc文件配置。
4.管理gitolite
当gitolite安装完成后,在服务器端创建了一个用于管理gitolite的库gitolite-admin.git
切换到管理员主机 $git clone git@server:gitolite-admin.git
$cd gitolite-admin
$ls -F
conf/ keydir/
$ls /conf
gitolite.conf
$ls keydir/
<filename>.pub
我们可以看出gitolite-admin目录下有两个目录conf/和keydir/.
keydir/<filename>.pub文件
目录keydir下初始时只有一个用户公匙,及管理员用户的公匙。
conf/gitolite.conf文件
该文件为授权文件,初始内容为
#gitolite conf
# please see conf/example.conf for details on syntax and features
repo gitolite-admin
RW+ = admin
repo testing
RW+ = @all
缺省授权文件中只设置了两个版本库的授权:
gitolite-admin
即本版本库(gitolite管理版本库)只有 admin 用户有读写和强制更新的权限。
testing
缺省设置的测试版本库,设置为任何人都可以读写以及强制更新。
5.增加新用户
只用将信用户的公匙添加到gitolite-admin版本库的Keydir目录下,即完成新用户的添加。如:
$ cp /path/to/dev1.pub keydir/
$ cp /path/to/dev2.pub keydir/
$ cp /path/to/jiangxin.pub keydir/
执行 git add 命令,将公钥添加入版本库。
$ git add keydir
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: keydir/dev1.pub
# new file: keydir/dev2.pub
# new file: keydir/jiangxin.pub
#
$ git commit -m "add user: jiangxin, dev1, dev2"
[master bd81884] add user: jiangxin, dev1, dev2
3 files changed, 3 insertions(+), 0 deletions(-)
create mode 100644 keydir/dev1.pub
create mode 100644 keydir/dev2.pub
create mode 100644 keydir/jiangxin.pub
执行 git push,同步到服务器,才真正完成新用户的添加。
$ git push
Counting objects: 8, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 1.38 KiB, done.
Total 6 (delta 0), reused 0 (delta 0)
remote: Already on 'master'
remote:
remote: ***** WARNING *****
remote: the following users (pubkey files in parens) do not appear in the config file:
remote: dev1(dev1.pub),dev2(dev2.pub),jiangxin(jiangxin.pub)
6.更改授权
新用户添加完毕,可能需要重新进行授权。更改授权的方法也非常简单,即修改 conf/gitolite.conf 配置文件,提交并 push。
管理员进入 gitolite-admin 本地克隆版本库中,编辑 conf/gitolite.conf 。
$ vi conf/gitolite.conf
授权指令比较复杂,我们先通过建立新用户组尝试一下更改授权文件。
考虑到之前我们增加了三个用户公钥之后,服务器端发出了用户尚未在授权文件中出现的警告。我们就在这个示例中解决这个问题。
例如我们在其中加入用户组 @team1,将新添加的用户 jiangxin, dev1, dev2 都归属到这个组中。
我们只需要在 conf/gitolite.conf 文件的文件头加入如下指令。用户之间用空格分隔。
@team1 = dev1 dev2 jiangxin
编辑结束,提交改动。
$ git add conf/gitolite.conf
$ git commit -q -m "new team @team1 auth for repo testing."
执行 git push ,同步到服务器,才真正完成授权文件的编辑
7.创建仓库示例
在conf/gitolite.conf中添加类似下面的内容进去
repo notes
PW = <filename>
保存,提交,并推送到服务器
git add -u
git commit -m 'add new repo notes '
git push
推送的时候应该看到类似这样的信息
Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 395 bytes, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: Initialized empty Git repository in /home/git/repositories/notes.git/
To git@desktop:gitolite-admin
6de90b8..52737aa master -> master
注意remote开头的一行,它已经帮你创建了这个仓库
通配符创建仓库示例
通配符仓库事先不能确定名字,所以不会帮你创建,在你clone的时候才会创建
编辑conf/gitolite.conf文件在里面加入类似下面的内容
repo e2source/.+$
C = <filename>
RW+C = <filename>
注意C = username的一行必不可少,这里的C是指创建仓库的意思,下一行的RW+C中的C是指创建引用(branch,tag)的意思
保存后提交并推送到服务上去
git add -u
git commit -m 'add wildcard repo'
git push
注意看push时输出的信息,应该没有创建仓库的信息
这时filename克隆仓库的时候会自动创建
# as filename user
git clone git@server:e2source/enigam2-plugins.git
输出应该类似这样
Cloning into 'enigam2-plugins'...
Initialized empty Git repository in /home/git/repositories/e2source/enigam2-plugins.git/
warning: You appear to have cloned an empty repository.
如果你的输出报这样的错
FATAL: R any e2source/enigam2-plugins jenny DENIED by fallthru
(or you mis-spelled the reponame)
fatal: The remote end hung up unexpectedly
一般是没有C = username这一行,注意是只有C的一行
git服务器的建立的更多相关文章
- git服务器的建立——Git折腾小记
转自:http://blog.csdn.net/xsl1990/article/details/25486211 如果你能看到一些sshd相关的进程信息,则说明你已经有这个服务了,否则(或者你想更新的 ...
- 向 Git 服务器添加 SSH 公钥
. . . . . 在网上很少找到文章有提到如何将自己的 Git 远程仓库配置成可以通过 SSH 公钥方式认证的,而几乎清一色都是告诉你怎么通过 web 界面向 GitHub 添加 SSH 公钥.LZ ...
- Git服务器搭建及SSH无密码登录设置
在Git服务器中建立一个git帐号,用于多人使用. adduser git输入此命令后,会在/home/下建立一个git文件 /home/git 下建立.ssh目录(注意,是.ssh..有个点!) c ...
- (转)初学Git及简单搭建git服务器和客户端
终于搞定,mac自己作为git服务器,mac也是客户端,如何免登 从另外一个linux服务器的上传公钥得到提示 ssh-copy-id -i ~/.ssh/id_rsa.pub git@192.168 ...
- 利用阿里云搭建私有Git服务器
服务器系统:Centos 6 (查看centos版本命令:lsb_release -a) 客户端系统:Windows 7 一.服务器端安装Git ==通常centos上使用yum源安装的git版本过低 ...
- 向git服务器添加shh公钥
步骤一,从客户端获得 SSH 公钥 为了使客户端可以向 Git 服务器提供 SSH 公钥,首先要确认客户端拥有公钥.SSH 的密钥存储在 ~/.ssh/ 目录下,下面我们查看一下这里面都有哪些文件: ...
- 搭建Git服务器及本机克隆提交
前文 Git是什么? Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首 ...
- 创建SSH keys用于添加到Git服务器上
SSH keys SSH key 可以让你在你的电脑和Git服务器之间建立安全的加密连接.先执行以下语句来判断是否已经存在本地公钥: cat ~/.ssh/id_rsa.pub 如果你看到一长串以 s ...
- docker中建立私有git服务器[gitlab]
现在使用git的很普遍,在开发内部如何建立个git服务器,本文以gitlab为例,让你分分钟就可以搭好一个环境[docker的威力非同一般] 首先在docker.com找到gitlab的下载源和信息, ...
随机推荐
- leetcode-169求众数
求众数 思路: 记录每个元素出现的次数,然后查找到众数 代码: class Solution: def majorityElement(self, nums: List[int]) -> int ...
- YOLOv3测试命令
一.老规矩 在darknet\build\darknet\x6下按住shift键,点击鼠标右键选择“在此处打开Powershell 窗口(s)” 二.测试图片命令: .\darknet detect ...
- echarts的简单应用之(二)饼图
接上一篇文章: echarts的简单应用之(一)柱形图:https://www.cnblogs.com/jylee/p/9359363.html 本篇文章讲述饼图,撇过折线图不说,是因为折线图与柱形图 ...
- 算法(1):查找&排序
算法(Algorithm):一个计算过程,解决问题的方法 程序 = 数据结构+算法 时间复杂度: 当算法过程中出现循环折半的时候,复杂度式子中会出现 O(logn) 时间复杂度小结: 1. 时间复杂度 ...
- Django开发:(3.1)ORM:单表操作
MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需 ...
- Codeforces 777E(离散化+dp+树状数组或线段树维护最大值)
E. Hanoi Factory time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- [bzoj2527][Poi2011]Meteors_整体二分_树状数组
Meteors bzoj-2527 Poi-2011 题目大意:题目链接. 注释:略. 想法: 首先答案可以离线,且具有单调性. 这里的单调性就是随着时间的推移,每个国家收集的陨石数增加. 不难想到整 ...
- intellij使用tomcat搭建servlet运行时环境
http://suiyu.online/2017/08/01/intellij%E4%BD%BF%E7%94%A8tomcat%E6%90%AD%E5%BB%BAservlet%E8%BF%90%E8 ...
- ubuntu Install Firefox
Firefox 下载文件以.tar和.bz2格式保存,必须从这些压缩包中提取文件.不想删除当前安装的 Firefox,给每个版本的 Firefox 创建一个单独的文件夹. 例如:1.Firefox 版 ...
- Alluxio增强Spark和MapReduce存储能力
Alluxio的前身为Tachyon.Alluxio是一个基于内存的分布式文件系统:Alluxio以内存为中心设计,他处在诸如Amazon S3. Apache HDFS 或 OpenStack Sw ...