• 搭建Git服务器


    备注:

    本文参考于廖雪峰老师的博客Git教程。依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查看原文。

    知识点

    • apt-get install git安装git,创建用户adduser username

    • 新用户家(home)目录下.shh/authorized_keys存放管理连接到Git远程仓库的用户的私钥。

    • git init --bare reponame.git创建一个空的远程仓库,并将此远程仓库所在目录及子目录的拥有者设置为新用户,chown -R username:usernameGroup sample.git/

    • 修改/etc/passwd文件,禁用用户shell终端登陆。

    搭建Git服务器

    Git远程仓库本质上和本地仓库没有任何区别,只是它能提供永久在线服务

    如下演示在Ubuntu上搭建Git服务器

    • 安装git:
    $ sudo apt-get install git
    
    • 创建一个git用户,用来运行git服务
    $ sudo adduser git
    

    使用passwd git为git用户修改密码。

    • 创建证书登陆

    创建证书登陆,和在使用githubgitee时,将公钥上传到远程服务器上一样,Git服务器需要搜集需要登陆的用户端的公钥(用户创建的id_rsa.pub),

    搜集所有需要登陆的用户的公钥,即用户的id_rsa.pub文件。把公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

    默认新建的git用户家(home)目录,没有.ssh隐藏目录。可手动创建目录和文件。

    新建一个用户,其家目录下面默认生成的文件由/etc/skel目录里面的内容决定(可自行验证)。

    同时Ubuntu下新建用户,家(home)目录下的桌面等目录需要使用新用户登陆ubuntu桌面后,才会会生成桌面、图片、文档、下载、音乐等目录。

    • 初始化Git仓库:

    选定一个目录作为Git仓库,假设为/srv/sample.git,在/src目录下输入命令

    $ sudo git init --bare sample.git
    [sudo] git 的密码:
    初始化空的 Git 仓库于 /srv/sample.git/
    

    Git会创建一个空的仓库,且没有工作区,只用于共享,所以不应让用户直接登陆到服务器修改工作区。

    服务器Git仓库通常.git结尾。

    • 将目录的所有者改为git
    $ sudo chown -R git:git sample.git/
    
    • 禁用git用户shell登陆

    处于安全考虑,新建的git用户不允许登陆shell。通过编辑/etc/passwd文件设置。

    打开passwd文件找到如下行:

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

    将其修改为

    git:x:1001:1002:,,,:/home/git:/usr/bin/git-shell
    

    此时使用git登陆,将会不允许

    $ su git
    密码:
    fatal: Interactive git shell is not enabled.
    hint: ~/git-shell-commands should exist and have read and execute access.
    

    su命令用来切换登陆用户

    sudo用来获取root管理员权限,执行命令

    su [username] 切换到指定用户,不改变环境变量

    su - [username] 切换并改变环境变量为指定用户(常用)

    git用户可以正常通过ssh使用git,但无法登陆shell,因为为git用户指定的git-shell每次一登录就自动退出。

    • 克隆远程仓库。

    现在就可通过git clone将远程仓库/srv/sample.git/克隆下来。

    可以设定一个服务器名访问克隆远程仓库。如将gitsever设置到本地hosts中,ip为Git服务器的地址。

    $ git clone git@gitsever:/srv/sample.git
    Cloning into 'sample'...
    The authenticity of host 'gitsever (192.168.104.237)' can't be established.
    ECDSA key fingerprint is SHA256:SYG7vL********************y597FA.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'gitsever,192.168.104.237' (ECDSA) to the list of known hosts.
    warning: You appear to have cloned an empty repository.
    

    会提示克隆了一个空的git仓库,查看仓库内容。

    $ cd sample/
    
    /sample (master)$ ls -al
    total 4
    drwxr-xr-x 1 win7hostsver 197121 0 May  4 14:29 .
    drwxr-xr-x 1 win7hostsver 197121 0 May  4 14:29 ..
    drwxr-xr-x 1 win7hostsver 197121 0 May  4 14:29 .git
    

    之后可以使用这个远程库进行git的操作、同步等。

    公钥的管理

    如上,一个简单的git服务器已经搭建完成。然后可以添加其他的仓库、其他用户的公钥等进行管理。

    • 公钥路径位置:/home/git/.ssh/authorized_keys

    但是对于大型或者多人使用和管理的git服务器,可以使用Gitosis管理公钥。

    git服务器仓库的权限管理

    git本身是为了托管linux代码而开发的,所以注重开源精神,不支持权限控制。

    但Git提供了相关的钩子(hook),可以借此编写一系列脚本来控制对仓库的提交等操作,从而实现控制权限。Gitolite就是一个提供管理权限的工具,有需要可深入了解

    作者: 代码迷途
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意原创文章必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    非原创文章若有需要,建议直接联系原文作者或保留声明情况下转载原文
  • 相关阅读:
    Java菜鸟之java基础语法,运算符(三)
    Lotus迁移到Exchange 2010 POC 之Domino Server的配置!
    hibernate:对于java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误解决办法
    【targeting学习笔记】Display Advertising Targeting
    Domino 迁移到Exchange 之 Domino Admin 安装!
    sqlite3使用详解(Qt版本)
    .net反混淆脱壳工具de4dot的使用
    破解NET的四大神器(转)
    C#让应用程序只运行一个实例的几种方法
    Windows server 2008 R2实现多用户远程连接
  • 原文地址:https://www.cnblogs.com/codemissing/p/establish_gitserver.html
Copyright © 2020-2023  润新知