Git: 测试场景基础知识
前言:Git简史
简介:Git管理结构
测试场景一:查看代码仓库
测试场景二:生成本地代码库
测试场景三:对测试代码进行版本管理
前言:Git简史
- 同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。
- Linux 内核开源项目有着为数众广的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。
- 到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。
- 他们对新的系统制订了若干目标:
- 速度
- 简单的设计
- 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
- 完全分布式
- 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
- 自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统
备注: 1. Github.com: Github是借助Git的商业化托管网站 2. Gitlab.com: 使用Ruby开发的开源Git服务端
简介:Git管理结构
- 示意图
- Git管理代码的4个存放区:从本地到远程
- 工作区(Working Area)
- 暂存区(Stage)
- 本地仓库(Local Repository)
- 远程仓库(Remote Repository)
- Git管理代码的5种状态:进入每一个区会产生一个状态,加上最初状态,一共是5种状态
- 未修改(Origin)
- 已修改(Modified)
- 已暂存(Staged)
- 已提交(Committed)
- 已推送(Pushed)
- Git开发工作流的3个步骤:
git add .
把所有文件放入暂存区;git commit
把所有文件从暂存区提交进本地仓库;git push
把所有文件从本地仓库推送进远程仓库。
- Git测试工作流的步骤:
git clone 地址
# 获取代码git pull
# 更新代码git revert
# 放弃修改 -- 具体的命令见下文
测试场景一:查看代码仓库
介绍Gitlab服务端Web
测试价值:可以查看开发提测的代码内容,并且可以看修改记录
-
以下用工作中的查看代码场景开讲解,举例使用的项目为一个demo项目
-
Gitlab是支持git的服务端,有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
-
点开项目路径
-
查看java文件代码
-
查看提交记录列表
-
查看提交的本次修改内容
测试场景二:生成本地代码库
介绍Git客户端
测试价值:可以在本地部署运行调试,或者查看代码引用关系
- 如何拉取远程仓库里的代码在本地使用?
- 安装
Git-2.15.0-64-bit.exe
- 设置path环境变量
- 验证Git启动
- 设置path环境变量
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: ...
- 设置git本地秘钥
- 运行git bash终端
- 生成ssh秘钥文件
- 运行git bash终端
#进入终端 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)
- 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秘钥
- 获取刚才配置的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秘钥
- 添加后的效果
- 我们再来拉一次,验证git的ssh秘钥是否可用
D:\codeJava\GitLabRespo\apama\ApamaSample>git pull Already up to date. #这里显示已经通过验证,收到服务器信息,已经是最新代码
- gitlab的账号里ssh使用记录更新了
- git clone:在git pull之前,需要克隆出一个本地代码库
- 这里用idea来演示一下
- idea启动界面选择git方式
- idea设置git路径
- 获取项目ssh地址
- 拉取项目代码,点击clone
- 拉取完成
测试场景三:对测试代码进行版本管理
介绍Git工作流
测试价值:利用Git的版本和分支两大管理能力,方便管理开发自己的脚本
- 未在版本库的文件 add: workspace -> index 添加到版本控制的名单里
新增一个文件,用来演示
在下面的控制台可以看到 unversioned文件,未加入版本控制
右键点commit后,在清单里勾选即可加入管理
- 修过改的文件 commit: workspace -> local repository 提交到本地库 (下图)
放弃修改不提交 revert: 本地代码回退到上一次更新时的代码 (下图)
- 调试完成的代码 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操作入口
至此,我们讲了Git的三个运用: 1. 查看:怎么用gitlab查看远程仓库里的项目代码和提交改动 2. 拉取:怎么用git创建本地代码库,便于本地部署运行项目进行调试 3. 管理:怎么用git对自己的代码脚本进行版本管理