【问题标题】:git clone error under Windows with symlinks带有符号链接的 Windows 下的 git clone 错误
【发布时间】:2020-04-25 20:27:01
【问题描述】:

当使用 git clone 时,我收到“警告:以下路径发生冲突(例如,不区分大小写的文件系统上的区分大小写的路径),并且工作树中只有一个来自同一冲突组的路径”错误:

git clone -c core.symlinks=true ssh://root@11.22.33.44/etc c/Dev/GIT/mysite-etckeeper/
Cloning into 'c/Dev/GIT/mysite-etckeeper'...
remote: Counting objects: 1400, done.
remote: Compressing objects: 100% (1202/1202), done.
remote: Total 1400 (delta 195), reused 0 (delta 0)
Receiving objects: 100% (1400/1400), 3.71 MiB | 276.00 KiB/s, done.
Resolving deltas: 100% (195/195), done.
Checking out files: 100% (1154/1154), done.
warning: the following paths have collided (e.g. case-sensitive paths
on a case-insensitive filesystem) and only one from the same
colliding group is in the working tree:

  'HOSTNAME'
  'hostname'


/etc # ls -la HOSTNAME
lrwxrwxrwx   1 root root         8 Mar 29  2017 HOSTNAME -> hostname

/etc # ls -la hostname
-rw-r--r--   1 root root        18 Dec 21  2016 hostname

我该如何解决这个问题? 这个符号链接问题也会导致其他问题。

示例: 这是重现错误的示例存储库: https://github.com/klorinczi/test_dupe_filename

执行这个:

$ git clone -c core.symlinks=true https://github.com/klorinczi/test_dupe_filename 
Cloning into 'test_dupe_filename_example'...
remote: Enumerating objects: 9, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 9 (delta 0), reused 9 (delta 0), pack-reused 0
Unpacking objects: 100% (9/9), done.
warning: the following paths have collided (e.g. case-sensitive paths
on a case-insensitive filesystem) and only one from the same
colliding group is in the working tree:

  'HOSTNAME'
  'hostname'

【问题讨论】:

  • 在 Windows 10(自 1803 年起)上,您可以使目录 + 子目录区分大小写 stackoverflow.com/q/51591091/150978。或者,您安装并使用 Microsoft 提供的适用于 Linux 的 Windows 子系统 (WSL)。它使用您当前的硬盘文件系统提供了一个 Linux shell 环境,区分大小写。在那里你可以安装和使用 git。
  • 这个问题有一个有趣的变种:它也发生在两个名为 filenameFileName.exe 的文件上

标签: windows git symlink git-clone


【解决方案1】:

您所在的系统具有不区分大小写的文件系统,并且存储库包含两个仅大小写不同的文件(HOSTNAMEhostname)。无法在系统上同时表示这两个文件,因此只签出一个文件。 (请注意,这与您使用符号链接无关。)

你有一些选择:

  • 您可以要求该存储库的维护者删除其中一个重复文件,并将其重命名;
  • 如果您使用的是 Windows 10,您可以在使用 git init 创建 Git 存储库后将其设为 case sensitive,然后在现有存储库中使用 git fetch 来拉取数据,而不是克隆它;
  • 您可以继续照原样生活;或
  • 您可以在 VM 中使用不同的操作系统,例如 Linux。

如果您想选择第二个选项,您可以执行以下操作:

git init mysite-etckeeper
# Steps to make mysite-etckeeper case-sensitive from link above.
cd mysite-etckeeper
git remote add origin ssh://root@11.22.33.44/etc
git fetch origin
git reset --hard origin/master

【讨论】:

    猜你喜欢
    • 2015-08-06
    • 2011-08-20
    • 2015-11-22
    • 1970-01-01
    • 2019-01-19
    • 2023-03-24
    • 2015-07-11
    • 2015-09-09
    • 1970-01-01
    相关资源
    最近更新 更多