如何使用git-p4克隆分支?

时间:2013-03-08 23:55:30

标签: git-p4

我做了:

git p4 clone //depot/path/to/project/trunk/@all project

创建master的{​​{1}}分支。现在,我想将project克隆到//depot/path/to/project/release的{​​{1}}分支。怎么做的?

更新:使用release也不起作用。它报告它正在更新两个分支(当有三个分支时),但project报告只存在主分支。

4 个答案:

答案 0 :(得分:9)

以下是我使用git-p4时的设置说明。它可能会有所帮助:

  • 下载p4 linux client。将文件存储在~/bin/usr/local/binchmod +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)另外,验证OwnerClient 退出前的价值观。这些值来自您的环境,以及 无法在编辑器中更改。

    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 1b09d19Johannes Schindelin (dscho)(2020年11月8日)。
(由Junio C Hamano -- gitster --commit ca8870d中合并,2020年11月11日)

p4:尊重init.defaultBranch

签名人:Johannes Schindelin

git p4 clone中,我们对分支名称master进行了硬编码,而不是查找 actual 初始分支名称是什么。
让我们解决这个问题。