提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:这里可以添加本文要记录的大概内容:
随着接口自动化和持续集成越来越流行,基于git+Jenkins实行测试代码自动拉取执行被卷成自动化测试的基本技能,本着别人都会我不会,我怎么管你要高工资,就自己搞了一套环境,系统是 系统企鹅云的2核+2G+40G,centos8,¥40一年,动手能力强也可以在本地装一套,不过本地和远程还是有区别的。
提示:以下是本篇文章正文内容,下面案例可供参考
git,就是一个代码管理工具,分本地仓库和远程仓库,git分工作区,暂存区,版本库,过程如下:
工作区–git add–>暂存区–git commite–>版本库–git push–>远程仓库。
代码如下(示例):
# dnf -y install git # 安装方式1
# yum install -y git # 安装方式2
# git --version # 查看git版本
如果出现git版本信息则说明git已经安装成功,可以进入下一步配置:
实际工作中不可能给你root用户使用,多人协同应该是一人一个账号,并且只用于ssh的推代码和下代码,
重复下面的操作根据需要添加用户
# groupadd git # 添加用户组git
# adduser git -g git # 添加新用户git并添加用户到git组
# passwd git # 修改用户密码
# yum install openssh* # 途中提示按y
出现complete !表示成功
证书文件由root用户创建,将本地公钥写入authorized_keys文件中可实现免密登录,把本地公钥给管理员,
管理员统一写入,权限够也可以在本地直接上传,后面再说。
# mkdir /home/git/.ssh # 创建目录
# chmod 700 /home/git/.ssh #赋予权限,只有管理员可以更改
# touch 600 /home/git/.ssh/authorized_keys # 创建证书文件、root可读写
注意:自己搭建环境时,可将.ssh和authorized_keys,属组和属主改为git,方便操作,
否则上传本地公钥时会提示permission denide 拒绝访问
# cd /etc/ssh
# vim sshd_config
# service sshd restart # 重启服务
在sshd_config文件修改以下配置,没有的可以加上
PermitRootLogin yes
PasswordAuthentication yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
个人使用无所谓,项目使用只允许ssh推送或下载代码,不允许使用shell直接登录主机。
在 /etc/passwd中进行如下修改:
进入命令行,使用 /git 搜索到git,如下:
git:x:1001:1001::/home/git:**/bin/bash**
改为:
git:x:1001:1001:/home/git:**/usr/bin/git-shell**
注意:加粗部分为centos下是git-shell文件位置,其他服务器如果没有可使用 find / -name "git-shell"进行查找。
初始化代码仓库有两种,git init 和 git --bare init
git init 初始化本地仓库,会在该目录下创建一个带有.git文件,该dir就是一个仓库,有默认工作目录,
可以在该目录下使用git命令,可以直接clone,不能push需要修改.git/config文件实现push,
分支有人修改时容易冲突报错。
git --bare init 初始化一个裸仓库,不会在目录下生成.git文件,而是生成.git文件下的版本历史记录,
没有工作目录,可以直接clone和push,不能在该目录下使用git命令。
init与 --bare config文件对比
模拟两个仓库:
git init 《dir》:这个的坑比较多,不建议使用
git init mock_project01_init #初始化代码库
此时本地对应的远程仓库为:企鹅云公网IP:/home/git/mock_project01_init
本地可以clone但是push则会报错,这是因为git默认是拒绝push的需要修改.git/config文件:
[receive]
denyCurrentBranch = ignore
添加后可正常push,
如果使用了git init初始化,则远程仓库的目录下,也包含work tree,当本地仓库向远程仓库push时, 如果远程仓库正在push的分支上(如果当时不在push的分支,就没有问题), 那么push后的结果不会反应在work tree上, 也即在远程仓库的目录下对应的文件还是之前的内容。
解决方法:git reset --hard 可以看到push后的内容
注:这里没有演示推代码,与善其事必先利其器,后面会讲,别急。
git --bare init :推荐使用
# git --bare init origin.git 指定初始化裸仓库为origin.git
此时远程仓库地址为:企鹅云公网IP:/home/git/mock_project02_bare/origin.git
该仓库看不到提交的文件,因为是存放在git blob中的,可以在服务器仓库下使用git log查看提交 日志,与本地提交日志是一样的
以上完成,远程仓库算是完成,下面进入本地仓库的安装配置
直接去git官网下载,傻瓜式安装即可
网址(示例):
https://git-scm.com/
##如果服务器上无法安装,就下载安装包,传上服务器手动安装
安装好本地git客户端后,在准备创建仓库的文件夹下面,右键--》git bash here,
弹出git的命令行,输入下面$后面的命令,中文部分换成服务器ip和对应的服务器仓库目录即可。
$ git clone git@企鹅云公网IP:服务器仓库地址
克隆完成没有报错(error),如果是一个空仓库会有告警(warring),
clone下来的仓库应该带有.git文件,如下图所示:
后续的代码编辑便在这个文件夹下面,如果clone下来的仓库没有.git文件,说明远程仓库没有初始化好,也会有相应提示:克隆的不是一个仓库,检查远程仓库配置是否正确。
注:两个文本是后面建的,注意地址栏两个仓库的名字,和服务器上是对应的。
通过上面的clone,已经成功将远程仓库克隆到本地,进入仓库,右键-->git bash here,
在弹出的git命令行进行以下配置(根据自己需要)。
$ git config --global user.name # 配置自己的用户名 --global 全局配置,多项目共用
$ git config --global user.email # 配置邮箱
$ git config --list # 查看配置信息
$ ssh -keygen -t rsa -C "[email protected]" # 生成本地密钥,用于服务器的免密登录,具体参照服务器配置
以上是常用的配置,生成本地的私钥和公钥,位置在命令行会有提示,基本就会在下图所示位置:
将公钥导入到服务器上 /home/git/.ssh/authorized_keys
$ ssh 用户名@服务器地址 ‘cat >> 写入公钥的位置’< 本地公钥的位置
$ ssh git@企鹅公网IP 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
再在服务器上查看是否成功,成功后authorized_keys文件将会新增记录。
我这里是两台电脑的公钥,上传成功后原本authorized_keys是空文件的会多出一行本地的私钥,可以比对以下。工作中这一步应该root管理员来做,只需要给管理员公钥,由管理员统一写道服务器上,并且要禁止git用户的shell登录。
虽然从clone下来了远程仓库,没有配置远程仓库前本地git是不知道远程仓库在哪里的,为了方便后续推代码,
需要为本地仓库添加远程仓库,相当于将本地仓库与远程仓库联系起来,实际工作中可能会有不止一个仓库,根据需要添加即可。
$ git remote add 仓库名 用户名@服务器ip:仓库地址
#默认仓库名为origin,可以自己配置在本地可以查看,以mock_project02_bare为例,名字在本地可查看
$ git remote add mock_project02_bare git@124.221.126.208:/home/git/mock_project02_bare/origin.git #添加远程仓库
$ git remote -v # 查看添加的远程仓库
$ git config --global push.defult simple # 把本地分支推送到服务器同名分支。
or: git remote rename <old> <new> # 重命名仓库
or: git remote remove <name> # 移除远程仓库本地
or: git remote set-head <name> (-a | --auto | -d | --delete | <branch>) # 版本控制
or: git remote [-v | --verbose] show [-n] <name> # 查看远程仓库
or: git remote set-url [--push] <name> <newurl> [<oldurl>] # 更改仓库下载地址
or: git remote set-url --add <name> <newurl> # 为已有仓库更新地址
or: git remote set-url --delete <name> <url> # 移除指定的远程库地址
基本为删除后添加,或直接修改配置文件
还有一些需要查询验证
完成以上配置后便可在本地仓库内编辑代码,添加跟踪,提交版本库,推送到远程仓库。
步骤:
工作区--git add .-->暂存区--git commite -m ''-->版本库--git push originname-->git远程仓库
$ git status #查看本地仓库状态,可以看到哪些文件被跟踪,只有被跟踪的文件才能被提交并加到版本库
$ git add . # 添加所有文件为跟踪状态,也可以 git add filename
$ git commit -m ‘描述’ # 描述方便以后回溯,这里最好加上,不然会弹出提示,在弹出的提示会是一个类似vim的编辑界面,注意看最下面一行的提示,进入命令行后提交,退出后将描述加上就没问题了
$ git push 本地添加远程仓库时的名字
$ git push mock_project02_bare
# 编辑好代码后进行以下操作:
$ git add . # 将文件从工作区添加到暂存区
$ git commti -m '' # 将文件提交到版本库--未提交到远程仓库
$ git push 本地设置的远程仓库名 # 将文件推送的远程仓库
# 由于重复性太高可以在仓库内存放一个shell脚本一键完成跟踪,添加,提交,推送,脚本如下
comment=$(data)
Echo $comment
cd /root/tedu_nsd # 实际的本地仓库
Git add .
Git commit -m "$comment"
Git push originname # 仓库的名字
# 可以和pycharm联合使用,就不用设置什么shell脚本了。^ ^
踩过的坑:
1.
一次commit,一次push,多次commit,再push会报错。
2.
坑2:git push上传失败
通过以下命令进行代码合并(工作中每天早上编写代码前第一件事就做这个):
$ git pull --rebase origin master # origin为远程仓库名
$ git push -u origin master
基本问题就解决了,避免别人也提交了代码,分支会产生冲突。
可能是与远程仓库分支有冲突导致,具体问题具体分析
留个坑,这个还没学会。
直接用图了,难得打字了。
下面pycharm内添加远程仓库。
后面会让输入密码,就是git用户的密码,如果报错,回去检查那一步不对,尤其是提示权限什么看看仓库的属组,属主,权限对不对,要是第三节里能手动把文件推到服务器上这里应该就没这么多问题,还有就是用init初始化的仓库默认是不能push的。
提交代码:
到这里远程,和本地的git已经准备好了,下期安装Jenkins。