
Git常见操作指南:测试工程师的版本控制宝典
Git常见操作指南:测试工程师的版本控制宝典
Git就像是代码的时光机,让我们能够自由穿梭在代码的历史长河中。作为测试工程师,掌握Git不仅能管理测试代码,还能让团队协作变得井井有条!
.gitignore文件:不想被追踪的秘密
在开始Git之旅前,先学会如何"隐藏"不需要版本控制的文件:
🔗 实用工具: gitignore生成器
# 测试工程师常用的.gitignore配置
# Python测试项目
__pycache__/
*.pyc
.pytest_cache/
htmlcov/
.coverage
# 测试报告
reports/
test-results/
allure-results/
# IDE配置
.vscode/
.idea/
*.swp
# 环境配置
.env
venv/初次提交代码
初始化代码仓库:
git init // 初始化版本库
git add . // 添加文件到版本库(只是添加到缓存区),.代表添加文件夹下所有文件
git commit -m "first commit" // 把添加的文件提交到版本库,并填写提交备注
git remote add origin 你的远程库地址 // 把本地库与远程库关联
git push -u origin master // 第一次推送时
git push origin master // 第一次推送后,直接使用该命令即可推送修改
master 这个是你分支
E.g:
git init
git remote add origin {url}
git add .
git commit -m "Initial commit"
git push -u origin master拉取代码建立自己分支
## 拉取代码
git clone xxxxxx
## 进入代码仓库
cd ipass.openApi.test
## 切到自己想要的测试分支
git checkout -b dev_frame_v1.0
## 将远端的代码和本地同步
git branch --set-upstream-to=origin/dev_frame_v1.0 dev_frame_v1.0
## 更新本地代码
git pull
## 建立自己的分支,在上面进行开发
git checkout dev_* ## 使用合理的命名方式常见提交代码操作
git add .
git commit -am "xxxxxx"
git push常规merge操作
Check out, review, and merge locally
Step 1. Fetch and check out the branch for this merge request
git fetch origin
git checkout -b dev_frame_new origin/dev_frame_new
Step 2. Review the changes locally
Step 3. Merge the branch and fix any conflicts that come up
git fetch origin
git checkout origin/dev_yxl_1212
git merge --no-ff dev_frame_new
Step 4. Push the result of the merge to GitLab
git push origin dev_yxl_1212案例
假设我们在dev_frame_v1.0分支上进行开发,我们将其命名为dev_test分支
dev_frame_v1.0 ->$ git checkout -b dev_test我们对该代码进行如下修改,删除test_case/test_ipaas/test_AdbKey_openapi.py中101-102行代码,之后进行提交
def git_merge_test():
logger.info(f"test git merger")我们提交到代码仓库
(openapicase) ✘ ~/PycharmProjects/my_project/ipass.openApi.test dev_test git add .
(openapicase) ~/PycharmProjects/my_project/ipass.openApi.test dev_test ✚ git commit -am "删除无效代码片段"
[dev_test e1c53ce] 删除无效代码片段
1 file changed, 4 deletions(-)
(openapicase) ~/PycharmProjects/my_project/ipass.openApi.test dev_test git push --set-upstream origin dev_test
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Total 5 (delta 4), reused 1 (delta 1), pack-reused 0
remote:
remote: To create a merge request for dev_test, visit:
* [new branch] dev_test -> dev_test
Branch 'dev_test' set up to track remote branch 'dev_test' from 'origin'.之后我们切回dev_frame_v1.0进行分支合并
git checkout dev_frame_v1.0我们可以看到,刚才删除的代码片段在这段代码中是还存在的

执行合并操作
- --no-ff 非 Fast-forward 模式:在任何情况下都会创建新的 commit 进行多方合并(及时被合并的分支为自己的直接后代)
git merge --no-ff dev_test上述命令输入完成后,会出现如下信息,我们输入必要的commit的信息即可,当然不输入也是可以的。

操作完成后,结果如下:

相关代码片段的删除完成

之后,我们查询一下当前的git log信息,可以看到我们的代码已经更新为最新的代码了。

有冲突的merge操作
当然,上面是简单的合并,在真正的开发过程中,每个小组成员的代码是可能conflict的,这个时候,我们就需要先解决重复,之后再进行上传。
案例
还以刚才的例子做为讲解
开发小组的成员a在dev_test分支,又对刚才的代码片段进行了修改
开发小组的成员b在dev_frame_v1.0分支也对刚才的代码片段进行了修改
这个时候如果进行合并,就会产生代码的合并冲突
dev_test增加的代码片段

dev_frame_v1.0增加的代码片段

上传至代码仓库
↱ dev_frame_v1.0 ± git add .
↱ dev_frame_v1.0 ✚ git commit -am "add test merge"
[dev_frame_v1.0 940c4e6] add test merge
1 file changed, 4 insertions(+)
↱ dev_frame_v1.0 git push开始合并代码
git merge --no-ff xxxx
我们可以看到,我们的源代码片段,产生了如下冲突:

对上面进行一个简单的解释
<<<<<< HEAD
xxxxxxxx 该分支下,造成冲突的代码
============
xxxxxxxxx dev_test分支下的代码
>>>>>> dev_test我们现在需要做的就是看一下上面的代码片段,我们是保留dev_test的还是本分支的,只需要把不需要的代码片段删除即可。
当然这部分,我们可以使用IDE的工具辅助我们来完成

点击后

我们选择接受左边的代码还是右面的代码,或者我们也可以自己来留下两者合适的部分

比如说,我们选择接受dev_test的分支代码,相关代码保留如下:

这个时候我们就需要重新进行版本的提交了
git add .
git commit -am "合并冲突代码"
git push日志如下:
(openapicase) ✘ ~/PycharmProjects/my_project/ipass.openApi.test dev_frame_v1.0 ±✚ >M< git add .
(openapicase) ~/PycharmProjects/my_project/ipass.openApi.test dev_frame_v1.0 ✚ >M< git commit -am "合并冲突代码"
[dev_frame_v1.0 ff6f9b1] 合并冲突代码
(openapicase) ~/PycharmProjects/my_project/ipass.openApi.test ↱ dev_frame_v1.0 git push
Enumerating objects: 1, done.这个时候,我们再次查看一下版本git log,已经是合并后的代码了

删除代码分支
要删除远程仓库中的分支,可以使用 git push 命令并指定 --delete 选项。以下是删除远程分支的步骤:
- 确保您当前处于要删除的分支的本地副本上。可以使用以下命令检查当前所在分支:
git branch --show-current
2. 运行以下命令来删除远程分支:
```plain
git push origin --delete <branch-name>将 <branch-name> 替换为要删除的远程分支的名称。
例如,如果要删除名为 feature 的远程分支,可以运行以下命令:
git push origin --delete feature
```
这将从远程仓库中删除名为 `feature` 的分支。
```
请注意以下几点:
+ origin 是远程仓库的名称。根据您的配置,可能需要替换为实际的远程仓库名称。
+ 删除远程分支需要适当的权限。您可能需要具有合适的权限才能删除远程分支。
+ 请谨慎操作,删除远程分支后,相应的分支和提交将无法恢复。
删除本地分支
```python
git branch -d branch_name
```
将 `branch_name` 替换为要删除的分支的名称。
如果分支未合并到当前分支,使用 `-d` 参数删除分支时会显示警告信息。如果确定要强制删除未合并的分支,可以使用 `-D` 参数:
````shell
git branch -D branch_name
```
```
# 问题
## case1:fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
我有仓库的权限,但是报错如上
遇到 `fatal: Could not read from remote repository` 错误,通常表明 Git 无法访问远程仓库。虽然您说您有仓库的权限,但仍然可能存在一些其他问题。以下是一些常见的解决方案:
### 1. **检查远程仓库 URL**
确保您使用的远程仓库 URL 是正确的。可以通过以下命令查看远程 URL:
```plain
git remote -v
```
如果 URL 不正确,可以用以下命令更新它:
```plain
git remote set-url origin <new-url>
```
### 2. **检查 SSH 密钥**
如果您使用 SSH 连接到 Git 仓库,确保您的 SSH 密钥已正确配置并添加到 SSH agent。您可以通过以下命令检查 SSH 密钥:
```plain
ssh-add -l
```
如果没有列出密钥,可以使用以下命令添加它:
```plain
ssh-add ~/.ssh/id_rsa # 替换为您的私钥路径
```
### 3. **测试 SSH 连接**
可以测试与 Git 服务器的 SSH 连接:
```plain
ssh -T git@github.com # 替换为您的 Git 服务器地址
```
如果连接成功,应该看到一条欢迎消息。如果有任何错误,请根据错误信息进行排查。
### 4. **检查访问权限**
确保您的 Git 账户有权限访问该仓库。如果您使用的是 GitHub,确保您在该仓库的 Collaborators 列表中,或者您是该组织的成员。
### 5. **Git 配置**
检查您的 Git 配置,确保没有错误的用户名或邮件地址:
```plain
git config --global user.name
git config --global user.email
```
### 6. **切换到 HTTPS**
如果您在使用 SSH 时遇到问题,可以尝试使用 HTTPS URL 代替。可以通过以下命令更改远程 URL:
```plain
git remote set-url origin https://github.com/username/repo.git
```
### 7. **防火墙或代理设置**
如果您在公司网络或防火墙后面,可能需要检查网络设置,确保 Git 可以访问外部网络。
### 8. **确认仓库存在**
最后,确保您要访问的仓库确实存在并且未被删除。
###
## this is larger than GitHub's recommended maximum file size of 50.00 MB
这个报错提示你上传的文件大小超过了 GitHub 推荐的最大文件大小(50 MB)。为了解决这个问题,你可以使用 **Git Large File Storage (LFS)** 来管理大文件。以下是解决步骤:
### 解决步骤
1. **安装 Git LFS**:
- 对于 Windows 用户,可以从 [Git LFS 官网](https://git-lfs.github.com) 下载并安装。
- 对于 macOS 用户,可以使用 Homebrew: bash复制
```plain
brew install git-lfs
```
- 对于 Linux 用户,使用适合你发行版的包管理器进行安装。
**初始化 Git LFS**:
在你的 Git 仓库中运行以下命令:
```plain
git lfs install
```
**配置要跟踪的大文件类型**:
例如,如果你要跟踪 PDF 文件,可以运行:
```plain
git lfs track "*.pdf"
```
这将在你的仓库中创建或更新 `.gitattributes` 文件。
**添加并提交更改**:
确保 `.gitattributes` 文件被跟踪,然后提交更改:
```plain
git add .gitattributes
git add src/code/数据结构与算法/LeetCode面试常见算法整理.pdf
git commit -m "Add large PDF file with Git LFS"
```
**推送到远程仓库**:
最后,推送更改到 GitHub:
```plain
git push origin main
```
### 注意事项
- 使用 Git LFS 之后,你可以正常管理和推送大文件,避免超出 GitHub 的大小限制
- 每个 GitHub 账户使用 Git LFS 时,默认会有 1 GiB 的免费存储和每月 1 GiB 的免费带宽,如果需要更多,可以选择购买额外的配额
## 总结与最佳实践
### 🎯 测试工程师的Git工作流
作为测试工程师,建议采用以下Git工作流:
```bash
# 1. 每日工作开始前同步代码
git pull origin main
# 2. 创建功能分支进行测试开发
git checkout -b feature/test-new-api
# 3. 频繁提交,记录测试进度
git add tests/test_new_api.py
git commit -m "test: 添加新API基础测试用例"
git add tests/test_new_api.py
git commit -m "test: 增加API异常场景测试"
# 4. 推送分支,创建PR
git push origin feature/test-new-api
# 5. 合并后清理分支
git checkout main
git pull origin main
git branch -d feature/test-new-api
```
### 💡 实用技巧总结
1. **提交信息要有意义**:让团队成员一眼就能看懂你做了什么
2. **小步快跑**:频繁提交,每次提交只做一件事
3. **分支管理**:为不同的测试任务创建独立分支
4. **定期同步**:避免代码冲突,保持与主分支同步
5. **备份重要数据**:使用Git LFS管理大文件
### 🚀 进阶学习方向
- **Git Hooks**:自动化测试触发
- **Git Flow**:标准化的分支管理策略
- **Git Submodules**:管理测试依赖项目
- **Git Bisect**:快速定位引入bug的提交
记住:**Git是工具,规范是关键,团队协作是目标**!