【问题标题】:`git-p4 clone` fails "new tip ... does not contain ..."`git-p4 clone` 失败“新提示......不包含......”
【发布时间】:2010-10-29 23:52:42
【问题描述】:

我在 Windows 上运行,使用 windows p4 客户端,并通过 Cygwin 安装 git。 p4 客户端宣传它的语法是如何跨平台的规则等等,所以这应该是 hunky-dory。

所以当我转到git-p4 clone --verbose //depot/path/to/source 时,它会列出存储库中的所有文件,就好像它们正在被签出一样,然后死掉说

异常:快速导入失败:警告:未更新 refs/remotes/p4/master(新 提示 cd601b92da8625c90af05685e450e55b6d19c9e9 不含 3a512c9408e3cbeef 94c78dfd7115f81e4a6fd0d)

并以一大块“git-fast-import 统计信息”结束。查看错误:新提示?嗯?需要包含什么?

我剩下的是一个 .git 存储库,它有几个兆(比完整的源代码树要小得多)。有什么想法吗?

【问题讨论】:

  • 你有没有尝试联系 git-p4 的维护者?

标签: git perforce git-p4


【解决方案1】:

我遇到过类似的问题,通常可以追溯到路径、分支名称等中的大小写。不确定 P4,但请确保您没有 Master 分支 - 它应该是 master。全面跟随同一个团。另外,避免目录和文件名中带有空格。许多以 git 为中心的工具不喜欢这样。 Gitolite就是一个例子。它不允许存储库中有空间。

【讨论】:

  • 你说得对:移动到路径名中没有空格的文件夹已修复它。
  • @Hober 没有空格是什么意思?在您的问题中,我在命令中看不到任何空格。
  • @Giedrius 我的意思是文件系统路径中带有空格,例如“C:\Program Files\foo”。解决此问题的一个好方法是使用您的 C:\Users 目录,或者创建您自己的 C:\dev 目录用于开发目的。抱歉回复慢。
【解决方案2】:

与接受的答案类似,我在尝试同步到表单中的 git 分支时遇到了同样的问题:

git p4 sync --branch=feature/f1 //depot/path/to/code

分支名称中的 / 似乎导致了同样神秘的快速导入失败警告。不幸的是 git-p4 似乎不支持标准的 git-flow 分支名称。

更改为这样的分支有效:

git p4 sync --branch=f1 //depot/path/to/code

【讨论】:

  • “点”相同,必须从“1.0”更改
【解决方案3】:

我在运行快速导入时也遇到了“新提示 x 不包含 y”错误。

在我的情况下,这是由我试图导入的 repo 的 master 分支中的一个不相关的预先存在的提交引起的。我已经使用 GitHub 客户端初始化了 repo,它添加了一个初始提交(添加一个 .gitignore 文件)。快速导入工具可能无法协调导入的提交与分支的当前状态,因为 GitHub 工具的提交与正在导入的提交无关。

我的解决方案是用“git init”初始化一个空的仓库,然后运行快速导入。

【讨论】:

  • 我在尝试使用 .gitattributes 文件初始化存储库以设置二进制文件模式时遇到了同样的问题。我希望此提交成为存储库中的第一个提交,以确保定义适用于所有标记版本。
【解决方案4】:

对于要导入的第一个 CL,您是否收到“忽略修订版 XYZ,因为它会产生一个空提交”?

如果是这样,您在 git-p4.py 中遇到了一个错误,它会在实际提交任何内容之前清除“initialParent”设置(这是必要的,以便 git fast-import 可以将新提交加入到上一次导入中) .因此,新的导入文件流不会与旧文件连接。

我目前正在通过使用 --changesfile 并明确确定需要导入哪些 CL 来解决此问题。

【讨论】:

  • 如果您不介意在 git 树中进行一些不更改的提交,也可以使用 git config git-p4.keepEmptyCommits true 解决此问题。
  • @Anton,我处理这个问题大约 3 或 4 个月,甚至对这个涉及回滚 p4/master 提交并再次变基的问题(现已删除)有自己的答案。然后我重新阅读了这个答案并找到了这个迄今为止没有遇到任何问题的新解决方案。希望 git-p4 将来会得到修复,这样我们就不需要额外的空提交,但这是一个很好的权衡,可以避免它经常中断:-)
  • 这个答案说明了我遇到错误的根本原因。谢谢!我在一个非常大的仓库中的一小部分工作(据说我的公司是 p4 最大的企业用户之一)。 p4 sync 范围的第一个更改列表通常不会与镜像到我的 git 存储库中的文件子集相交,该文件使用 --use-client-spec 填充。
  • 这在今天仍然是一个问题,即使在使用 git 的 mingw 版本(Windows 的 Git Bash Shell)时也是如此。启用 keepEmptyCommits 仍然是 git 的 mingw 和 cygwin 版本的可行解决方法。我不清楚它是第一个还是最后一个 p4 更改列表,当“空”时,它会触发错误。我怀疑它是该范围内的最后一个更改列表,或者可能是整个范围为空时。
【解决方案5】:

我也有类似的问题。对我有用的是更新 git-p4 python 代码。你可以看一下提交here,但希望它很快就会被拉出来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多