2009-04-24 105 views
12

正如我在previous question中提到的,我正在考虑将我们的源代码控制从Perforce迁移到git。
环顾四周,我发现了git-p4(你必须多挖一点,因为它甚至不在链接指向的版本库中,实际的git-p4 script很难找到)。使用git-p4获取整个文件历史记录

我现在正在运行这个脚本,它会在新的git仓库中导入当前版本的文件,但我无法设法获取历史记录,无论我做什么。

下面是我用的是当前命令行是:

P4CLIENT=my-p4-clientspec git-p4 clone --max-changes=1000 --use-client-spec //p4/path/to/be/imported/...

所以,真正的问题是:如果有人已经成功地导入P4车厂,包括历史,我想知道如何你做到了。

谢谢!

joce。

回答

19

尝试追加“@all”到文件路径。例如,这将产生一个单一版本回购对我来说:

python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \ 
    //depot/services/master-pom/trunk/... 

此命令导入的全部历史:

python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \ 
    //depot/services/master-pom/trunk/[email protected] 

我使用的例子的git-p4的尝试,但放弃了几个原因,写我自己的快速进口泵。这是一段时间了,所以一些问题现在可能已经被修复了:但是git-p4在大型修改表(比如最初创建分支)时遇到了问题(尽管使用客户端规范可能有帮助,但是我没有认为我尝试了它)和文件与“+ S”filetype修饰符(这是坏和邪恶,但我们曾经使用它)。而我的Python-fu不会让我解决我遇到的问题。

编辑:因为有人问它,在这里。

https://github.com/araqnid/p4utils有几个p4的东西,其中p4-git-xfer是p4-> git(单向)复制器。不过,它有很多问题,因为它主要是个人的手工工具而不是真正的基础设施。

入门:

p4-git-xfer clone -d $PWD/dictionary.git -n //depot/services/midoffice/dictionary/... \ 
    trunk 'release/*' 'branch/*' \ 
    trunk=master release/*=r* branch/*=dev/* 

将克隆到裸 “dictionary.git” 那Perforce的路径。基路径之后的第一个参数是“分支规格”,它告诉复制器在底座下的哪个分支。后面的(带有'='符号)是“镜像规格”,它告诉复制器如何从导入的分支创建本地分支。分支规格会导致创建“refs/remotes/p4/trunk”,“refs/remotes/p4/release/1.0”等。镜像规格强制“refs/heads/master”镜像“refs/remotes/p4/trunk”,“refs/heads/r1.0”以镜像“refs/remotes/p4/release/1.0”等。作为一种让我从被复制的特定分支中选择要传播到克隆的方法。

它会尝试检测分支是如何创建的,但这与Perforce无论如何都是有点猜测的。除此之外,它不会尝试进行任何分支跟踪:即使是整个分支合并也不会被这样写出来,对不起。

初始克隆后,从git副本内部运行p4-git-xfer fetch将执行增量更新。高水位变更表取自git回购中的marks/p4。这是一个快速导入加载的标记文件,因此如果您使用filter-branch重写某些特殊的脚步,请注意,您也可能需要更新它。

这不是很漂亮,有一些中等到严重的问题;我主要是为了我自己的方便使用它,将我自己从Perforce问题中分离出来,而不是将其作为日常的关键基础设施组件。这是单向的:我通常使用p4-am脚本来应用由git format-patch创建的补丁。这本身只能居多,与一般的解析污秽,与最终的文件换行符的问题,二元变化等

+0

您的p4导入脚本是公开的吗?如果是这样,你介意分享吗? – joce 2009-05-03 21:07:41

0

我也想弄清楚git-p4。不幸的是,那里没有太多的文档。我想与您取得联系,因为我们可能会互相帮助。

+0

嘿卡尔。您可以通过gmail.com与jocelynlegault联系我 – joce 2009-04-28 22:15:32

-1

的混帐-P4的帮助实际上是相当不错的:

man git-p4 

在Ubuntu 12.04是包括在git-man包中。

0
  1. 安装的Git的bash(CLI)
  2. 安装P4 CLI
  3. 安装python 2.7
  4. 获取的git-P4脚本>>http://git.kernel.org/cgit/git/git.git/plain/git-p4.py
  5. 把这个脚本转换为C /程序/文件/ git的/ bin/
  6. 现在打开git bash或cmd检查通过输入python done,p4 done,git done,git p4,
  7. 创建名为git的客户端工作区。
  8. 混帐P4克隆贮库/路/ @全部回购/路径

以防万一不工作,如果蟒蛇产生问​​题 集P4CLIENT设置环境变量路径蟒蛇=混帐

相关问题