zoukankan      html  css  js  c++  java
  • ubuntu下搭建git服务器

    1、安装 openssh和git

    sudo apt-get install openssh-server openssh-client git-core

    2、创建个人公钥和私钥

    在默认用户的主目录路径下,运行以下命令,按照提示创建公钥和私钥

    ssh-keygen -t rsa

    3.配置openssh服务器

    $vi /etc/ssh/sshd_config(本例此处不做任何配置即可)
       Port 22 # 修改成你想要的登陆端口,如2222
       PermitRootLogin no # 禁止root用户登陆
       StrictModes yes # 检查密钥的用户和权限是否正确,默认打开的
       RSAAuthentication yes # 启用 RSA 认证
       PubkeyAuthentication yes # 启用公钥认证
       PasswordAuthentication no # 禁止密码认证,默认是打开的
       ServerKeyBits 1024 # 修改后变为此状态,将ServerKey强度改为1024比特
       PermitEmptyPasswords no # 修改后变为此状态,禁止空密码进行登录
    $/etc/init.d/ssh restart

    4、配置 git服务器

    创建git服务器管理用户

    sudo useradd -m git
    sudo passwd git
    

    创建git仓库存储目录

    sudo mkdir /home/git/repositories
    

    设置git仓库权限

    sudo chown git:git /home/git/repositories
    sudo chmod 755 /home/git/repositories
    

    初始化全局设置

    git config --global user.name "myname"
    git config --global user.email "myname@server"

    5、安装python的setup tool

    sudo apt-get install python-setuptools
    

    6、获取并安装gitosis

    cd /tmp
    git clone https://github.com/res0nat0r/gitosis.git
    cd gitosis
    sudo python setup.py install
    

    7、配置gitosis

    cp ~/.ssh/id_rsa.pub /tmp
    sudo -H -u git gitosis-init < /tmp/id_rsa.pub
    sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
    

    8、管理gitosis配置

    cd ~
    git clone git@your_serverip:gitosis-admin.git
    cd gitosis-admin/
    

    各个用户按照前面提到的办法生成各自的ssh公钥文件后,服务器管理员把所有人的 ssh公钥文件都拿来,拷贝到keydir目录下。

    修改gitosis.conf文件,如下所示

    [gitosis]
    
    [group gitosis-admin]
    writable = gitosis-admin
    members = a@server1
    
    [group developers]
    writable = helloworld
    members = a@server1 b@server2
    
    [group test] 
    readonly = helloworld
    members = c@server3
    

    这个配置文件表达了如下含义:gitosis-admin组成员有a,该组对gitosis-admin仓库有读写权限; developers组有a,b两个成员,该组对helloworld仓库有读写权限; test组有c一个成员,对helloworld仓库有只读权限。 当然目前这些配置文件的修改只是在你的本地,你必须推送到gitserver上才能真正生效。 加入新文件、提交并push到git服务器:

    git add .
    git commit -am "add helloworld project and users"
    git remote add origin ssh://git@your_serverip/helloworld.git
    git push origin master

    9.添加新项目

    好了,现在服务器已经搭建完了。并且有一个空的项目helloworld在项目上。接下来,当然是测试一下,空仓库是不能clone的。需要某一个有写权限的人去初始化一个版本。

    cd ~
    mkdir test
    echo "/*add something*/" > hello
    git init
    git add .
    git commit -am "init version"
    git remote add origin git@<server_ip>:helloworld.git
    git push origin master
    
    

    本地测试

    mkdir test1
    git clone git@SERVER_HOSTNAME:helloworld.git
    
    10.添加新用户

    假设我们要添加的用户为jeremy,那么需要创建key pair:

    ssh-keygen -t rsa

    假设生成的public key为~/.ssh/jeremy.pub

    cd gitosis-admin

    修改gitosis.conf,修改后为如下:

    [group developers]
    writable = helloworld
    members = a@server1 b@server2 jeremy

    注意.pub文件名和你要在members中添加的用户名以及.pub文件末尾的名字要完全一样。

    拷贝jeremy.pub到keydir中:

    cp ~/.ssh/jeremy.pub keydir/

    把更改push到gitosis-admin.git:

    git commit -a -m "添加jeremy到test仓库"
    git push

    接下来把private key分发给jeremy,然后他就可以从自己的机器上进行clone了:

    git clone git@SERVER_HOSTNAME:hellworld.git

    11.其他

    如果SSH使用的不是22端口,那么请如下修改:

    vi ~/.ssh/config
    Host myserver.com
    Port 2345 

    12.常见问题

    ERROR:gitosis.serve.main:Repository read access denied

    原因:gitosis.conf中的members与keydir中的用户名不一致,如gitosis中的members = foo@bar,但keydir中的公密名却叫foo.pub

    解决:使keydir的名称与gitosis中members所指的名称一致。改为members = foo 或 公密名称改为foo@bar.pub


    注:windows下git服务器的搭建参考

    http://www.timdavis.com.au/git/setting-up-a-msysgit-server-with-copssh-on-windows/ 


    参考文章:

    http://wiki.ubuntu.org.cn/Git%E6%9C%8D%E5%8A%A1%E5%99%A8Gitosis%E5%AE%89%E8%A3%85%E8%AE%BE%E7%BD%AE

    http://weizhifeng.net/build-git-server-with-gitosis.html


  • 相关阅读:
    数组review
    算法复杂度分析
    利用栈判断括号是否匹配(Parentheses)
    java实现stack和queue
    路由器结构
    层次化路由简介
    es 嵌套对象和父子文档对比
    远心镜头的远心度
    Delphi编程细节汇总
    halcon深度学习总结(二)
  • 原文地址:https://www.cnblogs.com/chengliu/p/3636350.html
Copyright © 2011-2022 走看看