问题标签 [git-p4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
10628 浏览

git - 使用 git-p4 获取整个文件历史记录

正如我在上一个问题中提到的,我正在考虑将我们的源代码控制从 Perforce 迁移到 git。
环顾四周,我发现了git-p4(你必须多挖一点,因为它甚至不在链接指向的存储库中。实际的git-p4 脚本更难找到)。

我现在正在运行这个脚本,它将文件的当前版本导入到一个新的 git 存储库中,但无论我做什么,我都无法获取历史记录。

这是我使用的当前命令行:

所以,真正的问题是:如果有人设法导入了 P4 仓库,包括历史,我想知道你是如何做到的。

0 投票
1 回答
1208 浏览

git - 在 git 中跟踪 remotes/p4/master 分支

我正在克隆一个首先由 git-p4 生成的存储库。git-p4 使用我想跟踪的“remotes/p4/master”分支。我如何告诉正在克隆该 repo 的 git 也跟踪 remotes/p4/master?这样我就可以查看“origin/remotes/p4/master”之类的东西。

0 投票
2 回答
19395 浏览

git - p4merge 错误 [GIT]

我正在尝试将 p4merge 与 git 一起使用,但我得到:

启动 p4merge 时出错:“path/myFile”是(或指向)无效文件(这列出了文件的 BASE、LOCAL、REMOTE 和标准版本)。

Git 告诉我冲突,然后它询问我是否要启动配置的合并工具(p4merge),然后我得到上面的错误。

附加说明:任何文件都会发生这种情况!

关于这是什么以及如何解决它的任何线索?

0 投票
1 回答
1439 浏览

git - git-p4 并从其他存储库中提取

我有一台笔记本电脑和一台台式机,我正在尝试学习使用 git 来管理我对 perforce 存储库的工作。我在桌面上成功地使用了 git-p4,并且也可以在笔记本电脑上成功地使用它,隔离。但是,我想做的一件事就是将更改从笔记本电脑“拉”或“推”到台式机,反之亦然,而无需先将它们签入与 git 同步的 p4 分支。

所以,这就是我设置两个存储库的方法:1)使用 git-p4 clone 在我的桌面上设置一个存储库。做一些工作,向 git 提交几次,向 git-p4 提交几次。一切都按预期工作。2)稍后,在我的笔记本电脑上设置一个仓库,准备在两台机器上工作。同样,使用 git-p4 克隆当前的 p4 存储库(现在在过去检查了几个修订,我在 (1) 中执行了 git-p4。

现在,我希望做的是:1)在桌面上做一些工作。将工作提交给 git,但不是 p4。2)转到笔记本电脑,然后从桌面存储库中执行 git pull ...。3)继续我在笔记本电脑上的工作,定期提交 git。4)(可选)从笔记本电脑提交到 p4 5)(可选)推送到桌面(或从笔记本电脑拉到桌面)并继续在桌面上工作,等等。

基本上,我希望能够在笔记本电脑和台式机之间来回推/拉东西,而无需实际签入 p4。

这听起来应该是可能的吗?如果是这样,上面是否有我做错的步骤?

以下是不断发生的事情:当我尝试在上面 (2) 中执行“拉动”时,我收到错误消息,指出存在冲突 - 这些冲突与 p4 分支的第一次签出和创建第二个 git-p4 存储库的时间。换句话说,它们似乎是对应该已经在第二个 repo 包含的代码中的更改的重放,但由于某种原因,它们不是。

我对 git 很陌生,所以我希望我的问题不是疯狂愚蠢或无法理解。提前感谢您提供的任何帮助。

0 投票
3 回答
1513 浏览

git - git-p4 正在吃我的图像文件

所以,我可以毫无问题地使用 git-p4 从 p4 导入。一切似乎都正常,但我的 PNG 文件(可能还有其他文件)正在损坏。

我已经阅读了有关 gitattributes 和行尾问题的信息,但我所做的一切似乎都无法改变最终结果。破碎的图像。

我的属性文件是: *.png 二进制

有任何想法吗?据我了解,git 应该足够聪明,可以在没有此帮助的情况下确定 png 是二进制文件。

这是否与 p4-git 如何从 Perforce 中提取文件特别有关?

更新:这是在 Windows 上。我忘了这很重要。

0 投票
2 回答
2677 浏览

git - git-p4 提交失败并显示“不是有效的对象名称 HEAD~261”

我有一个 git 存储库,我想将它镜像到 Perforce 存储库。我已经下载了 git-p4 脚本(没有给出弃用警告的更新版本),并且一直在使用它。我已经想出了如何从 Perforce 中提取更改,但是当我尝试从 git repo 同步更改时出现错误。这是我到目前为止所做的:

所以,我已经将原点复制到了一个干净的新导演,得到了一个漂亮的合并文件树,并git status显示我是最新的。但:

git 邮件列表上的这个线程似乎是相关的,但我无法弄清楚他们对所有 A、B 和 C 做了什么。有人可以澄清“不是有效的对象名称”是什么意思,我能做些什么来解决这个问题?我要做的就是定期将源/主快照快照到 Perforce;不需要完整的历史记录。谢谢。

0 投票
1 回答
1104 浏览

git - Git repo 计划问题

在工作中,开发使用 perforce 来处理代码共享。我不会说“修订控制”,因为我们不允许签入更改,直到它们准备好进行回归测试。为了让我的个人变更集处于修订控制之下,我已获准构建自己的 git 并将 perforce depot 的客户端视图初始化为 git repo。

然而,这样做有一些困难。

  1. 客户端视图位于~, ( ~/p4) 的子文件夹中,我也希望对其~进行修订控制,并具有自己的单独历史记录。我不知道如何在不使用子模块的情况下将历史记录~分开。~/p4子模块的问题在于,看起来我必须创建一个将成为子模块的存储库,然后git submodule add <repo> <path>. 但是除了在~. 似乎没有安全的地方可以使用 git p4 clone 创建软件仓库的初始客户端视图。

    (我正在假设不支持将 repo 初始化或克隆到 git repo 的子目录中。至少,我在嵌套的 git repos 上找不到任何权威。)

    编辑:仅仅是忽略~/p4回购的根源就~足以让我在其中初始化一个嵌套回购~/p4吗?当我访问 git repo 的一个被忽略的子目录时,我的 __git_ps1 函数仍然认为我在一个 git 存储库中,所以我倾向于不这么认为。

  2. 我需要将 git p4 sync 创建的“远程”存储库作为 ~/p4 中的一个分支。我们需要将所有代码保存在 ~/p4 中,这样它就不会被备份。我可以从真正是本地分支的“远程”分支中提取吗?

  3. 这只是为了方便,但我认为我可以通过询问来学习一些东西。对于 99% 的项目,我只想以 p4 头版本作为初始提交对象开始。对于另外 1%,我想把整个 p4 历史记录下来,以便我可以在 git 中浏览它。IOW,在我完成初始化后, remotes/p4/master 分支的初始提交将包含:

    并且该remotes/p4/master分支包含 Y 个提交,其中 Y 是在 中包含文件的更改列表的数量,//depot/prod/Foo/Bar/*历史中的每个提交对应于这些 p4 更改列表之一,并且 HEAD 看起来像 p4 的头部。

编辑:meagar 的回答对我不太适用。

我已经初始化 ~ 并签入了一些提交。我忽略了 ~/p4 并且 ~/p4 不在任何提交对象中。=:

然后我去了 ~/p4/prod,一个我想签出的分支。但是这个 repo 坏了:

编辑编辑:糟糕,我忘了向~/p4/prod. 我现在正在尝试 git p4 sync //depot/prod...

0 投票
2 回答
1860 浏览

git - git-p4 同步不起作用 - 神秘的堆栈跟踪

我正在尝试使用 git-p4 克隆 perforce 仓库。我一直在 git-p4 脚本中遇到问题,其中 git-p4 尝试访问未定义的 dict 键并引发跟踪。

我进入脚本并在那时打印出文件字典并获得了更多细节,为了清晰和匿名,我将对其进行修改。错误的字典看起来像这样:

我的 p4 客户端如下所示:

如您所见,错误的字典是我的客户端视图中不存在的文件。我相信这是问题的根源。但是,我显然正在使用 --use-client-spec 运行该命令。我也尝试过git config git-p4.useclientspec true 详细的输出让它看起来像是把我的观点拉出来了

如果我跑步,p4 -u mkramer -c mkramer client -o我会看到正确的视图。

如果我运行p4 -u mkramer -c mkramer files //depot/prod/...#head,我会看到不在我视图中的文件。

我的软件版本:

0 投票
2 回答
2331 浏览

git - 如何让 --detect-branches 与 git-p4 一起工作?

我的 p4 存储库的结构类似于:

但是,当我git-p4用来克隆“项目”时,所有 3 个分支都不被视为分支,并且都被克隆到单个主分支中。

这就是我调用的方式git-p4

我期待git-p4为“ project”创建一个具有三个分支的 git 数据库,项目的根目录将映射到分支名称之后的路径部分(例如:如果//depot/project/branch1有一个名为“ lib”(//depot/project/branch1/lib)的子目录,那么我的本地文件系统应该类似于/git_project/lib3 个 git 分支)。

我的期待错了吗?我调用git-p4不正确吗?

0 投票
2 回答
348 浏览

git - 使用分支命名空间有效地备份多个版本的 git repo

在工作中,我们使用 Perforce 进行版本控制。这样做存在问题:1)使用这种集中式模型,我们无法在更改准备好回归之前签入更改。这意味着我们在开发过程中没有修订控制。2) 我们不备份仓库的客户端视图,因此在我们签入之前我们的工作是不安全的。 3) 我们在与每个人共享代码时遇到问题,除非我们请求设置一个集成分支。我正在尝试为想要使用 git 解决这些问题的开发人员设置一个可选的 git 工作流。

计划是使用 git-p4 与 perforce 服务器交互并创建一个私有 git 存储库。这需要处理 1)。我计划使用 Git Pro ( http://progit.org/book/ch5-1.html ) 中描述的集成管理器工作流程让我们的开发人员发布公共存储库,注意 3)。

祝福回购

最后,我想要一个开发人员可以推送他们的更改的地方,以便他们可以进行夜间备份/异地备份。我们现在不备份我们的客户视图的原因是因为对每个人的客户视图进行夜间存档备份是空间效率低下的。我们有很多开发人员,他们编写了大量代码。我们不能冗余地备份每个人的客户视图。我们只想保留他们所做的独特更改

我的想法是拥有一个裸 git repo,称之为omni-backup,每个人都可以将他们所有的分支推送到(并随意提出替代方案)。这将利用 git 节省空间的 sha-1 散列,并确保仅备份每个文件的唯一版本。诀窍是所有备份存储库都必须是同一存储库的一部分才能获得空间效率。

问题是当两个拥有完全不同分支的人为他们的分支选择相同的名称时。EG Bob 有一个feature分支,Jane 有一个feature分支,但它们用于不同的功能。如果 Bob 推送到全备份,Jane 将无法这样做,因为它不会是快进合并。

现在我最理想的情况是,当 Bob 推送他的功能分支时,该分支将bob-featureomni-backup远程重命名为。当他从中提取特征时omni-backup,他会回来bob-feature

这在 git 中似乎并不容易完成。看起来我可以使用http://www.kernel.org/pub/software/scm/git/docs/git-receive-pack.html post-receive 钩子中记录的推送钩子在之后立即重写 ref 的名称它写了,然后可以在回来的路上做一些事情来扭转这个过程,但它感觉很脆弱。有人有更好的主意吗?


编辑:对于 VonC (因为代码在注释中很烂) VonC,你的方式听起来很有希望,但我不明白它是一个提取的事实将如何解决命名空间问题。您是否建议使用知道如何重命名分支的 cronjob?

像(真的很脏):