文章

Git离线安装及内网使用

Git离线安装及内网使用

该文记录 Git 离线安装及内网使用。

Git离线安装及内网使用

1. 离线安装(Ubuntu20)

1.1. 源码编译

Linux 下载源码进行编译。默认安装路径 /usr/local 可以直接在终端使用,建议在命令前加上 sudo 提升权限。

源码编译时,内网系统极有可能缺少依赖,自己去找可能版本不统一。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 下载依赖
apt install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

# 解压
tar xf git-2.9.5.tar.gz
cd git-2.9.5

# 配置编译安装
./configure --prefix=/usr/bin
make && make install

# 加入环境变量,环境变量默认路径 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
# 所以上步配置生成路径可以跳过这步
echo 'export PATH=$PATH:/usr/local' >> /etc/profile
source /etc/profile

# 检查版本
git --version 

1.2. 离线安装包1(推荐)

在外网虚拟机配置同样进行联网,外网虚拟机下载离线包和依赖包

1.2.1. 直接依赖

1
2
3
4
5
# 使用 apt-get 安装 Git 及其依赖项。--print-uris 选项打印依赖包的 URL,awk 命令过滤输出以提取 URL。然后将提取的 URL 传递给 wget 以下载包。
sudo apt-get --print-uris --yes install git | awk -F\' '/http/{print $2}' | xargs -n1 wget -c

# 将下载好的所有离线包导入内网环境安装
sudo dpkg -i *.deb

1.2.2. 嵌套依赖

1
2
3
4
5
6
sudo apt install apt-rdepends
# E: 因为软件包 debconf-2.0 没有候选版本,无法进行选择(已过滤)
sudo apt-get download $(apt-rdepends git | grep -v "^ " | grep -v "^libc-dev$" | grep -v "debconf-2.0")

# 将下载好的所有离线包导入内网环境安装
sudo dpkg -i *.deb

2. 配置本机Git属性

只是进行拉取源码可以不进行配置,进行上传源码需要记录个人信息必须需要进行配置。

1
2
git config --global user.name "用户名"
git config --global user.email "邮箱"

这样设置全局的用户名称和邮箱,可以通过命令 git config --global --list 查看是否设置成功。

1
sudo vim ~/.gitconfig	# 配置文件路径

3. 创建仓库(Ubuntu20)

3.1. 环境

  • Git
  • SSH

Git 按照上述安装,SSH 服务目前系统一般自带。

3.2. 前期准备

3.2.1. 开启SSH服务

查看 SSH 状态。

1
2
ps -e | grep ssh 		# 方法一
systemctl status ssh	# 方法二

开启服务

1
sudo /etc/init.d/ssh start

3.2.2. 创建用户

非必需,如果不进行严格权限管理,可以 root 用户登录。

1
2
3
sudo groupadd group_git				# 创建 git 组
sudo useradd user_git -g group_git	# 创建 git 用户并添加进组
sudo passwd user_git				# 设置 git 密码

3.3. 创建仓库

仓库分为裸露(bare)和非裸露2bare 模式只保存文件操作历史记录,仓库中是看不到具体文件,只有下拉后才能看到。

3.3.1. 服务端创建bare仓库(推荐)

bare 仓库在服务端无法查看到具体文件。只保存文件操作,文件以二进制形式保存。

1
2
3
4
5
6
7
cd /home
sudo mkdir gitrepo	# 创建 git 仓库总目录
cd gitrepo
sudo mkdir test1	# 创建具体项目目录
cd test1
sudo git init --bare				# git 裸露初始化
sudo chown -R git:git /home/gitrepo	# 把仓库所属用户改为git 

3.3.2. 服务端创建普通仓库

3.3.2.1. 创建仓库

普通仓库在服务端可以查看到具体文件,但是不能进行修改因为 Git 中没有记录操作。

1
2
3
4
5
6
7
cd /home
sudo mkdir gitrepo	# 创建 git 仓库总目录
cd gitrepo
sudo mkdir test2	# 创建具体项目目录
cd test2
sudo git init		# git 非裸露初始化
sudo chown -R git:git /home/gitrepo	# 把仓库所属用户改为git 
3.3.2.2. 问题一:提交失败

这样创建的是包含工作目录,其他克隆仓库提交就会显示失败。

需要修改服务端配置文件 .git/config

1
2
3
4
5
6
7
8
# 方法一修改用户级,没作用
git config --global receive.denyCurrentBranch ignore 

# 方法二修改项目级
sudo vim .git/config
# 添加配置,允许使用同一分支
[receive]
	denyCurrentBranch = ignore

3.3.2.3. 问题二:服务端不显示文件

需要修改服务端配置文件 .git/hooks/post-update.sample。将该文件后缀删除变为 post-updatepost-update 注释 exec git update-server-info 并添加

1
2
3
unset GIT_DIR		# 取消 GIT_DIR 变量路径
cd ..				# 返回上级目录
git checkout -f		# 强制更新

这样克隆仓库提交后,服务端工作目录也能查看文件。

4. 仓库使用

以下都需要输入密码。

4.1. 常用命令

4.1.1. 关联仓库

  • 克隆(推荐)
1
git clone user_git@192.168.1.5:/home/gitrepo/test1
  • 远程关联

本地仓库初始化并远程关联。

1
2
git init
git remote add origin git@192.168.1.5:/home/gitrepo/test1

4.1.2. 上传

上传需要进行本机配置。

1
2
3
git add -A 				# 全部上传
git commit -m "commit"	# 备注
git push				# 提交

4.1.3. 下载

1
git pull

4.2. 过滤文件3

4.2.1. 描述

gitignore 文件指定 Git 应忽略的有意未跟踪的文件。

4.2.2. 规则

.gitignore 文件中,每一行的忽略规则的语法如下:

规则说明
空行空行不匹配任何文件,因此它可以用作分隔符 提高可读性
# 前置用作注释,可以使用反斜杠进行转义
! 前置否定模式,先前模式排除的任何匹配文件将再次包含在内。如果排除了该文件的父目录,则无法重新包含该文件
/ 前置只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
/ 后置匹配项目和目录
?匹配除 / 之外的任何一个字符
[]匹配单个字符列表
*匹配除 / 以外的任何内容
**表示目录所有,可以前置、中间、后置

4.2.3. 示例

1
2
3
4
5
# 过滤 CMake 生成 build 文件夹
build

# 过滤 qt 自动生成用户配置文件
*.user

4.2.4. .gitignore规则不生效

.gitignore 只能忽略那些原来没有被 track 的文件,如果某些文件已经被纳入了版本管理中,则修改 .gitignore 是无效的。解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

1
2
3
git rm -r --cached .
git add .
git commit -m 'update .gitignore'

参考

本文由作者按照 CC BY 4.0 进行授权