# 离线安装git - 运维手记2018-12-05

> 作者：zning（https://ning.ae） · 发布：2018/12/05 10:25 上午 (UTC+8) · 原文：https://zning.me/15424683398886.html

今天以及上周工作有些东西需要整理，现在整理一下。

> 注意：本文首次撰写于2018-12-05，最近修改时间为2018-12-05，请注意相关程序的可用性与安全性。

### 下载Git

https://www.kernel.org/pub/software/scm/git/

### 安装

```shell
# 解压
tar -vxf /usr/local/git/git-2.19.2.tar.gz
cd git-2.19.2
# 安装
./configure --prefix=/usr/local/git # 后面的参数可以不带，我带上安装不上
make && make install
# 配置环境变量
export GIT_PATH=/usr/local/git/bin
export PATH=$JAVA_HOME/bin:$PATH:$GIT_PATH
source /etc/profile
# 验证
git --version
```

### 创建git用户，管理git服务

```shell
useradd git # 创建用户git
groupadd git_g # 创建用户组git_g
usermod -G git_g git # 将用户git添加到用户组git_g
passwd git # 设置git密码
usermod -s /usr/bin/git-shell git # 修改git用户不可登陆

# 创建仓库：
mkdir -p data/git/gittest.git
git init --bare data/git/gittest.git
cd data/git/
chown -R git:git gittest.git/
```

<!--### 客户端clone

    git clone git@10.221.5.128:/opt/app/gitdata/gittest.git-->

### 问题归纳
1. bash: git-receive-pack: command not found fatal: Could not read from remote repository.

    解决办法：
    
    ```shell
    ln -s /usr/local/git/bin/git-receive-pack /usr/bin/git-receive-pack
    ```
      
<!--1.安装git 1.1在suse软件库中安装git zypper install git 1 不同系统的Linux安装软件包的命令不同，suse中是使用zypper。 1.2检查git是否安装成功 # git --version git version 1.7.12.4 1 2 若安装成功，则显示已安装的版本号，若安装不成功，则提示命令不支持。 2.创建仓库 2.1创建用户及用户组 1.创建git用户 sudo useradd -m git sudo passwd git 1 2 2.创建git_g用户组 groupadd git_g 1 3.将git用户添加到git_g用户组下 usermod -G git_g git 1 4.c 1 2.2创建git仓库 1.初始化仓库 mkdir gitprojects chown git:git_g gitprojects/ cd gitprojects git init --bare test.git 1 2 3 4 2.修改仓库目录权限 chown -R git:git_g test.git/ 1 3.克隆仓库 3.1SSH协议方式 git clone git@iphost:/home/gitprojects/test.git 1 由于创建的仓库是空的，所以克隆过来也是空的。 3.2GIT协议方式 1.在服务端仓库添加git-daemon-export-ok文件 cd test.git touch git-daemon-export-ok 1 2 空文件就行，它是协议进程提供仓库服务的必要条件 — 但除此之外该服务没有什么安全措施。要么所有人都能克隆 Git 仓库，要么谁也不能。 2.在服务端启动守护进程 git daemon --reuseaddr --base-path=/home/gitprojects/ /home/gitprojects/ --export-all 1 注意：路径：/home/gitprojects/后面一定要有“/”，否则客户端克隆的时候会出现权限问题。 3.在客户端克隆仓库 git clone git://iphost/test.git 1 注意：客户端克隆时，服务端的守护进程一定要运行；git请求的路径直接写仓库名称就可以。-->
