/ Git

Git: 测试场景基础知识

前言:Git简史
简介:Git管理结构
测试场景一:查看代码仓库
测试场景二:生成本地代码库
测试场景三:对测试代码进行版本管理

前言:Git简史

引用: git-scm.com - 1.2 起步 - Git 简史

  • 同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。
  • Linux 内核开源项目有着为数众广的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。
    Linus Torvalds
  • 到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。
    Linus Torvalds develop git
  • 他们对新的系统制订了若干目标:
    1. 速度
    2. 简单的设计
    3. 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
    4. 完全分布式
    5. 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
  • 自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统
    备注:
    1. Github.com: Github是借助Git的商业化托管网站
    2. Gitlab.com: 使用Ruby开发的开源Git服务端
    

简介:Git管理结构

参考:backlog.com - 猴子都能懂的git入门

  • 示意图
    猴子都能懂的git入门
  • Git管理代码的4个存放区:从本地到远程
    Git工作流
    1. 工作区(Working Area)
    2. 暂存区(Stage)
    3. 本地仓库(Local Repository)
    4. 远程仓库(Remote Repository)
  • Git管理代码的5种状态:进入每一个区会产生一个状态,加上最初状态,一共是5种状态
    1. 未修改(Origin)
    2. 已修改(Modified)
    3. 已暂存(Staged)
    4. 已提交(Committed)
    5. 已推送(Pushed)
  • Git开发工作流的3个步骤:
    git存放区
    1. git add . 把所有文件放入暂存区;
    2. git commit 把所有文件从暂存区提交进本地仓库;
    3. git push 把所有文件从本地仓库推送进远程仓库。
  • Git测试工作流的步骤:
    1. git clone 地址 # 获取代码
    2. git pull # 更新代码
    3. git revert # 放弃修改 -- 具体的命令见下文

测试场景一:查看代码仓库

介绍Gitlab服务端Web
测试价值:可以查看开发提测的代码内容,并且可以看修改记录

  • 以下用工作中的查看代码场景开讲解,举例使用的项目为一个demo项目

  • Gitlab是支持git的服务端,有web界面,如上图
    gitlab--web
    项目入口:http://gitlab.td.internal/SPEC/ApamaSample
    ssh地址:ssh://git@192.168.15.160:20022/SPEC/ApamaSample.git
    提交记录:http://gitlab.td.internal/SPEC/ApamaSample/commits/develop

  • 点开项目路径
    gitlab--web-03

  • 查看java文件代码
    gitlab--web-04

  • 查看提交记录列表
    gitlab--web-02

  • 查看提交的本次修改内容
    gitlab--web-05


测试场景二:生成本地代码库

介绍Git客户端
测试价值:可以在本地部署运行调试,或者查看代码引用关系

  • 如何拉取远程仓库里的代码在本地使用?
    gitlab--web-11
  1. 安装Git-2.15.0-64-bit.exe
    • 设置path环境变量
      gitlab--web-12
    • 验证Git启动
Microsoft Windows [版本 10.0.15063]
(c) 2017 Microsoft Corporation。保留所有权利。
     
C:\Users\at>git
usage: git [--version] [--help] [-C ] [-c name=value]
            [--exec-path[=]] [--html-path] [--man-path] [--info-path]
            [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
            [--git-dir=] [--work-tree=] [--namespace=]
               []
  
These are common Git commands used in various situations:
...
  1. 设置git本地秘钥
    • 运行git bash终端
      gitlab--web-13
    • 生成ssh秘钥文件
#进入终端
at@TD-at MINGW64 ~
 
#启动ssh-agent
$ eval "$(ssh-agent -s)"
Agent pid 48748
     
#查看ssh秘钥列表
at@TD-at MINGW64 ~
$ ssh-add -l
The agent has no identities.
 
#创建ssh秘钥
at@TD-at MINGW64 ~
$ ssh-keygen -t rsa -C "2092@forex.com.cn"
Generating public/private rsa key pair.
 
#设置秘钥存放目录
Enter file in which to save the key (/c/Users/at/.ssh/id_rsa):

#是否覆盖已存在秘钥
/c/Users/at/.ssh/id_rsa already exists.
Overwrite (y/n)? y

#设置密码
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

#秘钥文件生成
Your identification has been saved in /c/Users/at/.ssh/id_rsa.
Your public key has been saved in /c/Users/at/.ssh/id_rsa.pub.

The key fingerprint is:
SHA256:BwUzNWq47lJwDvAcDpXWTZpFjaL548RzqKE0rCkSnfo 2092@forex.com.cn
The key's randomart image is:
+---[RSA 2048]----+
|   ..o +B=+      |
|  o + o=o=..     |
|   B ++.+        |
|    O .o .       |
| o . B..S .      |
|. * ..X ..       |
| * o *.+         |
|* . o..          |
|o.E  ..          |
+----[SHA256]-----+

at@TD-at MINGW64 ~
$ ssh-add -l
The agent has no identities.

#添加秘钥到ssh-agent
at@TD-at MINGW64 ~
$ ssh-add ~/.ssh/id_rsa
Identity added: /c/Users/at/.ssh/id_rsa (/c/Users/at/.ssh/id_rsa)
     
at@TD-at MINGW64 ~
$ ssh-add -l
2048 SHA256:BwUzNWq47lJwDvAcDpXWTZpFjaL548RzqKE0rCkSnfo /c/Users/at/.ssh/id_rsa (RSA)
  1. git pull:更新代码,顺带验证ssh秘钥是否可用
    • 因为秘钥重新生成,所以git pull认证失败
D:\codeJava\GitLabRespo\apama\ApamaSample>git pull
git@192.168.15.160: Permission denied (publickey).
fatal: Could not read from remote repository.
     
Please make sure you have the correct access rights
and the repository exists. 
  • 需要更新远程gitlab账号里的ssh秘钥
    gitlab--web-14
  • 获取刚才配置的ssh秘钥
#不用这个
at@TD-at MINGW64 ~
$ cat ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAyyD4fYKctu6dIbivBbnu7lSdzoAK5GXeXGhZ00bDQKVigomP
DhVSdU/wIuXT9ImuCBVIDC2KNIZYhHYI5dewHEWdIDGx8ywp1nFcUAwXmcxUt80A
omYarfN1bpm9qBKkSbZ0V+v9OGO5jc1vV/k5f3y1+LEjL2wzsJ+XcYc+L24ewUIz
Yx8Jdyta5oJhEseZaBWUe8n7ftMNNuZCl7cbvmVdhlGE8QAZ1GRnOKxc/549y6Z6
CRIKwgjt3NLDf/v8kqTCB5bfriDJyH4FAv6ljG/sCynbKZrE0QkfBLYMA/2Tz2dJ
hXNr3EfZOOjm4FKmPCpISjuN+mM4evMj1a+apQIDAQABAoIBAE6Biqhvf4QQCrjK
uRI8f0SrfWYfBJarbFpIllbapYHpqX4MDjcCNKFUaNoD+3wqbhF/sB3Mx/pu5e0j
9WJnjxAOM6EKs9zo966Cl4v0cHaniyKSX6lkTvFmA7/gOXWo5sf6dVK5yV8u47sT
Z/IXR4qnN2lLhO7CIeQkehKNk5IejAEctQ/3yyWzw92IF5O7HmVjT9AAfgwytj2e
b/6WSpRlBjDTgXChc5qyR8U6P2AyI1bgBYwZQU8uhYFQHrWMJRm9EcglJ5JBDWML
+kA4JoX8mR+MT0BmZw99Qb6/hfYUs98riHZDgZ9MMCeY3AeQG4RSf/D5QAbh1zVR
JaTJcW0CgYEA6X8wKAEFmtFWhUIvAxeJwh8QByzOR3u2v2Dj1gSzZWVpjkaOlt+q
2HbjS8empDVa+Qzd4ZKCMeffHS57CE+Dm9teKAwC1m6LFEYnawDuy6Amw0d+JpdK
Ghe3pio+xN6fkvvUFN9c7YCasffToGGwYBxC0G9v0OFhVD/aDHAZzFMCgYEA3rSL
kbVaItHzBLUIbsqHaJFw9PueHz2ICkcKCeEWj2X+zjB4/p8gB4/Wm412lzM3+9VR
ioEQqBTgZrDQBj9J3nVLrhft1Fq3PM94nmR60O+9u29+zVD/QrGX4pe6DDIlVXQe
2Pr8prJ0+V7jc6DTDz/aKirkTwqTcP/besT5XicCgYEA4VoqjQFnemL9oQEeRFqs
TtkR7ArXT3BcENqfKchBp+O3e2Qna/+UcPRVLKcU8ri4A1PitTlkRGwoDo70mTG8
sGiIuBfXiUMJIdkPZBtzXL1FjATtAKvVDdfEHC/7gp/l3MMFjduBYYtUQd0Qt2Jx
CmFcLrTOcweCmwBBHu32SBcCgYEAghhd38Rc3zJeEEXgozfUWhV8MuA5wm4jZj2R
c6v1jdc7Ph+6zqMOBtzTtRKyUCkvbwFyHMLAhC+N1u861itqb3V9vDlmSUKk//UC
tSRlSmCCKVg8bpv+QWuVGl0f5bf1bzHiQ0Z7CLX+9x2jKQytvp7CRxe/Px0ifEQ6
ZkFimskCgYEAwKkCjpl6TOgkYrEtwN82HpT9IRQ6ZWY3xeH12dLCNhjpnVDwZ1RY
QdSk3nCH4ffTkBN7UdCozpn+QSnm0LNijwr/qrDvbnMfjxuxdqgtVANwihvfkcMr
jphUw0npuYoebFG/H0yVrj7JW6Z9UqZbOUcsz8GG8Aawl2VeVdg6KPI=
-----END RSA PRIVATE KEY-----
     
#gitlab里账号ssh秘钥设置,需要用这个,这行太长了人为换行处理
at@TD-at MINGW64 ~
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLIPh9gpy27p0hu
K8Fue7uVJ3OgArkZd5caFnTRsNApWKCiY8OFVJ1T/Ai5dP0ia4IFU
gMLYo0hliEdgjl17AcRZ0gMbHzLCnWcVxQDBeZzFS3zQCiZhqt83V
umb2oEqRJtnRX6/04Y7mNzW9X+Tl/fLX4sSMvbDOwn5dxhz4vbh7B
QjNjHwl3K1rmgmESx5loFZR7yft+0w025kKXtxu+ZV2GUYTxABnUZ
Gc4rFz/nj3LpnoJEgrCCO3c0sN/+/ySpMIHlt+uIMnIfgUC/qWMb+
wLKdspmsTRCR8EtgwD/ZPPZ0mFc2vcR9k46ObgUqY8KkhKO436Yzh
68yPVr5ql 2092@forex.com.cn
  • gitlab的账号添加ssh秘钥
    gitlab--web-15
  • 添加后的效果
    gitlab--web-16
  • 我们再来拉一次,验证git的ssh秘钥是否可用
D:\codeJava\GitLabRespo\apama\ApamaSample>git pull
Already up to date.
#这里显示已经通过验证,收到服务器信息,已经是最新代码
  • gitlab的账号里ssh使用记录更新了
    gitlab--web-17
  1. git clone:在git pull之前,需要克隆出一个本地代码库
    • 这里用idea来演示一下
    • idea启动界面选择git方式
      gitIdea-01
    • idea设置git路径
      gitIdea-02
    • 获取项目ssh地址
      gitIdea-03
    • 拉取项目代码,点击clone
      gitIdea-04
    • 拉取完成
      idea----------

测试场景三:对测试代码进行版本管理

介绍Git工作流
测试价值:利用Git的版本和分支两大管理能力,方便管理开发自己的脚本

  • 未在版本库的文件 add: workspace -> index 添加到版本控制的名单里
    新增一个文件,用来演示
    gitIdea-06
    在下面的控制台可以看到 unversioned文件,未加入版本控制
    右键点commit后,在清单里勾选即可加入管理
    gitIdea-07
  • 修过改的文件 commit: workspace -> local repository 提交到本地库 (下图)
    放弃修改不提交 revert: 本地代码回退到上一次更新时的代码 (下图)
    gitIdea-05
  • 调试完成的代码 push: local repository -> remote repository
D:\codeJava\GitLabRespo\apama\ApamaSample>git push
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 501 bytes | 501.00 KiB/s, done.
Total 6 (delta 2), reused 0 (delta 0)
To ssh://192.168.15.160:20022/SPEC/ApamaSample.git
ea70f33..391f9dc  develop -> develop
  • git push操作入口
    gitIdea-08
至此,我们讲了Git的三个运用:
1. 查看:怎么用gitlab查看远程仓库里的项目代码和提交改动
2. 拉取:怎么用git创建本地代码库,便于本地部署运行项目进行调试
3. 管理:怎么用git对自己的代码脚本进行版本管理