我一直在阅读关于Perforce的内容,但没有找到工作区和工作目录之间关系的任何全面解释,例如:文件如何从工作空间出现在工作目录中,如何跟踪它们,工作空间文件和工作目录文件之间可能存在哪些不一致等。
我来自git背景,所以我正在寻找工作区和工作目录交互的描述,类似于git中的索引和工作目录交互。
答案 0 :(得分:2)
有关综合信息,完整的Perforce文档为available online。但这是术语和概念的基本摘要:
git add
允许您在提交之前汇总提交的方式有几点相似之处,但也存在许多差异,从Perforce跟踪服务器上的信息开始,而不是在客户端。答案 1 :(得分:1)
Perfore并不真正具有Git所做的“索引/暂存区”的概念。文件仅存在于Perforce服务器(软件仓库)或本地工作目录中。
工作区只是一组配置数据,它告诉Perforce在本地环境中放置哪些文件。
它实际上是一个“绑定”,它指定从库中选择哪些文件以及将它们放在工作目录中的位置。这种灵活性在某些情况下非常有用,但与其他VCS(例如Git / Mercurial / Subversion)相比,它也是一种额外的间接层。
如果查看工作区定义的内容,您将看到指向本地计算机上某个位置的“Root:”部分,以及一个“View:”部分,该部分告诉Perforce您希望同步到该位置的文件
Perforce文档在术语方面有点混乱。在我看过的文档中,“工作空间”指的是您创建的特定工作空间定义(这是Perforce服务器中保存的数据结构)和工作空间绑定的本地工作目录,相当可互换。这是因为工作空间的整个 point 将绑定到特定的本地工作目录。
请在此处查看示例15:Managing files and changelists
p4 sync命令的输出显示 将文件写入C:驱动器。当您“从库中检索文件到您的客户端工作区”时,实际上意味着文件被复制到您的本地工作目录中。
答案 2 :(得分:0)
我们以工作区定义为例。这个解释的关键字段是Client,Root和View,所以为了清楚起见,我只会展示它们:
Client: mysimpleclient
Root: /Users/johndough/myspecialproject
View:
//depot/foo/... //mysimpleclient/...
“客户”字段定义工作区的名称。 Root字段定义本地文件系统上工作空间的根。 “视图”字段描述了如何将服务器中的文件映射到工作区文件。 (与Git相比,这增加了一些灵活性,但代价是学习曲线)。我在这里使用了一个非常简单的映射,但这可能要复杂得多。
让我们分解一下View字段。假设服务器有一个文件//depot/foo/bar.txt。
当您同步(获取此文件的最新版本)时,Perforce将使用视图行来确定文件在文件系统上的位置。
以下是我们的观点: // depot / foo / ... // mysimpleclient /...
左侧是depot语法,右侧是工作区语法,它始终以 // workspace_name 开头。 “...”是一个递归的通配符(类似于带有globbing的**)。您可以在心理上用root的值替换工作区名称,以理解这一点。
记住我们的根是:/ Users / johndough / myspecialproject
因此,在用该值替换“// mysimpleclient”之后,我们到达: // depot / foo / ... / Users / johndough / myspecialproject /...
让我们使用修改后的视图线来确定bar.txt最终的位置:
// depot / foo / bar.txt /Users/johndough/myspecialproject/bar.txt
这是当你拉下文件时它的工作原理。添加新文件时,将反向读取映射。假设您创建了一个文件/Users/johndough/myspecialproject/fred/file.txt
我们(精神修改)的观点是: // depot / foo / ... / Users / johndough / myspecialproject /...
我们反过来解释这一点。连接新文件与工作空间根的相对路径: / Users / johndough / myspecialproject / fred / file.txt
然后对左侧做同样的事情: //depot/foo/fred/file.txt
完全放弃:
//depot/foo/fred/file.txt /Users/johndough/myspecialproject/fred/file.txt
希望这会有所帮助。工作空间的概念可能是Perforce入门最困难的方面。快乐的编码!