尝试追加“@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
创建的补丁。这本身只能居多,与一般的解析污秽,与最终的文件换行符的问题,二元变化等
您的p4导入脚本是公开的吗?如果是这样,你介意分享吗? – joce 2009-05-03 21:07:41