建立自己的git仓库服务器

一)  git软件在各种操作系统linux/macOS/windows上的安装,参考廖雪峰的教程

 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137396287703354d8c6c01c904c7d9ff056ae23da865a000
       在CentOS下安装最方便: yum install git
       也可以使用源码安装:#    yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
                 #wget https://github.com/git/git/archive/v2.13.2.tar.gz

     windows下可以从git官网git-scm.com下载“git for windows”安装包, 安装完毕后,在命令行模式下,命令行操作与linux下是相同的!

二)  git仓库之备份
        git clone --mirror git@A/path/test.git           --非ssh方式 镜像同步
    git clone --mirror ssh://git@A/path/test.git     --ssh镜像同步, 至于ssh方式的访问, 这个完全由ssh配置来决定,与git本身无关了(个人理解)
    git --git-dir=/dir/test.git remote update        --定时调用此命令增量同步--可设置corntab任务


    **** Git init和clone命令对bare和mirror参数的支持
    ****************************************************************
    命令            --bare参数          --mirror参数
    git init         支持                 x
    git clone        支持                 支持
    *****************************************************************

三) git仓库的初始化

   1) git init命令会在当前目录下创建一个空的Git代码仓库,建立一个隐藏目录.git
        该隐藏目录.git下将包含: hooks、info、objects和refs子目录和config、description和HEAD文件
    可以在当前目录下创建工作树(也就是工作文件和目录,最新的源码就是位于工作目录及其子目录中)。

   2) git init --bare命令会创建一个空的裸Git代码仓库, 1)中的隐藏目录.git不会被创建
         而1)中.git目录下的hooks、info、objects和refs子目录和config、description和HEAD文件,直接在在当前目录下被创建
    裸Git代码仓库只包含版本控制信息而不包含工作树, 它更适合于作为版本控制应用的服务端来使用。

     ***总结:  git init命令适合代码开发工作站使用,即用户源码版本管理,又便于代码修改和新建
            git init --bare命令用户服务端,用于纯粹的源代码控制管理功能
            理解了上面,git clone --mirror git@A/path/test.git 命令只进行裸Git代码仓库的备份就容易理解了  

四)   私有git服务器的创建例子
      
    1) 添加git用户组和git用户,专门用来处理客户机进行git操作
        groupadd  mygitgroup
        useradd   -M gitusr1        -M表示不会在/home目录下创建同名的用户专用目录    
        useradd   -M gitusr2          参考: https://blog.csdn.net/danson_yang/article/details/65629948
        useradd   -M gitusr3
        passwd gitusr1
        passwd gitusr2
        passwd gitusr3                --为git账户设置登录口令

        usermod -G mygitgroup gitusr1      -G表示将用户添加到某个分组
        usermod -G mygitgroup gitusr2
        usermod -G mygitgroup gitusr3

    2) 建立仓库目录----我在虚拟机下想在VMware的共享目录中建立仓库, 但是更改文件夹权限时该不了,所以还是在CentOS自己的“磁盘”上建立
        mkdir /home/mygit-repos
        cd    /home/mygit-repos    
        git init --bare  project1.git
        git init --bare  project2.git
        git init --bare  project3.git   ---可以为每个项目建立一个git仓库, 当新增项目的时候,可以使用此命令继续新建仓库

        #设置git仓库的group为git用户组mygitgroup,并设置读写权限
         chgrp mygitgroup /home/mygit-repos/project1.git   -R
         chgrp mygitgroup /home/mygit-repos/project2.git   -R
         chgrp mygitgroup /home/mygit-repos/project3.git   -R
       chmod 775  /home/mygit-repos/project1.git   -R
       chmod 775  /home/mygit-repos/project2.git   -R
       chmod 775  /home/mygit-repos/project3.git   -R

五) 修改sshd配置文件 /etc/ssh/sshd_config, 只允许gitusr1/gitusr2/gitusr3远程登录

      在sshd配置文件sshd_config里面加入下面这行:

      AllowUsers gitusr1  gitusr2 gitusr3

六) 修改口令文件/etc/passwd
    #找到所创建用户的行
        gitusr3:x:501:502::/home/gitusr3:/bin/bash
        gitusr2:x:502:503::/home/gitusr2:/bin/bash
        gitusr1:x:503:504::/home/gitusr1:/bin/bash

    #将/home/用户名称替换成/home/组目录名称(我使用的是虚拟机共享目录/home/mygit-repos):
        gitusr3:x:501:502::/home/mygit-repos:/usr/bin/git-shell
        gitusr2:x:502:503::/home/mygit-repos:/usr/bin/git-shell
        gitusr1:x:503:504::/home/mygit-repos:/usr/bin/git-shell

    *****说明:
        将/bin/bash替换成git-shell的路径,产生的后果是: gitusr1/gitusr2/gitusr3这三个账户只能用于git操作, 而无法正常登录linux
                如果试图从ssh客户端登录服务器, 则会提示如下的消息:
                              Last login: Tue Jul 31 11:04:15 2018 from localhost
                              fatal: What do you think I am? A shell?

                从而起到禁止git账户登录服务器控制台 , 防止误删仓库文件的情况出现!

五) 工作站上的测试
    git clone [email protected]:project1.git
    git clone [email protected]:project2.git
    git clone [email protected]:project3.git

  进入其中一个project, 随便copy个文件,使用git提交一下

        git add xxx

        git commit

       git push origin master   第一此提交使用此命令

       git push  非第一次提交使用此命令


    *** 客户端通用设置
        $ git config --global user.name "hanxuan2006"
        $ git config --global user.email "[email protected]"
        注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址

猜你喜欢

转载自blog.csdn.net/twd_1991/article/details/81297105