7

我工作的地方使用 Perforce 环境,但在我们的功能完成并准备好进行测试之前,我们不允许签入。我需要能够进行本地提交,因为有时我已经在一周内签出超过 50 个文件,而我的更改没有任何版本控制。

Git 符合我的目的,但我不确定如何设置它以最好地与我的其他环境集成。

我的目标是:

  • 在开发一个功能时,我希望能够完全忽略 Perforce,并尽可能多地编辑和提交(在 Git 中)。
  • 在提交功能之前,我需要能够进入 P4V 或 P4Win 来比较文件并确保所有内容都是最新的,并且在测试之后我希望我的所有更改都在一次提交中。

似乎在我的本地工作空间的根目录中创建一个 git 存储库会起作用,但我有一些问题......

  1. 这个存储库中有大量文件,至少在初始提交时 git 正在爬行。
  2. 当我从 Perforce “获取最新”时,我需要能够轻松更新 git 存储库
  3. 我不想在编辑之前在 Perforce 中检查每个文件,也不想在 Perforce 中进行强制同步,因为它们是未签出的可写文件。

任何人都可以给我一些提示吗?我一直在将 git 中的子模块视为一种可能减小 git 存储库大小的方法,因为 perforce 存储库中有很多部分我不需要版本控制。

4

5 回答 5

1

您应该使用git-p4。这个答案也可能会有所帮助。

于 2011-02-25T09:32:10.030 回答
1

我目前正在使用这个工作流程,非常棒

出于公司原因,我不能使用 git-p4 命令,但我的客户端工作区目录中有一个 git repo。我们的设置仅将配置代码签入到源代码控制中,其余的开发设置存储在 ZIP 中。因此,无论如何我都不会在工作区根目录上进行协调,这具有不需要明确忽略的额外好处.git

解决你的观点:

  1. 最初的提交可以预期是……嗯,不是最快的。它不是克隆现有的存储库,而是从头开始构建一个。

  2. 偶尔我会保存+提交我正在做的事情,

    git checkout master && p4 sync && git add --all . && git commit -mupdate && git checkout feature-branch
    

    然后继续破解。Git 中的合并往往比 Perforce 中的更顺畅,因此通常您不必因为冲突而分散注意力。@p4mataway告诉我,他们正在努力更好地合并,所以看起来很整洁。

  3. 我打开了“allwrite”工作区选项(不要将未编辑的文件保持为只读),当我准备好签入某些内容时,我将把该分支合并到P4V 中master,然后在 P4V 中进行协调。我也会从命令行执行此操作,但是再次出于公司原因。很长的故事。

在处理涉及对同一个文件进行多次更改的功能时,Git 对我非常有用,这往往会发生在长期未决的更改中——通常是需要重置我们应用程序的数据库而我们不想这样做的数据库架构更改现在在测试服务器上,因为 QA 处于场景中间。更改列表停留的时间越长,一些不相关的工作就越有可能触及相同的文件之一,并且能够在本地分支可以防止更改粘在一起。仅此功能就足以使整个设置完全值得。

免责声明 - 我不打算永远保留这个 Git 存储库。一旦通过即将进行的服务器升级解决了一些公司原因,我将能够使用我们当前环境不支持的一些非常闪亮的 Perforce 功能。

于 2014-04-02T15:52:02.033 回答
0

这是一个粗略的解决方案。从 同步后p4git init在该目录中执行操作,添加所有文件并提交它们。完全忽略 git,然后将它们添加并提交回p4.

这个问题和一些相关的事情在这个问题上进行了讨论。

于 2011-02-25T09:24:57.490 回答
0

由于您无论如何都在使用 P4V,我建议您至少尝试相对较新的离线支持选项。它允许您满足您的大部分要求(使用 Git 除外)。

于 2011-02-28T19:04:44.003 回答
0

我在使用 StarTeam 和 git 时做同样的事情。我不熟悉 perforce 语法,但概念应该匹配。

首先,初始的 git commit 总是很慢。在那之后,可能需要 5-10 秒来扫描已更改的文件以进行暂存,但提交应该在大多数情况下几乎立即发生。就上下文而言,我们的代码库有大约 50,000 个版本文件。

我一直master与 StarTeam 保持同步,但不直接在其中进行任何开发工作。我做了一个git checkout master,然后做一个 StarTeam 更新,然后是一个 git add 和 commit。

然后对于我的工作,我创建了一个新分支,在那里完成我的所有工作,在 中进行另一个 StarTeam 更新,并在提交到 StarTeam 之前master将我的功能分支合并回。master因此,StarTeam 的签入和签出都在 in 中完成master,而开发总是在其他分支中完成,这使 StarTeam 更新保持干净。

这种混合方法还有其他一些不错的好处,比如能够将部分工作搁置一段时间以进行代码审查、现场问题或其他任何事情。我目前有 5 个处于不同使用状态的 git 分支。放入临时调试代码也非常好。

于 2011-02-25T03:43:09.707 回答