我做了:
git p4 clone //depot/path/to/project/trunk/@all project
创建master
的{{1}}分支。现在,我想将project
克隆到//depot/path/to/project/release
的{{1}}分支。怎么做的?
更新:使用release
也不起作用。它报告它正在更新两个分支(当有三个分支时),但project
报告只存在主分支。
答案 0 :(得分:9)
以下是我使用git-p4时的设置说明。它可能会有所帮助:
下载p4 linux client。将文件存储在~/bin
或/usr/local/bin
和chmod +x
以root身份设置git-p4
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'客户端'
选择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 tree(例如../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
答案 1 :(得分:0)
我相信“检测分支”依赖于您的分支映射与您的软件仓库中的分支路径同名。如果不是这种情况,您可能需要在运行git-p4 clone命令之前使用在空git仓库中定义git-p4.branchList
配置值的suggested method。
答案 2 :(得分:0)
答案太晚了,但是关于git-p4的文档太少了,我希望它仍然有用。
我还努力将分支添加到现有存储库中,但从未使detect-branches
魔术与分支映射一起使用。
我在分阶段手动完成操作方面取得了一些成功,显式地告诉git-p4要导入的路径并使用--branch
选项。我相信我还可以在运行现有存储库之前手动创建release
分支。
对于这个问题,应该是git p4 sync //depot/path/to/project/release --branch=release
我相信这也可以使用clone
来完成,因为克隆大多只是在git-p4代码中在后台同步,但是一旦有了存储库,我认为sync
会更安全
答案 3 :(得分:0)
使用Git 2.30(Q1 2021),“ git
(man) p4”现在支持init.defaultBranch
配置。
这可能是detect-branches
或--branch
的替代解决方案:
请参见commit 1b09d19的Johannes Schindelin (dscho
)(2020年11月8日)。
(由Junio C Hamano -- gitster
--在commit ca8870d中合并,2020年11月11日)
p4
:尊重init.defaultBranch
签名人:Johannes Schindelin
在
git p4 clone
中,我们对分支名称master
进行了硬编码,而不是查找 actual 初始分支名称是什么。
让我们解决这个问题。