9

我做了:

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

创建 的master分支project。现在我想克隆//depot/path/to/project/release到. 这是怎么做的?releaseproject

更新:使用--detect-branches也不起作用。它报告它正在更新两个分支(当实际上有三个分支时)但git branch报告只有 master 存在。

4

4 回答 4

10

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

  • 下载p4 linux 客户端。将文件存储在~/binor/usr/local/binchmod +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) 此外,在退出之前验证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
    
于 2013-03-15T20:00:34.603 回答
1

在 Git 2.30(2021 年第一季度)中,“ man p4”现在支持配置。gitinit.defaultBranch

这可能是 detect-branchesor的替代解决方案--branch

请参阅Johannes Schindelin ( ) 的提交 1b09d19(2020 年 11 月 8 日(由Junio C Hamano 合并 -- --ca8870d 提交中,2020 年 11 月 11 日)dscho
gitster

p4: 尊重init.defaultBranch

签字人:约翰内斯·辛德林

git p4 clone中,我们对分支名称进行硬编码,master而不是查看实际的初始分支名称。
让我们解决这个问题。

于 2020-11-12T21:25:53.770 回答
0

我相信“检测分支”依赖于您拥有与仓库中的分支路径同名的分支映射。如果不是这种情况,您可能需要在运行 git-p4 clone 命令之前使用建议的方法git-p4.branchList在空的 git 存储库中定义配置值。

于 2013-03-09T07:51:39.510 回答
0

答案太晚了,但是关于 git-p4 的文档太少了,我希望它仍然有用。

我还努力将分支添加到现有存储库,并且从未获得detect-branches使用分支映射的魔力。

我在手动阶段中取得了更多的成功,明确地告诉 git-p4 导入哪个路径并使用该--branch选项。我相信release在运行之前我还在现有存储库中手动创建了分支。

对于这个问题,那将是git p4 sync //depot/path/to/project/release --branch=release

我相信这也可以使用clone,因为克隆主要只是在 git-p4 代码中的幕后同步,但是一旦你已经有了一个存储库,我认为sync会更安全。

于 2019-04-19T22:34:05.487 回答