【问题标题】:Why is clone succeeded, but checkout failed?为什么克隆成功,但结帐失败?
【发布时间】:2021-12-31 09:05:20
【问题描述】:

在 Windows 10 中克隆大型项目时出现以下错误/警告。

....
error: unable to create symlink Codes/MyProject/Pods/Headers/Public/nanopb/pb_common.h: No such file or directory
error: unable to create symlink Codes/MyProject/Pods/Headers/Public/nanopb/pb_decode.h: No such file or directory
error: unable to create symlink Codes/MyProject/Pods/Headers/Public/nanopb/pb_encode.h: No such file or directory
Updating files: 100% (9536/9536), done.
fatal: unable to checkout working tree
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry with 'git restore --source=HEAD :/'

为什么会出现警告以及如何解决?

但是,我尝试按照 gits 的建议从下载的 repo 根目录运行以下命令,

git restore --source=HEAD :/

但我又遇到了类似的错误,

    ....
    error: unable to create symlink Codes/MyProject/Pods/Headers/Public/nanopb/pb_common.h: No such file or directory
    error: unable to create symlink Codes/MyProject/Pods/Headers/Public/nanopb/pb_decode.h: No such file or directory
    error: unable to create symlink Codes/MyProject/Pods/Headers/Public/nanopb/pb_encode.h: No such file or directory

【问题讨论】:

  • 可能是区分大小写的文件系统的问题
  • @knittl 不知道。如何为 windows git bash 修复它?
  • 你不能真正修复这个 Windows。 (使用 Linux 或 WSL 可以更轻松地处理它。)但是,如果您禁用 core.symlinks,您也许可以解决它。见your own question here
  • 就我而言,问题是文件名太长。它对我有用.. git config --global core.longpaths true
  • @torek 禁用 core.symlinks 无效。我认为问题是不同的。

标签: git github version-control git-clone git-checkout


【解决方案1】:

默认情况下,Windows 需要特殊权限才能创建符号链接。这是因为当 Windows 添加符号链接时,Microsoft 担心现有程序会由于 Unix 上已经众所周知的符号链接而获得漏洞,并且不希望这种情况自动发生。回想起来,这使得符号链接在 Windows 上极为罕见。

但是,如果您使用的是 Windows 10 或更高版本,则可以启用开发人员模式,该模式允许非特权用户创建符号链接。我强烈推荐这个,因为符号链接非常有用,但有些人不能这样做,因为他们的系统管理员不允许这样做。如果在您的情况下这是可能的,它将解决问题。

您可以通过将 core.symlinks 设置为 false 来禁用符号链接。通常 Git 在克隆不支持符号链接的文件系统上的存储库时会自动执行此操作,因此您通常不需要这样做。请注意,在许多情况下,项目会在这种情况下被破坏,因为符号链接通常存在,因为它们是工作所必需的。

这里的另一种可能性是您的项目有两个文件或目录,它们仅在大小写上有所不同,而 Windows 默认情况下不区分大小写。结果,在一种情况下 应该 是符号链接的东西在另一种情况下类似于文件或目录,并且由于您的系统一次只能处理一种情况,因此您无法检查两者同时出来。这只是 Windows 默认工作方式的一个不幸结果,您需要使用区分大小写的环境,例如 Linux 或 WSL。

【讨论】:

    【解决方案2】:

    使用 Git bash 中的以下命令解决了问题,

    git config --global core.symlinks false

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-29
      • 2017-01-25
      • 1970-01-01
      • 2010-09-20
      • 2021-09-28
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      相关资源
      最近更新 更多