我做了:
git p4 clone //depot/path/to/project/trunk/@all project
创建 的master
分支project
。现在我想克隆//depot/path/to/project/release
到. 这是怎么做的?release
project
更新:使用--detect-branches
也不起作用。它报告它正在更新两个分支(当实际上有三个分支时)但git branch
报告只有 master 存在。
我做了:
git p4 clone //depot/path/to/project/trunk/@all project
创建 的master
分支project
。现在我想克隆//depot/path/to/project/release
到. 这是怎么做的?release
project
更新:使用--detect-branches
也不起作用。它报告它正在更新两个分支(当实际上有三个分支时)但git branch
报告只有 master 存在。
这是我使用 git-p4 时的设置说明。这可能会有所帮助:
下载p4 linux 客户端。将文件存储在~/bin
or/usr/local/bin
和chmod +x
将 git-p4 设置为 root
chmod 755 /usr/share/doc/git/contrib/fast-import/git-p4
ln -s /usr/share/doc/git/contrib/fast-import/git-p4 /usr/local/bin
为 git-p4 定义 Git 全局变量
git config --global alias.p4 '!git-p4'
git config --global git-p4.detectRenames true
git config --global git-p4.detectCopies true
设置直接“p4”使用的定义
export P4PORT=SERVER_NAME:PORT_NUMBER
设置登录凭据
export P4USER=USER_NAME
export P4PASSWD=PASSWORD
使用 P4 'client' 选择 Perforce 分支
运行“p4 client”命令,只添加您感兴趣的路径/分支。如果您想命名客户端工作空间,您可以在命令末尾添加一个可选的 CLIENT_NAME 参数。这将允许您在同一台机器上使用不同的客户端定义。
$ p4 client [CLIENT_NAME]
View:
//depot/main... //CLIENT_NAME/main...
//depot/patch... //CLIENT_NAME/patch...
//depot/dev... //CLIENT_NAME/dev...
克隆存储库
简单导入
git p4 clone --use-client-spec --detect-branches //depot@all GIT_DIR
高级导入
git init PROJ; cd PROJ/
git config git-p4.branchList main:patch
git config --add git-p4.branchList main:dev
git p4 clone --use-client-spec //depot@all .
将更改提交回 Perforce
为了向 Perforce 提交更改,它需要一个客户端工作区,与 git 工作树分开。建议工作区与 Perforce git 工作目录位于同一文件系统上。
此外,对工作区路径的引用存储在 Perforce 服务器上,并将在p4 submit
命令期间使用。
第一步是创建本地客户端工作区。CLIENT_NAME
是一个可选参数。如果您不定义它,p4 将使用您的主机名。
p4 client [CLIENT_NAME]
在完成 p4 命令之前,您将被移至文件编辑器。这使您可以在将任何客户端设置发送到服务器之前更改它们。您必须将Root
值更改为 git 树之外的新目录(例如 ../p4-working) 此外,在退出之前验证Owner
和Client
值。这些值取自您的环境,无法在编辑器中更改。
p4 clients | grep USERNAME
如果您没有使用默认客户端名称,则必须在本地 git config 中定义它:
git config git-p4.client CLIENT_NAME
当您准备好推送代码更改时,请使用以下命令:
git p4 rebase
git p4 submit
您可以在不再使用时从服务器中删除客户端:
p4 client -d CLIENT_NAME
在 Git 2.30(2021 年第一季度)中,“ (man) p4”现在支持配置。git
init.defaultBranch
这可能是 detect-branches
or的替代解决方案--branch
:
请参阅Johannes Schindelin ( ) 的提交 1b09d19(2020 年 11 月 8 日)。(由Junio C Hamano 合并 -- --在ca8870d 提交中,2020 年 11 月 11 日)dscho
gitster
p4
: 尊重init.defaultBranch
签字人:约翰内斯·辛德林
在
git p4 clone
中,我们对分支名称进行硬编码,master
而不是查看实际的初始分支名称。
让我们解决这个问题。
我相信“检测分支”依赖于您拥有与仓库中的分支路径同名的分支映射。如果不是这种情况,您可能需要在运行 git-p4 clone 命令之前使用建议的方法git-p4.branchList
在空的 git 存储库中定义配置值。
答案太晚了,但是关于 git-p4 的文档太少了,我希望它仍然有用。
我还努力将分支添加到现有存储库,并且从未获得detect-branches
使用分支映射的魔力。
我在手动阶段中取得了更多的成功,明确地告诉 git-p4 导入哪个路径并使用该--branch
选项。我相信release
在运行之前我还在现有存储库中手动创建了分支。
对于这个问题,那将是git p4 sync //depot/path/to/project/release --branch=release
我相信这也可以使用clone
,因为克隆主要只是在 git-p4 代码中的幕后同步,但是一旦你已经有了一个存储库,我认为sync
会更安全。