63

当我尝试从 github 签出存储库时,出现错误:

error: invalid path 'configs/perl-modules/DIST.64/perl-HTML-Tree-1:5.03-1.el6.noarch.rpm'

我怀疑问题是路径包含 : 在 Windows 上是非法的。

在研究了错误之后,我发现了 2 个可能的答案:
1)更改存储库文件的路径。 不幸的是,这是一个团队资源,在可预见的将来无法修复。
2)使用稀疏结帐。 我试过这个没有效果,如下所示:

$ git clone -n​​ git@github.com:XXXXXX/deploy.git
克隆到'deploy'...
远程:枚举对象:57,完成。
远程:计数对象:100% (57/57),完成。
远程:压缩对象:100% (49/49),完成。
远程:总计 86457(增量 10),重用 22(增量 8),打包重用 86400
接收对象:100%(86457/86457),1.50 GiB | 4.73 MiB/s,完成。
解决增量:100% (59779/59779),完成。
$ cd deploy/
$ git config core.sparsecheckout true
$ echo www >> .git/info/sparse-checkout
$ git checkout centos6
error: invalid path 'configs/perl-modules/DIST.64/perl-HTML-Tree-1 :5.03-1.el6.noarch.rpm'
错误:路径无效 'configs/perlbrew/perls/perl-5.24.1/man/man3/App::Cpan.3'

. (对许多文件重复)

这是使用 Git for Windows “git version 2.28.0.windows.1”完成的。我还尝试了两种类型的行尾并使用各种版本的 .git/info/sparse-checkout 例如:

/*
!/configs/perl-modules
!/configs/perlbrew/perls/perl-5.24.1/man/man3

Checkout 在 Linux、MacOS 和 WSL 上运行良好,唯一的问题是我的 IDE 不能在那里工作。为什么 sparse-checkout 不能在 Windows 上运行。还有其他可能吗?

4

16 回答 16

108

在我在 git-for-windows 错误跟踪器 ( https://github.com/git-for-windows/git/issues/2803 )上打开一个问题后,我发现我的问题已经提交为https:// github.com/git-for-windows/git/issues/2777。该问题表明我需要设置另一个 git 标志:

git config core.protectNTFS false

这(#2777)确实包含我的问题的绕过。我希望 git 或 git-for-windows (响应速度非常快)能提供更好的警告信息,甚至是像文件路径映射方案这样的真正修复。

请注意,这只是在 Windows 中使用 sparse-checkout 时的问题。

于 2020-09-04T14:08:15.933 回答
10

我遇到了类似的问题,试图从 GitHub 签出一个存储库,该存储库包含名称中带有“ ”的文件,在 Windows 上。(导致问题的示例文件名:“ test-img.jpg:Zone.Identifier ”)。下载了 repo,但文件未显示在文件夹中。

我发现运行git config core.protectNTFS false解决了我的问题,但前提是我在运行它之前和之后采取了一些步骤。整个过程是这样的:

  1. 在本地克隆 Git 存储库;
  2. 'cd' 进入刚刚克隆的本地 Git 存储库文件夹;
  3. git reset
  4. git config core.protectNTFS false
  5. 运行git checkout(只是 git checkout,命令末尾没有 *)。

之后,我可以看到文件。当然,从 Git 下载的一些额外的东西通常会被忽略,但对我来说这没什么大不了的。

于 2021-09-07T16:44:48.453 回答
8

在我们的例子中,有一个文件名aux.go,windows 不允许创建包含单词的文件aux

在此处输入图像描述

在此处阅读有关此问题 的更多信息

于 2021-04-23T08:14:34.040 回答
6

对于那些只想要命令来解决问题的人:

git clone --sparse -c core.protectNTFS=false -n <repo-URL>
git sparse-checkout add "\!<pattern1>" "\!<pattern2>"
git checkout <branch>

模式与 repo root 相关,可以使用*

于 2021-08-05T12:57:16.243 回答
5

我怀疑问题是路径包含:在 Windows 上非法的 [冒号字符]。

这实际上就是问题所在。

[稀疏结帐]!configs/perlbrew/perls/perl-5.24.1/man/man3

这里被抱怨的路径名是:

configs/perl-modules/DIST.64/perl-HTML-Tree-1:5.03-1.el6.noarch.rpm

它不以 开头configs/perlbrew/,更不用说完整的要跳过的路径。

您可以通过(痛苦地)枚举所有无效文件名来解决此问题。不过,Git 需要一个更好的通用机制。

于 2020-09-03T20:53:44.680 回答
2
于 2021-12-17T17:18:37.213 回答
1

如果其他解决方案都不起作用,问题可能是 git 的版本。我使用了版本2.31.1并显示了错误,但后来我尝试了它,2.15它工作正常。但对我来说,错误在于git clone命令。

于 2021-04-15T03:29:29.187 回答
1

如果使用不同的操作系统,例如 linux vs windows 或 Mac Os vs Windows。检查文件路径中的字符。在我的情况下,我将项目保存在我的 Mac 上并提交,当拉动我的 Windows 机器时,文件路径错误会发生。

Windows 指出

文件名不能包含以下任何字符:\ / : * ? " < > |

但我在保存的图像名称中包含“*”。因此,只需提交对您的团队使用的不同操作系统有效的新名称。或者通过寻找解决方法让自己更加沮丧

简单对。

于 2021-09-07T13:46:02.277 回答
0

我和你一样,你的文件名不正确或者没有保留,重命名你的文件

于 2020-12-21T11:03:54.353 回答
0

对于那些有类似错误的人:
就个人而言,问题在于"在 Linux 上使用文件名并尝试pull在 Windows 10 机器上使用。

于 2021-04-23T12:33:50.037 回答
0

您可能想检查文件命名。Windows 不允许在文件名末尾使用某些字符,例如“?”、“:”。删除/重命名它们并重试。PS:也不允许有空格。

于 2022-03-05T12:50:02.993 回答
0

在我的情况下,repo 包含 Windows 中具有无效字符的文件,例如[].

于 2021-12-07T08:04:06.297 回答
0

在我的情况下,文件名最后有一个额外的空格。在 Windows 上,这导致了一个问题。

我能够通过删除这个空间来解决这个问题。由于我无法在 Windows 上克隆该项目,因此此更改已直接在我们的存储库所在的位置(在我们的例子中是 GitHub)上完成。

于 2021-10-06T08:08:20.693 回答
0

使用前git clone

执行这个命令:

git config --global core.protectNTFS false
于 2021-11-02T19:43:02.837 回答
0

一旦我为 git 命令提供了目标路径,它就会停止寻找 c:/program files/git/src 这失败了: git log --pretty=email --patch-with-stat --reverse --full-index --二进制 -- /src/pathtofile

这有效: git log --pretty=email --patch-with-stat --reverse --full-index --binary -- ./src/pathtofile

于 2022-03-01T15:55:15.400 回答
0

我发现了一个没有被提及的选项。使用WSL签出文件。

git clone在 WSL/Bash 而不是 PowerShell/CMD 中运行。WSL 透明地处理修复文件名,即使它们仍然存储在 NTFS 上并且我使用 VS Code for Windows 打开它们。我能够在 Windows 中修改文件,甚至在 Windows 上推送我的更改。

于 2021-12-09T22:02:00.353 回答