Git没有这个文件或目录。

10

我正在开发一个应用程序,像往常一样,我使用Git进行版本控制。

以下是输入和输出,希望能帮到您:

# git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        app/CodeBehind/Con.php

# git add app/CodeBehind/Con.php
fatal: unable to stat 'app/CodeBehind/Con.php': No such file or directory

我觉得这没有任何意义,目前我还没有找到解决办法。我在两篇文章中读到,我应该从Git中删除该文件,类似于git rm "[fileName]",但它没有找到与文件名Con.php匹配的内容。

我该如何解决这个问题呢?


你确定你有正确的路径吗?你能使用那个路径将这个文件回显到命令行吗? - Tim Biegeleisen
你尝试过这个命令吗:git add * - Vincent Toonen
是的,我走在正确的路径上。在同一路径下还有另外两个文件,它们没有给我带来任何问题。我尝试了 git add * 命令,但出现了相同的问题:git #add * 致命错误:无法统计'app/CodeBehind/Con.php':没有那个文件或目录。 - Daniel Novoa
1
你使用的是哪个操作系统?以及你正在使用哪个版本的git? - Jeff Puckett
1
git add -A 有帮助吗?这样做文件会被添加吗? - Ashutosh Jindal
显示剩余4条评论
4个回答

7

我也遇到过类似的问题,原来是新版的Windows“受控文件夹”保护功能阻止了Git。将Git添加到允许的应用程序列表中就可以解决问题。


如果您的问题得到解决,可以放心地接受自己的答案。 - rubenvb
问题已经解决了。谢谢!这个问题让我很烦恼。 - Stu Sztukowski
如果作者能够增加更多关于如何实现这一目标的细节,那将会非常棒。 - undefined
在Windows控制面板中搜索“受控访问”。 - undefined

3

路径名太长的问题

鉴于 OP 已经尝试删除和重新添加文件但没有成功,可能的问题关键在于 Con.php 的完整路径已经达到了 Windows 的 260 字符限制。然而,当我尝试重现这个问题时,错误信息明确地说道 fatal: unable to stat 'very/long/path/name': Filename too long 所以我不确定那是否是问题所在。

要检查这是否是问题,请切换到包含 Con.php 的目录并执行以下操作:

pwd -W | wc -c

这将为您提供当前目录Windows路径中字符数量的计数。 如果计数不是>= 260,则这不是问题,我建议继续查看下面的调试其他问题部分。 但是,如果计数>= 260,则请按以下步骤进行:

git config --system core.longpaths true

然后再尝试添加文件。

在下面看到实际效果,它创建了一条路径,其中包含>260个字符,并设置了上述选项以证明它可以解决问题。

$ git add 12345
fatal: unable to stat 'This/Is/A/Very/long/pathname/with/more/than/two/hundred/and/sixty/characters/This/Is/A/Very/long/pathname/with/more/than/two/hundred/and/sixty/characters/This/Is/A/Very/long/pathname/with/more/than/two/hundred/more/dir/12345': Filename too long

$ git config --system core.longpaths true
$ git add 12345  #Notice that there is no error now
$ git status     #Shows that the file was successfully staged

On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   12345

为什么这个配置不是默认的?
如果你有疑问,请阅读this

Windows不支持超过260个字符的文件和目录。这适用于Windows资源管理器、cmd.exe和许多其他应用程序(包括许多IDE以及随Git for Windows提供的bash、perl和tcl)。

请注意以下警告:

使用此选项可能仍会导致脚本化的git命令失败,因此请自行承担风险。


调试其他问题

如果路径名不是问题,那么尝试执行以下命令(当然要将git add 12345更改为git add app/CodeBehind/Con.php),查看输出以获取线索(并将其添加到您的问题中以帮助其他读者找出问题):

$ set -x; GIT_TRACE=2 GIT_CURL_VERBOSE=2 GIT_TRACE_PERFORMANCE=2 GIT_TRACE_PACK_ACCESS=2 GIT_TRACE_PACKET=2 GIT_TRACE_PACKFILE=2 GIT_TRACE_SETUP=2 GIT_TRACE_SHALLOW=2 git add 12345; set +x;

+ GIT_TRACE=2
+ GIT_CURL_VERBOSE=2
+ GIT_TRACE_PERFORMANCE=2
+ GIT_TRACE_PACK_ACCESS=2
+ GIT_TRACE_PACKET=2
+ GIT_TRACE_PACKFILE=2
+ GIT_TRACE_SETUP=2
+ GIT_TRACE_SHALLOW=2
+ git add 12345
16:06:04.269773 trace.c:333             setup: git_dir: .git
16:06:04.269773 trace.c:334             setup: git_common_dir: .git
16:06:04.269773 trace.c:335             setup: worktree: C:/Users/az/test-long-path-problems
16:06:04.269773 trace.c:336             setup: cwd: C:/Users/az/test-long-path-problems
16:06:04.269773 trace.c:337             setup: prefix: This/Is/A/Very/long/pathname/with/more/than/two/hundred/and/sixty/characters/This/Is/A/Very/long/pathname/with/more/than/two/hundred/and/sixty/characters/This/Is/A/Very/long/pathname/with/more/than/two/hundred/more/dir/
16:06:04.269773 git.c:350               trace: built-in: git 'add' '12345'
16:06:04.269773 trace.c:435             performance: 0.006209300 s: git command: 'git.exe' 'add' '12345'
+ set +x

过长的路径名不是问题,我运行了以下命令:set -x; GIT_TRACE=2 GIT_CURL_VERBOSE=2 GIT_TRACE_PERFORMANCE=2 GIT_TRACE_PACK_ACCESS=2 GIT_TRACE_PACKET=2 GIT_TRACE_PACKFILE=2 GIT_TRACE_SETUP=2 GIT_TRACE_SHALLOW=2 git add app/CodeBehind/Con.php; set +x; - Daniel Novoa
然后没有任何输出,但是我再次尝试运行 >git add .,这次成功了。 - Daniel Novoa

0

请检查您是否有.gitconfig文件,它是一个a.txt文件。 这就是我的提交无法工作的原因,因为我在清理电脑时将其删除了 .........

git config --global --list

将会列出以下这些对象

user.name=**********

user.email=*********


-1

我遇到了同样的问题... 前往病毒和威胁防护设置,然后关闭下面的受控文件夹访问选项。 然后再试一次。它会运行。


3
欢迎来到SO。您的答案与2019年发布的EKanadily的答案完全相同。您如何为这个帖子增加价值? - Daemon Painter
1
@DaemonPainter,“将Git添加到允许的应用程序列表中”和“关闭下面的受控文件夹访问选项”是相同的吗? - Jesus is Lord

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接