1. 创建 www 用户

    useradd www
  2. 建空仓库

    su www && cd /var/www
    sudo mkdir -p git/abc.git
    sudo chown -R www:www git
    cd git/abc.git
    git --bare init
    git update-server-info

    编辑config加入下面代码

    [receive]
        denyCurrentBranch = ignore
  3. 客户端应用

    git clone ssh://user@ip/var/www/git/abc.git
    
  4. 创建完毕裸版本库后还不能直接使用,首先要初始化版本库(例如增加一个文件),不然会报错

    cd /var/www/html
    mkdir abc
    cd abc
    git init
    touch init_file
    git add init_file
    git commit -m "init"
    
  5. 如果想在服务器版本库里面提交代码等操作,可以这样

    vi /var/www/html/abc/.git/config

    追加下面两项配置

    第一种:要求输入密码

    [remote "origin"]
        url = ssh://user@ip:/var/www/git/abc.git
        fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
        remote = origin
        merge = refs/heads/master

    第二种:或者不输入密码

    [remote "origin"]
        url = /var/www/git/abc.git
        fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
        remote = origin
        merge = refs/heads/master

    push到远端

    git push origin master

    从代码库中更新提交的修改

    git pull /var/www/git/abc.git
    

【扩展 1】开启 git http 访问

  1. 安装fcgiwrap

    apt install fcgiwrap

    编辑配置

    vi /lib/systemd/system/fcgiwrap.service

    更改UserGroup为:

    User=www
    Group=www

    重启

    systemctl daemon-reload
    service fcgiwrap restart
    
  2. nginx 配置

    server {
        listen       80;
        listen   [::]:80;
        access_log /var/log/nginx/access_git-server.log;
        error_log  /var/log/nginx/error_git-server.log;
        server_name  git-server.mydomain.com;
    
        # htpasswd -bc /etc/nginx/auth.password usernameabc password123
        auth_basic "登录";
        auth_basic_user_file /etc/nginx/auth.password;
    
        location ~ (/.*) {
            fastcgi_pass unix:/var/run/fcgiwrap.socket;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
            fastcgi_param GIT_HTTP_EXPORT_ALL "";
            fastcgi_param GIT_PROJECT_ROOT /dir/git;
            fastcgi_param PATH_INFO $1;
            fastcgi_param REMOTE_USER $remote_user;
        }
    
        error_page 404 /404.html;
            location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
    

【扩展 2】推送现有文件夹到新仓库

  1. 前往您的文件夹

    cd existing_folder
  2. 配置 Git 仓库(test 换成自己新生成的仓库名称)

    git init --initial-branch=master --object-format=sha1
    git remote add origin [email protected]:/test.git
    git add .
    git commit -m "Initial commit"
    git push --set-upstream origin master