Perforce 相当于 git 本地提交

Perforce equivalent of git local commit

我在使用 Git 一年后才开始使用 Perforce。在 perforce 中是否有任何相当于 git 本地提交到我的分支。

基本上,如果我想处理一项可能需要撤消和重做我的特定更改的复杂任务,是否有任何方法可以在 Perforce 中完成此任务?我在 Git 中的做法是将我的更改提交到一个分支,并在合并到 master 之前在该分支中进行多次提交。

在 Perforce 中执行此操作的经典方法是完全照您说的做 -- 创建一个分支,提交到该分支,然后将其合并回来。与 Git 的一个区别是,在您的分支上所做的每个更改都是永久性的,以后的更改建立在早期的更改之上——您不会通过从历史记录中删除它们来撤消早期的提交,您只需创建其他版本。另一个变化是,当你合并回来时,你在目标分支上创建了一个新的变更列表,其中包含你从源合并的所有变更的总和——所以不是在你的分支上将变更压缩在一起,合并时会压缩更改。您可以分阶段进行合并,甚至可以按照与分支上发生更改时不同的顺序进行合并,这样主分支上的历史记录可能看起来与分支中的历史记录不同(但它会保留指向分支的指针以及)。

Perforce (2015.1) 的当前 public 测试版提供了一种更 Git 的方法,您可以在其中拆分本地 Perforce 存储库,进行更改,并可能重写之前的历史记录将它推回到共享存储库——"local" 历史不一定在共享服务器上的任何地方可见,因为你可以选择重写它(而任何提交到中央服务器的历史,在任何分支上,是永远的,除非管理员将其删除)。有关 Perforce 的新 DVCS 功能的更多信息(同样,这仍处于测试阶段):http://www.perforce.com/perforce/r15.1/user/dvcs_getting_started.pdf

我认为 p4 shelve 在这里可能对你有用。

更长的答案:

p4 的工作方式是您必须使用 p4 edit, or add a new file using p4 add 解锁文件。这将创建一个 changelist,其中基本上包含为您的下一次提交准备的所有文件。

p4 submit 然后可用于将更改列表中的所有更改推送(在 git 术语中)到 repository/depot.

现在,如果您不想立即提交,可以使用 p4 shelve 搁置这些更改。这将为您的更改列表创建一个本地检查点,您可以返回或撤消。您还可以创建多个搁置的副本,一个接一个地构建。您可能可以使用此命令复制 git 提交的所有功能。

有关详细信息,请参阅 p4 shelve 命令参考。

似乎没有办法在不使用桥接工具将 Git 与 Perforce 连接的情况下完成您想要的。

我目前的工作情况与您相同,我们考虑过尝试使用 Git-Perforce 桥。 Perforce 有一个名为 git-fusion 的 Git 桥,最多可免费供 20 个用户使用。这可能是目前最好的桥接工具。 Git 本身提供了一个名为 git p4 的命令,它为您提供了一些更有限的功能。使用 git p4 的工作流程将如下所示:

# do your work and make your git commits
git p4 rebase
git p4 submit

正如您可能已经猜到的那样,git p4 rebase 进入存储库并获取该分支中其他用户所做的所有更改,然后再将您的工作放在首位。变基是必要的,因为它模拟 Perforce,您的所有提交始终保持不变。

如果您决定使用桥接工具,请意识到这可能会导致 IT 基础架构发生重大变化,您可能必须让您的组织相信它值得进行。