如何在 Windows 中运行 git-p4?

Posted

技术标签:

【中文标题】如何在 Windows 中运行 git-p4?【英文标题】:How does one run git-p4 in Windows? 【发布时间】:2011-02-08 10:29:06 【问题描述】:

看起来 git-p4 不是 Windows 的 MSys-Git 项目的一部分。有人知道如何让它通过 Windows 运行吗?

【问题讨论】:

你说得对,Windows 版 Git(也称为 MSysGit)不支持它。功能请求github.com/msysgit/msysgit/issues/108 【参考方案1】:

2019 年 7 月更新,Gabriel Morin 现在提到了“Git P4 clone broken”问题:

[alias]
    p4 = !python.exe 'c:\\program files\\Git\\mingw64\\libexec\\git-core\\git-p4'

然后在命令行中使用git p4 就可以了。


借助 Git 2.32(2021 年第二季度),git p4 学会了更有效地查找分支点。

参见Joachim Kuebart (jkuebart) 的commit 6b79818、commit c3ab088(2021 年 5 月 5 日)。(由 Junio C Hamano -- gitster -- 合并到 commit e289f68,2021 年 5 月 14 日)

git-p4: 加快查找分支父节点

签字人:Joachim Kuebart协助人:Junio C Hamano协助人:Luke Diamand

对于git-p4 导入的每个新分支,它需要找到从其父分支分支的提交。 虽然p4 没有明确记录此信息,但分支上的第一个更改列表通常是父分支的相同副本。

方法searchParent() 尝试在给定“父”分支的历史记录中找到一个提交,其树与新分支的初始更改列表“target”完全匹配。 代码遍历父提交,并使用 diff-tree 将它们中的每一个与此初始更改列表进行比较。

由于我们已经知道要查找的树对象名称,因此为每次提交生成 diff-tree 是一种浪费。

使用“rev-list”的“--format”选项查找历史中每个commit的树对象名称,找到与目标commit的树名称完全相同的树进行优化这个。

这会带来相当大的加速,至少在 Windows 上是这样。 在一台 Windows 机器上,在父分支中有大约 16000 次提交的相当大的存储库,当前代码需要 7 多分钟,而对于相同的更改列表,新代码只需要 10 多秒:

之前:

$ time git p4 sync
Importing from/into multiple branches
Depot paths: //depot
Importing revision 31274 (100.0%)
Updated branches: b1

real    7m41.458s
user    0m0.000s
sys     0m0.077s

之后:

$ time git p4 sync
Importing from/into multiple branches
Depot paths: //depot
Importing revision 31274 (100.0%)
Updated branches: b1

real    0m10.235s
user    0m0.000s
sys     0m0.062s

2020 年 3 月更新

在 Git 2.27(2020 年第二季度)中,“git p4”已更新为与 Python 3 一起使用。

见commit 6bb40ed(2020 年 1 月 23 日)SZEDER Gábor (szeder)。 见commit 7575f4f,commit ce425eb,commit 2e2aa8d,commit a6b1306,commit 4294d74,commit 50da1e7,commit 5a5577d,commit d38208a,commit 86dca24,@9876543440@,@9876543440@,@9876543441(commit 1f8b46d,@987654 2019 年 12 月)Yang Zhao (yangminz). 请参阅 Ben Keene (seraphire) 的 commit 484d09c(2019 年 12 月 13 日)。(由 Junio C Hamano -- gitster -- 合并于 commit 9a0fa17,2020 年 3 月 25 日)

ci: 在 linux-gcc 和 osx-gcc 和 python2 其他地方使用 python3

签字人:SZEDER Gábor

Python2 已结束生命周期,我们一直在准备 Python 脚本以与 Python3 一起使用。

'git p4',Python 的主要 in-tree 用户,刚刚收到了一些兼容性更新。

这仅在 Git 2.30(2021 年第一季度)中记录在 commit 263dc0。


2018 年 7 月更新:

Git 2.19(2018 年第三季度)将开始为 git p4 带来 Python 3 支持。

参见commit db2d997、commit f2606b1、commit efdcc99、commit 4d88519、commit dba1c9d、commit fc35c9d(2018 年 6 月 19 日)Luke Diamand (luked99)。(由Junio C Hamano -- gitster -- 合并commit 6dcd364,2018 年 7 月 18 日)

编写代码以使“git p4”更接近 Python 3 的可用性。


2016 年 1 月更新:

自 2010 年起,contrib/fast-import/git-p4.README 自 2012 年 4 月起提及

git-p4 脚本移至 git 源目录的顶层。 请注意,*** git-p4.py 脚本现在是源代码

Windows 用户可以直接复制git-p4.py 源脚本,可能 通过同一文件夹中名为“git-p4.bat”的批处理文件调用它。 它应该只包含一行:

@python "%~d0%~p0git-p4.py" %*

(虽然这是2013 article is invoking git-p4.py directly)


原始答案(2010 年 4 月)

正如“Why Perforce is more scalable than Git”中提到的,注意不要在 Git any p4 repo 中导入。 Git 无法处理 P4 可以管理的那种巨大的独特 repo。

Git-P4 在 Python 中,它应该在 Windows 上运行(就像在 this question 中一样)

您可以grab git-p4.py here 并将其用作 git-p4.bat

@python "%~d0%~p0git-p4" %*

它需要安装 Python 2.x。

别忘了还有another approach as well。

【讨论】:

【参考方案2】:

我得到了它的工作,但这是一个漫长而艰巨的过程,充满了危险。我在我的博客上写了说明:http://ericlathrop.com/2012/12/how-to-set-up-git-p4-in-windows/

【讨论】:

感谢您发布您的答案!请注意,您应该在此处或此站点上发布答案的基本部分,否则您的帖子可能会被删除See the FAQ where it mentions answers that are 'barely more than a link'. 如果您愿意,您仍然可以包含该链接,但仅作为“参考”。答案应该是独立的,不需要链接。 请注意,您不需要旧版本的 msysgit;见下面涛的回答。【参考方案3】:

我找到的最简单的答案是Timo Geusch's blog:

确保您已安装 Python 2.X,例如在 C:\Python27 中(不知道 git-p4 是否支持 Python 3,所以我没有冒险 git-p4.py does not support Python 3.X,截至 2014 年 3 月) 从任何地方获取 git-p4.py 的副本,例如 Eric Lathrop 的博客文章建议,直接从 git repo 获取(我从 git 2.1 的 linux 安装中获得了我的副本,我碰巧已经设置了) 在您的 MSysGit 安装中,导航到 libexec\git-core,例如在我的 Git for Windows 1.9.4-preview20140611 上安装在 Windows 7 64 位上,即 C:\Program Files (x86)\Git\libexec\git-core 把你的 git-p4.py 文件放在那里

在同一位置,编辑“git-p4”无扩展名文件,用单行替换虚拟 echo 和 exit 行

c:/python27/python "c:/program files (x86)/Git/libexec/git-core/git-p4.py" $1 $2 $3 $4 $5 $6 $7 $8 $9

就是这样。 git-p4 现在可以在您的 MSysGit / Git for Windows 安装上运行,就像在任何 linux 机器上一样。

(请注意,Eric Lathrop's existing answer 有很多关于使用 git-p4 及其所有限制的附加信息;我认为这个问题可以从一个简单的如何回答实际问题中受益,即很容易让它工作Windows,免得让更多的流浪者像我上周一样灰心)

【讨论】:

请注意,如果 python 在您的 PATH 中,您可以将 git-p4.py 直接放在虚拟 libexec/git-core/git-p4 的顶部。 Python3 带有一个脚本 2to3.py (在 Tools/Scripts 目录中),可用于将 Python2 编写的脚本转换为使用 Python3 运行的脚本,但我有未测试它是否适用于 git-p4.py。转换的命令是:python 2to3.py -w git-p4.py(假设 2to3.pygit-p4.py 都在当前目录中)。【参考方案4】:

看完https://git-scm.com/docs/git-p4

 py -2 "C:\Program Files\Git\mingw64\libexec\git-core\git-p4" clone //Projects/App/@all

为我工作

【讨论】:

以上是关于如何在 Windows 中运行 git-p4?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 上构建 Mono 3.4.0/3.4.1

如何从 Windows 命令提示符在 Laravel 中运行 PHPUnit

git p4 如何在搁置的 cl 获得批准后提交 cl

如何在VS2012下静态构建Qt 4.8/5.2,使用静态MSVC运行时,支持Windows XP?

如何在windows上配置并运行Nginx

如何在Windows下运行linux shell脚本