IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> git-p4 多个分支与版本合并 merge -> 正文阅读

[开发工具]git-p4 多个分支与版本合并 merge

git-p4

git-p4 基本操作,见 https://blog.csdn.net/u013272009/article/details/120166796

多个分支

假设已经用 p4 sync 同步了 2 个 p4 分支:

clientclient typep4 远程地址本地目录
tl_fananchong_vm1stream client//Torchlight/MainLineWithUGS/backend//home/fananchong/MainLineWithUGS
tl_fananchong_vmweekstream client//Torchlight/weeklineWithUGS/backend//home/fananchong/weeklineWithUGS

下面介绍,如何使用 git-p4 来做把 MainLineWithUGS 分支的代码合并到 weeklineWithUGS

制作多个分支的 git 仓库

举例说明:

  1. 把 git 仓库建在 /home/fananchong/git2/ugs/backend

    mkdir -p /home/fananchong/git2/ugs/backend
    pushd /home/fananchong/git2/ugs/backend
    git init
    popd
    
  2. 把 2 个 p4 分支同步到 git 仓库

    pushd /home/fananchong/git2/ugs/backend
    git p4 sync --branch=MainLineWithUGS //Torchlight/MainLineWithUGS/backend/...
    git checkout -b MainLineWithUGS p4/MainLineWithUGS
    git p4 sync --branch=weeklineWithUGS //Torchlight/weeklineWithUGS/backend/...
    git checkout -b weeklineWithUGS p4/weeklineWithUGS
    popd
    
  3. 检查 git 分支

    fananchong@ubuntu-vm:~/git2/ugs/backend$ git branch -a
    * MainLineWithUGS
      weeklineWithUGS
      remotes/p4/HEAD -> p4/MainLineWithUGS
      remotes/p4/MainLineWithUGS
      remotes/p4/weeklineWithUGS
    

至此, git 仓库对应 p4 的分支已经创建完毕

下面介绍如何多分支下,如何提交版本以及如何合并版本到其他分支

多分支下,提交版本

多分支下, git p4 rebase 命令不可以用。它没有提供参数来指定分支

不过看官方文档介绍:

This command does git p4 sync followed by git rebase to move local commits on top of updated p4 changes.

git p4 rebase 命令有 git p4 sync 与 git rebase 组成

实践下,确实可以完成多分支下,提交版本。

举例说明,以下命令可以完成提交:

# 本地操作,如
# git add xxx
# git commit -m "xxx"
# 下面演示如何提交
git p4 sync --branch=MainLineWithUGS
git rebase p4/MainLineWithUGS
P4CLIENT=tl_fananchong_vm1 git p4 submit --branch=MainLineWithUGS

如果遇到有代码冲突的,以下命令可以完成提交:

# 本地操作,如
# git add xxx
# git commit -m "xxx"
# 下面演示如何提交
git p4 sync --branch=MainLineWithUGS
git rebase p4/MainLineWithUGS
# 遇到冲突, IDE 中 git 插件提示有文件代码冲
# 手动解决冲突
# 然后重新提交改动的文件 xxx:
# git add xxx
# git commit -m "xxx"
git rebase --continue
P4CLIENT=tl_fananchong_vm1 git p4 submit --branch=MainLineWithUGS

合并版本到其他分支

举例说明(下面命令和命令的输出都显示,注意区分哪些是命令,哪些是输出):

# 先用 git log ,查看要合并的版本号。如 e55966e74515dfdb7760da8e9364e60f3f4ec109
git log
commit e55966e74515dfdb7760da8e9364e60f3f4ec109
Author: tl_backned_01 <tl_backned_01@p4d>
Date:   Sat Sep 25 17:36:16 2021 +0800

    test 1 2
    
    [git-p4: depot-paths = "//Torchlight/MainLineWithUGS/backend/": change = 585088]
# 切分支
git checkout weeklineWithUGS
# 合并版本,注意一定要加 -e ,目的是注释掉`[git-p4: depot-paths = "//Torchlight/MainLineWithUGS/backend/": change = 585088]`
git cherry-pick -e e55966e74515dfdb7760da8e9364e60f3f4ec109
test 1 2

[git-p4: depot-paths = "//Torchlight/MainLineWithUGS/backend/": change = 585088]
#
# It looks like you may be committing a cherry-pick.
# If this is not correct, please run
#       git update-ref -d CHERRY_PICK_HEAD
# and try again.


# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Author:    tl_backned_01 <tl_backned_01@p4d>
# Date:      Sat Sep 25 17:36:16 2021 +0800
#
# On branch weeklineWithUGS
# You are currently cherry-picking commit e55966e7.
#
# Changes to be committed:
#       modified:   test.txt
#
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
"~/git2/ugs/backend/.git/COMMIT_EDITMSG" 22L, 603B
# 下面提交,同上个章节内容,包括无冲突与有冲突 2 种处理
git p4 sync --branch=weeklineWithUGS
git rebase p4/weeklineWithUGS
P4CLIENT=tl_fananchong_vmweek git p4 submit --branch=weeklineWithUGS

整理下命令流程如下:

# 先用 git log ,查看要合并的版本号。如 e55966e74515dfdb7760da8e9364e60f3f4ec109
git log
# 切分支
git checkout weeklineWithUGS
# 合并版本,注意一定要加 -e ,目的是注释掉`[git-p4: depot-paths = "//Torchlight/MainLineWithUGS/backend/": change = 585088]`
git cherry-pick -e e55966e74515dfdb7760da8e9364e60f3f4ec109
# 下面提交,同上个章节内容,包括无冲突与有冲突 2 种处理
git p4 sync --branch=weeklineWithUGS
git rebase p4/weeklineWithUGS
P4CLIENT=tl_fananchong_vmweek git p4 submit --branch=weeklineWithUGS

重点说明:git cherry-pick -e <SHA>

如果不加 -e ,自动生成的提交注释种,有一行:[git-p4: depot-paths = "//Torchlight/MainLineWithUGS/backend/": change = 585088]
会导致,git p4 submit 去操作 MainLineWithUGS 分支,进而引发提交失败
这里 p4 client 类型设定上有个矛盾:

client typeview矛盾点
stream client本分支 veiw可提交代码,但是没法设置多个 view
no stream client无限制 view 个数可以设置多个分支 view ,但是没办法提交代码

我们合并好代码是要提交的,所以只能是 stream client 。所以需要手动加 -e 注释掉那行注释

PS. 如果有读者知道很好的处理方式,请留言告知

最佳实践

  1. 建议同时制作 master 版本 git 库和多分支版本 git 库
    • 平时大多数时间只要在 master 版本 git 库使用 git p4 rebase 与 git p4 submit
    • 和分支代码时,到多分支版本 git 库目录,按本文说的操作方式
  2. 本文提到的命令可 sh 脚本,封装成命令
    • 避免命令参数太长等问题
    • 避免敲错分支名、 client 名等问题

以上

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-09-26 10:23:24  更:2021-09-26 10:25:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:51:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码