git服务器搭建解决方案


服务器和客户机git配置

为了直接在服务器检出,建议两个linux账户,一个是ugit是放远程仓库的(不允许ssh远程登录,init使用root等账户新增然后授权),另外一个是支持shell登录专门用于检出的帐号,建议定为uco(user checkout简写),当然也可以使用root检出。

git 查看远程地址

$ git remote -v
origin  ugit@github.example.com:/ttdata/githome/privacy (fetch)
origin  ugit@github.example.com:/ttdata/githome/privacy (push)
git是分布式的,所以不存在说git服务端和客户端之说。
服务器安装的是共享的中转库,客户机的数据和配置与远程机的完全一致。
客户机通过公网ip与远程机检入,其他客户机通过公网ip从远程机检出,也可以完全通过客户机之间通信。

一个git流程:

  1. 安装git和创建用户
    一般的centos都已经安装git的了,执行#git 没有找到命令说明没安装,可执行如下命令yum安装

    # yum install -y git
    //查看git版本
    # git --version
    //创建一个git系统用户
    # useradd ugit -s /usr/bin/git-shell
     //修改一个密码
    # passwd ugit
  2. 生成公钥和密钥(产生一个RSA密钥对,备用)
    默认保存在/home/www/.ssh/文件夹id_rsa和id_rsa.pub(创建的时候三次回车即可)
    其中让输入passphrase则输入密钥对的保护密码,可为空。

    # su ugit
    $ cd ~
    $ ssh-keygen -t rsa -C "ugitThreeyear"
    ssh-keygen的参数含义:
    -t 指定密钥类型type默认是rsa。
    -C 注释文字comment比如邮箱(提交github的时候设置email即可)。
    -f 密钥存储filename文件名。

    authorized_keys和known_hosts
    authorized_keys:免密登录公钥一行一个,为了两台Linux进行ssh双向登录(如scp直接免密)
    known_hosts:本机登录过的主机指纹,自动记录,对方若重装系统则ssh过去会报错

    @远程机仓库(初始化git init --bare repos.git后授权)
    谁想检出,就提供公钥放到仓库用户的.ssh/authorized_keys文件
    cat /home/ugit/.ssh/authorized_keys (没有该文件则创建)
    一行一个,以后本地检出就不需要密码了

  3. 创建版本库(远程仓库)
    只有为了共享的版本库存在了,才能够创建其他的工作区。
    创建版本库之前需要指定版本库路径

    # mkdir -p /ttdata/githome
    # git init --bare repos.git
    把版本库的目录权限修改为ugit用户
    # chown -R ugit.ugit repos.git
  4. 检出and克隆远程机的仓库
    分为两部分:Linux检出web目录、本地Windows检出开发使用

    @服务器操作(Linux的web部署目录):
    # su uco
    $ cd ~
    $ ssh-keygen -t rsa -C "ucoThreeyear"(两次默认的回车)
    将~/.ssh/id_rsa.pub给远程仓库放到authorized_keys文件
    $ git clone ugit@localhost:/ttdata/githome/repos.git
    
    @客户机操作(本地电脑):
    $ ssh-keygen -t rsa -C "asusNotebook"
    将C:\Users\Administrator\.ssh\id_rsa.pub 公钥给git服务器管理员
    $ git clone ugit@github.example.com:/ttdata/githome/repos.git rename
  5. 本地变动推动到远程仓库,三步走

    # git add * //添加变动文件
    # git commit -m "代码提交描述" //提交到本地仓库
    # git push origin master //提交到远端仓库
    更新直接git pull即可

其他事项

禁止git的shell登录

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

# cat /etc/passwd | grep git
git:x:1001:1001:git version control:/home/git:/bin/bash
# vim /etc/shells
/usr/bin/git-shell #在最后增加(确保文件存在)
# chsh ugit -s /usr/bin/git-shell

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

需要显性指定拉取的分支

如果git pull提示如下:

There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> master

则直接指定一下即可:
git branch --set-upstream-to=origin/master master

如果提示“ssh-keygen 不是可用命令”

  1. 将ssh-keygen.exe所在的git的bin目录加入环境变量(如C:Program FilesGitusrbin)
  2. 安装openssh后操作 https://www.openssh.com

版权声明,转载请附上原文链接及本声明: https://blog.yongit.com/note/888.html