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)和非裸露2,bare
模式只保存文件操作历史记录,仓库中是看不到具体文件,只有下拉后才能看到。
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-update
,post-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'