CI持续集成环境搭建(3)--git的安装与搭建

article/2025/9/29 22:56:23

https://blog.51cto.com/superleedo/2057841

1. 安装git

*Note:不要用yum安装git, yum源安装git最新版本是1.8.3,该版本太老,之后用git commit 有可能会报错:git: ‘interpret-trailers’ is not a git command. See ‘git --help’.
cannot insert change-id line in .git/COMMIT_EDITMSG
必须安装更新版本,比如git-2.12.2, 需要掌握手动编译安装git的方法。

后续章节使用gerrit, 会安装gitweb, git-review, yum安装gitweb, git-review会同时安装git(老版本1.8.3), 会覆盖我们安装的新版本,因此我们在安装git之前安装gitweb, git-review.

1) 安装git依赖包

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

2)安装gitweb

yum install -y gitweb

3)安装git-review

把代码提交到gerrit上进行review,会用到git review命令,可以很简单去把修改push到gerrit,这需要我们单独安装git-review插件。

yum install -y git-review

4) 卸载已安装的git

如果环境已经用yum装过git, gitweb,或 git-review,则不能用yum remove git来卸载git, 因为这样会同时卸载依赖包gitweb, git-review.

卸载老git而不卸载依赖包gitweb, git-review :

rpm -e --nodeps git

这个命令,就只删除git这个包,不会删除依赖包gitweb, git-review

5) 下载并安装git

a. 进入目录/usr/local/, 将git下载到该目录

	wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.12.2.tar.gz

b. 解压git-2.12.2.tar.gz

	tar -xzvf git-2.12.2.tar.gz

#c. 配置git安装路径:

#	cd /usr/local/git-2.12.2#./configure prefix=/usr/

#d. 编绎并且安装

make && make install

编译git源码,进入cd cd /usr/local/git-2.12.2 目录

make prefix=/usr/local/git all

安装git至/usr/bin/git路径

make prefix=/usr/local/git install

e. 把git加到环境变量

vim /etc/profile
把:/usr/local/git/bin 添加到$PATH后面
source /etc/profile

e. 检查git版本是不是安装的版本 2.12.2

	git version

在这里插入图片描述

2. 初次运行git前的配置

配置git用户

cd ~
touch .git-credentials
vi .git-credentials
http://root:123456@$CentOSIPgit config --global credential.helper store
git config --global user.name $username
git config --global user.email $mail
git config --list    //查看配置信息

Git 提供了一个叫做 git config 的工具(译注:实际是 git-config 命令,只不过可以通过 git 加一个名字来呼叫此命令。),专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

a. /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
b. ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
c. 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

3. git服务器的搭建

大家应该都用过svn, git, github, gitlab等等吧,github是公用仓库,如果私有仓库是要付费的,gitlab私有仓库不用付费,大家都可以选择。

除了github, gitlab之外,我们也可以在自己的服务器上搭建自己的git服务器。
这样一来呢,速度变快了,而且更加方便管理,安全方面也得到了提升。

1) 创建初始化Git仓库

首先我们需要选定一个目录作为git仓库, 进入到任意想要放置仓库的目录下,一般来说git仓库的名称都是以.git结尾。

cd /opt/   
git init --bare devops_test.git   #初始化项目

2) 配置证书登陆

配置所有需要登陆的用户的公钥,公钥位于id_rsa.pub文件中,如果没有的话可以使用ssh-keygen生成。然后将我们的公钥添加到服务器的authorized_keys文件中。

cd ~  
ssh-keygen -t rsa     //生成证书
cat .ssh/id_rsa.pub > authorized_keys
chmod 644 authorized_keys

把私钥加入git SSH Keys

3)克隆仓库

cd /tmp/
git clone root@$CentOSIP:/opt/devops_test.git

4) 提交更新到git仓库

把我们的文件加入到本地仓库中,然后执行如下命令将项目提交到服务器!

cd devops_test
把需要提交的文件放到该目录
git add .
git commit -m "xxxxx"
git push origin/master
或者
git review 

Note: 养成好的习惯,在每次准备修改代码前一定先执行git pull命令将本地仓库同步到最新版本!!!减少冲突的可能。

4. issues

Issue 1: git: ‘interpret-trailers’ is not a git command. See ‘git --help’.

cannot insert change-id line in .git/COMMIT_EDITMSG
很奇怪,加上issue3的solution gitdir,commit-msg后,就是出现这个问题,平时不会有,在网上也找不到答案。

solution:
check whether it is existed in git installation path: such as /usr/libexec/git-core
we can get the git-ls-tree, git-mailinfo, git-ls-remote and so on

Update git version to git-2.12.2:
a. 下载git包到目录/usr/src/, 并解压
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.12.2.tar.gz
b. 卸载老git而不卸载依赖包gitweb, git-review :
rpm -e --nodeps git这个命令,就只删除git这个包,不会删除依赖包,
c. 配置git安装路径

cd /usr/src/git-2.12.2
./configure prefix=/usr/local/git/

d. 编译并且安装

make && make install

issue 2:bash: git-upload-pack: command not found

代码服务器上的git安装路径是/usr/local/git,不是默认路径,根据提示,在git服务器上, 建立链接文件:

Solution:
硬连接 ln /usr/local/git/bin/git-upload-pack /usr/sbin/

issue 3: pemission denied(publickey) while git clone ssh://gerrit@xx.xx.xx.xx:29418/devops_test.git

solution:
删除~/.ssh 下的keys, ssh-keygen-t rsa生成,然后通过cat id_rsa.pub 拷入gerrit setting中的public选项中

Issue 4: git review: Could not connect to gerrit. We don’t know where your gerrit is. Please manually create a remotenamed “gerrit” and try again.

Enter your gerrit username: gerrit
Trying again with ssh://gerrit@xx.xx.xx.xx:29418/devops_test.git
<traceback object at 0x7f4daf6fec68>
We don’t know where your gerrit is. Please manually create a remote
named “gerrit” and try again.

Solution:
手动添加节点gerrit节点
git remote add gerrit ssh://gerrit@xx.xx.xx.xx:29418/devops_test.git

issue 5: git review: ! [remote rejected] HEAD -> refs/publish/master (no common ancestry)error: failed to push some refs to ‘ssh://gerrit@xx.xx.xx.xx:29418/devops_test.git’

Solution:
a solution is to start in a new folder, then clone the (empty) project from gerrit. This folder then have a common ancestry with this gerrit project. Then you could work to add your source files into this new folder using git add until satisfied,(that mundane work is the non-easy part) leaving out any old .git folder and finally try a push. This pushes your project onto gerrit with git history beginning from this point on.

Issue 6: ! [remote rejected] HEAD -> refs/publish/master (commit 1e94fe0: missing Change-Id in message footer)

error: failed to push some refs to ‘ssh://gerrit@xx.xx.xx.xx:29418/devops_test.git’

Solution:
依次在项目路径下输入如下命令,即可解决:
gitdir=$(git rev-parse --git-dir);
#将xxxxx@xxxx 替换成相应用户名、服务器即可(该命令从服务器拷贝commit-msg文件)
scp -p -P 29418 xxxxx@xxxx:hooks/commit-msg ${gitdir}/hooks/
#再提交一次即可生成change-id
git commit –amend


http://chatgpt.dhexx.cn/article/5NGWjvGi.shtml

相关文章

JS 是怎样运行起来的

这里填写标题 1. Js 是怎样运行起来的?1.1. 前言1.2. V8 引擎1.3. CPU 是如何执行机器指令的?1.4. CPU 执行机器指令的流程1.5. V8 引擎的编译流水线1.6. 完整的分析一段 JavaScript 代码是怎样被执行的1.6.1. 初始化基础环境1.6.2. 解析源码生成 AST 和作用域1.6.3. 依据 AS…

bootstrap+javascript制作体重标准计算器

一、表单编辑 使用bootstrap可以快速创建表单样式。needs-validation 可以验证表单&#xff0c;如果验证不通过&#xff0c;表单不会提交&#xff1b; onSubmit"return false;"使得表单提交不会刷新页面&#xff1b; 下方js代码是用来控制表单验证&#xff1b; &l…

如何白嫖world.js、china.js以及各个省的js和json文件

全是干货&#xff0c;看仔细了。 作者在工作中遇到了绘制世界地图的场景&#xff0c;但是由于现在echarts的官网已经不提供地图文件下载了。 所以需要自己找资源&#xff0c;在csdn中用积分下载的资源还是挺多的。 但是碍于个别同学没有积分或者喜欢白嫖&#xff0c;所以这里…

js中?.、??的具体用法

1、?. &#xff08;可选链运算符&#xff09; 在javascript中如果一个值为null、undefined&#xff0c;直接访问下面的属性&#xff0c; 会报 Uncaught TypeError: Cannot read properties of undefined 异常错误。 而在真实的项目中是会出现这种情况&#xff0c;有这个值就…

JS之BigNumber.js 讲解

JavaScript因为存在计算的精度问题,所以直接计算就可能会导致各种各样的bug,为了解决这个问题,就要使用BigNumber.js这个库。 至于为什么JavaScript会有精度问题呢,可以看https://github.com/camsong/blog/issues/9。简单来说就是因为:JavaScript中所有的数字(包括整数和…

Js运动

JavaScript之Js运动 在我们进行web开发的过程中&#xff0c;为了与用户进行更加友好、有趣的交互&#xff0c;拥有一套完美的运动框架就能轻松解决。 这次就给大家带来Javascript学习中Js运动的编写和注意事项。实现运动的思想很简单&#xff0c;首先对这个元素获取定位&…

更优雅的编写JavaScript,使用这些函数秒变大神

如果你刚接触JavaScript可能你还没有听说过.map()&#xff0c;.reduce()&#xff0c;.filter()。或者听说过&#xff0c;看过别人用过但是自己在实际项目中没有用过。在国内很多开发项目都是需要考虑IE8的兼容&#xff0c;为了兼容很多JavaScript好用的方法和技巧都被埋没了。但…

JavaScript 计算标准体重的公式

判断标准体重 世卫计算方法&#xff1a; 男性&#xff1a;(身高cm&#xff0d;80)70&#xfe6a;标准体重 女性&#xff1a;(身高cm&#xff0d;70)60&#xfe6a;标准体重 标准体重正负10&#xfe6a;为正常体重 标准体重正负10&#xfe6a;~ 20&#xfe6a;为体重过重或…

ping命令显示时间

awk显示ping的时间ping 127.0.0.1 | awk { print $0"\t" strftime("%Y-%m-%d %H:%M:%S",systime()) } 注释&#xff1a;\t //换行字符 $0 //打印整行{print $0 "\t"} //逐行打印 strftime&#xff08;&#xff09;//时间函数。一般配合系统时间函…

Linux Command date 显示时间

Linux Command date 显示时间 文章目录 Linux Command date 显示时间1. 简介2. 参数3. 日期格式4. 实例 1. 简介 命令功能&#xff1a;date 可以用来显示或设定系统的日期与时间。 2. 参数 -d<字符串>&#xff1a;显示字符串所指的日期与时间。字符串前后必须加上双引…

网页显示时间代码

网页显示时间代码如下&#xff1a; <test.html> <html> <body> <SCRIPT languagejavascript> function CurentTime(){var now new Date();var hh now.getHours();var mm now.getMinutes();var ss now.getTime() % 60000;var ms ss % 1000;ss (s…

android 显示系统时间,Android 实时获取当前时间并显示

1、首先创建子线程与主线程进行数据交互的Handler &#xff0c;并更新UI SuppressLint("HandlerLeak") private Handler mHandler new Handler() { Override public void handleMessage(Message msg) { switch (msg.what) { case UPDATE_TIME: String time (String…

用Android studio完成简单的显示时间

用用Android studio完成简单的显示时间&#xff0c;并完成基础的布局改变&#xff0c;如字体大小&#xff0c;字体颜色等等问题。 在value中&#xff0c;颜色设置&#xff0c;可以自定义颜色。 dimens中完成字体大小的设置。 完成日历设置&#xff1a; package com.qst.Ca; im…

windows系统ping包显示时间(绝对好用)

使用管理员加打windows10中的Windows PowerShell&#xff0c;使用以下命令开始ping 例如ping192.168.0.1&#xff1a; ping.exe -t 192.168.0.1 |Foreach{"{0} - {1}" -f (Get-Date),$_}运行效果&#xff1a; 如果要ping又要记录到文本文档&#xff1a; ping.ex…

HTML页面显示时间——网页数字时钟、钟表

HTML页面显示时间——网页数字时钟、钟表 一个HTML网页上动态显示系统时间&#xff0c;可以使用javascript的Date对象&#xff0c;在javascript中new 一个date对象&#xff0c;并且根据这个date对象获取相应的时间日期的具体日期时间&#xff0c;比如 年 月 日 时分秒&#xff…

怎么将计算机工具栏时间去除,电脑任务栏不显示日期只显示时间的详细处理方法...

通常情况下&#xff0c;电脑右下角是会同时显示日期和时间的&#xff0c;这样可以方便我们查看。可是最近有用户在使用电脑时&#xff0c;却遇到了任务栏不显示日期只显示时间的问题&#xff0c;不知道怎么回事&#xff0c;更加不清楚如何解决&#xff0c;那么对于这一情况&…

Linux之history命令显示时间和IP

文章目录 一、需求说明二、配置步骤1、临时显示操作时间2、永久设置 三、补充说明1、HISTFILESIZE和HISTSIZE2、显示命令执行用户3、格式化输出参数配置4、历史命令保存位置 一、需求说明 系统运维工作中我们有时候需要查看历史命令&#xff0c;可以通过history命令查看&#x…

cmd长ping记录日志和时间_ping命令结果中如何显示时间

展开全部 可以62616964757a686964616fe78988e69d8331333431373266通过批处理实现&#xff0c;在后面加上时间。 echo off d: for /l %%i in (1,1,%999999999%) do ( ping %1192.168.1.1 -n 1% && echo %% >>ping.txt date /t >>ping.txt time /t >>p…

Vue中如何动态显示时间?

1&#xff1a;先上效果图&#xff1a; 2&#xff1a;注意点&#xff1a; &#xff08;1&#xff09;created( ) 与 mounted( )的区别就是&#xff1a; created 在模板渲染成html前调用&#xff0c;即通常初始化某些属性值&#xff0c;然后再渲染成视图 mounted在…

QT学习 实时显示时间

今天完成一个实时显示时间的小demo 先上DJ先上DJ 先看一下效果 以两种形式显示当前具体时间 先附上代码&#xff0c;再总结一下核心代码 &#xff08;1&#xff09; myweather.ui文件 创建一个Label&#xff0c;ObjectName值为text&#xff1b;创建一个LCD Number&#xff…