在初始克隆后扩展`git-p4`clientspec
在执行了git-p4克隆--use clientspec之后,我想向clientspec添加一个额外的条目,并将添加条目的当前状态导入我的git存储库 扩展clientspec后,在初始克隆后扩展`git-p4`clientspec,git,perforce,git-p4,Git,Perforce,Git P4,在执行了git-p4克隆--use clientspec之后,我想向clientspec添加一个额外的条目,并将添加条目的当前状态导入我的git存储库 扩展clientspec后,git-p4 rebase什么都不做(可能是因为自上次提交更改以来没有新的相关更改列表,我所做的只是更新clientspec) 我尝试了执行git-p4同步--use client spec,但这抱怨说快速导入失败,因为新提示不包含我的初始提交 有没有一种方法可以扩展客户机规范,而不必从头克隆新的git存储库?在撰写本
git-p4 rebase
什么都不做(可能是因为自上次提交更改以来没有新的相关更改列表,我所做的只是更新clientspec)
我尝试了执行git-p4同步--use client spec,但这抱怨说快速导入失败,因为新提示不包含我的初始提交
有没有一种方法可以扩展客户机规范,而不必从头克隆新的git存储库?在撰写本文时,我找不到一种方法可以让git-p4直接从Performce clientspec导入其他路径。然而,我相信我已经设计了一种手动操作的方法,并让git-p4遵守它 免责声明:对于以下步骤可能造成的任何损坏,我概不负责。首先备份
.git
树可能是个好主意
想法
正如您所说,只需向Perforce clientspec添加一条路径并执行git p4 rebase
一开始什么都不做。但是,我注意到,git-p4 rebase
在Perforce中修改文件后,如果新路径在git-p4
的depot paths
列表中,将从该路径添加文件。(depot paths
是提供给git p4 clone
的depot paths的初始列表),因此您需要:
git-p4
以将新路径包括在其仓库路径
列表中git-p4
显然不会将其仓库路径
列表或上次导入的性能更改编号存储在git提交消息以外的任何位置,因此您可以通过在自己的提交消息中复制其元数据来欺骗git-p4
最后,您可以移动p4/master
(和p4/HEAD
,它是p4/master
的别名)以指向您的新提交,以便将来的git p4 rebase
命令将该提交视为从performe导入的内容
一步一步地
p4/master
对应的提交。确保没有任何阶段性或未阶段性更改。如果你这样做,就把它们藏起来//depot/new/path/
git log
查看上次导入的performe更改中的提交消息。它将有一行如下所示:
[git-p4:depot paths=“//depot/tree/”:change=12345]
记下性能更改编号p4 sync//depot/new/path/…@12345
git add
git提交
。您通常可以在提交消息中说任何您想说的话(例如,“初始导入//depot/new/path/from CLN 12345”)。但是,在消息末尾,您必须复制以前观察到的git-p4
元数据行:
[git-p4:depot paths=“//depot/tree/”:change=12345]
如果//depot/new/path/
不是//depot/tree
的子目录,则必须修改depot路径
以添加新路径:
[git-p4:depot path=“//depot/new/path/,//depot/tree/”:change=12345]
仓库路径
列表必须按ASCII值排序(即//depot/foo-bar/
应位于//depot/foo/bar/
之前)git-p4
行看起来像导入的Perforce更改中的行。记下提交的SHA1散列.git/refs/remotes/p4/master
。删除列出的旧SHA1散列,并将其替换为提交的SHA1散列。(如果.git/refs/remotes/p4/master
不存在,请选中.git/packed refs
并更新相应的行。)//depot/new/path/
文件的副本,它应该从将来的Performce更改中获取对这些文件的任何更改
还有一些值得注意的事情
- 显然,只有在您提交导入这些文件之后,新路径才会存在于您的Git存储库中,因此
如果跨越该边界并涉及这些文件,那么它将不会有用Git bisect
- 由于如果修改后的文件包含在Performce clientspec中(并且包含在
的git-p4
仓库路径中),则会自动添加这些文件,因此在某些情况下,您可能会避免所有这些工作。例如,如果您事先知道有人将要向Perforce depot添加一个新目录,并且该目录已包含在您的
depot路径中,但不包含在您的clientspec中,则您可以先将其添加到Perforce clientspec中。然后,您应该能够在新路径完成后自动获取该路径