git-p4
git-p4 基本操作,见 https://blog.csdn.net/u013272009/article/details/120166796
多个分支
假设已经用 p4 sync 同步了 2 个 p4 分支:
client | client type | p4 远程地址 | 本地目录 |
---|
tl_fananchong_vm1 | stream client | //Torchlight/MainLineWithUGS/backend/ | /home/fananchong/MainLineWithUGS | tl_fananchong_vmweek | stream client | //Torchlight/weeklineWithUGS/backend/ | /home/fananchong/weeklineWithUGS |
下面介绍,如何使用 git-p4 来做把 MainLineWithUGS 分支的代码合并到 weeklineWithUGS
制作多个分支的 git 仓库
举例说明:
-
把 git 仓库建在 /home/fananchong/git2/ugs/backend mkdir -p /home/fananchong/git2/ugs/backend
pushd /home/fananchong/git2/ugs/backend
git init
popd
-
把 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
-
检查 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 p4 sync --branch=MainLineWithUGS
git rebase p4/MainLineWithUGS
P4CLIENT=tl_fananchong_vm1 git p4 submit --branch=MainLineWithUGS
如果遇到有代码冲突的,以下命令可以完成提交:
git p4 sync --branch=MainLineWithUGS
git rebase p4/MainLineWithUGS
git rebase --continue
P4CLIENT=tl_fananchong_vm1 git p4 submit --branch=MainLineWithUGS
合并版本到其他分支
举例说明(下面命令和命令的输出都显示,注意区分哪些是命令,哪些是输出):
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
git cherry-pick -e e55966e74515dfdb7760da8e9364e60f3f4ec109
test 1 2
[git-p4: depot-paths = "//Torchlight/MainLineWithUGS/backend/": change = 585088]
~
~
~
~
~
~
~
"~/git2/ugs/backend/.git/COMMIT_EDITMSG" 22L, 603B
git p4 sync --branch=weeklineWithUGS
git rebase p4/weeklineWithUGS
P4CLIENT=tl_fananchong_vmweek git p4 submit --branch=weeklineWithUGS
整理下命令流程如下:
git log
git checkout weeklineWithUGS
git cherry-pick -e e55966e74515dfdb7760da8e9364e60f3f4ec109
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 type | view | 矛盾点 |
---|
stream client | 本分支 veiw | 可提交代码,但是没法设置多个 view | no stream client | 无限制 view 个数 | 可以设置多个分支 view ,但是没办法提交代码 |
我们合并好代码是要提交的,所以只能是 stream client 。所以需要手动加 -e 注释掉那行注释
PS. 如果有读者知道很好的处理方式,请留言告知
最佳实践
- 建议同时制作 master 版本 git 库和多分支版本 git 库
- 平时大多数时间只要在 master 版本 git 库使用 git p4 rebase 与 git p4 submit
- 和分支代码时,到多分支版本 git 库目录,按本文说的操作方式
- 本文提到的命令可 sh 脚本,封装成命令
- 避免命令参数太长等问题
- 避免敲错分支名、 client 名等问题
以上
|