在 Linux 下搭建 Git 服务器

① 安装 Git

Linux 做为服务器端系统,Windows 作为客户端系统,分别安装 Git

服务器端:

#yum install -y git

安装完后,查看 Git 版本

[root@localhost ~]# git --version
git version 1.7.1

 版本太低,用以下方法升级:

  1. 首先更新系统

    yum  -y update

    更新完成之后有6.5变成6.7了

    linux安装git方法
  2.  

    安装依赖的包

    yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

  3.  

    下载git源码并解压

    $ wget https://github.com/git/git/archive/v2.3.0.zip

    $ unzip v2.3.0.zip

    $ cd git-2.3.0

    linux安装git方法
  4.  

    编译安装:

    将其安装在“/usr/local/git”目录下。

    make prefix=/usr/local/git all

    make prefix=/usr/local/git install

    因为服务器时间不对编译的过程中报错如下图,使用ntpdate自动校正系统时间。报错“Writing perl.mak for Git make[2]: *** [perl.mak] Error 1”,请重启apache服务,service httpd restart。

    linux安装git方法
  5.  

    编译完成之后使用git --version 查看git版本,居然还是1.7.1,这是因为它默认使用了"/usr/bin"下的git。

    你可以用下面的命令查看git所在的路径:

    $ whereis git

    git: /usr/bin/git /usr/local/git /usr/share/man/man1/git.1.gz

    linux安装git方法
    linux安装git方法
  6.  

    我们要把编译安装的git路径放到环境变量里,让它替换"/usr/bin"下的git。为此我们可以修改“/etc/profile”文件(或者/etc/bashrc文件)。

    vim /etc/profile

    然后在文件的最后一行,添加下面的内容,然后保存退出。

    export PATH=/usr/local/git/bin:$PATH

    linux安装git方法
  7. 7

    不想重启系统,使用source命令立即生效

    source /etc/profile

  8. 8

    然后再次使用git --version 查看git版本,发现输出2.3.0,表明安装成功。

    linux安装git方法

② 服务器端创建 git 用户,用来管理 Git 服务,并为 git 用户设置密码

[root@localhost home]# id git
id: git:无此用户
[root@localhost home]# useradd git
[root@localhost home]# passwd git

③ 服务器端创建 Git 仓库

设置 /home/data/git/gittest.git 为 Git 仓库

然后把 Git 仓库的 owner 修改为 git

[root@localhost home]# mkdir -p data/git
[root@localhost home]# git init data/git
Initialized empty Git repository in /home/data/git/gittest.git/
[root@localhost home]# cd data/git
[root@localhost git]# chown -R git:git gittest.git/

客户机 origin url 填上 git@Ip:/路径/路径就可以了
在此处可以在客户机也就是我的本地克隆到代码,但新增文件发现提交不上去,翻译了一下看错误是什么权限啥的。

这是由于git默认拒绝了push操作,需要进行设置,修改.git/config添加如下代码:

    根据提示执行命令解决问题 :

[root@localhost git]# git config receive.denyCurrentBranch ignore

ok!可以正常推送了

git init git --bare init 其他人说 前者建立的仓库 pull的时候没法看到 更新的代码,必须得使用git reset --hard才能看到push后的内容.
但用后者用git命令会报不在work tree错误。怎么解决还没找到
原文地址:https://www.cnblogs.com/xiaommvik/p/7655119.html