尝试添加 Git 存储库时收到“fatal: Not a git repository”错误提示

547

我正在遵循这个教程。一切都正常,直到我在本地机器上运行它(在将$VARIABLE替换为实际值后):

git remote add nfsn ssh://$USERNAME@$SERVER/home/private/git/$REPONAME.git

我收到以下错误信息:

致命错误:不是 Git 存储库(或任何父目录):.git

我如何跨过这个步骤?


8
git init,但也要确保您的任何子目录都没有自己的.git文件夹。 - James Oravec
38个回答

1124

您是否已初始化本地Git仓库,并打算将该远程仓库添加到其中?

您的本地目录是否有一个 .git 文件夹?

尝试使用命令 git init 进行初始化。


3
我已经完成了这一步骤,但在设置了我的Engine Yard账户并安装了Engine Yard后,不得不再次执行它。 - AVProgrammer
3
我的 .git 文件夹不见了。执行 git init 是否等同于删除仓库文件夹然后再执行 git clone ...?我所需要做的就是执行 pull 命令。 - Francisco Corrales Morales
3
如果你的.git文件夹不见了,你可以再次运行git init来创建一个新的。但在拉取之前,你需要重新添加一个远程仓库。 - user456814
3
当我从本地系统提交更改时,出现了相同的错误。尝试使用“git init”解决了问题。谢谢! - rbashish
14
我的文件夹中有.git文件夹,并且我已经执行了git init命令,但是当我执行git add -A时遇到错误信息 jalal@klein:~/computer_vision/py-faster-rcnn$ git add -A fatal: Not a git repository: caffe-fast-rcnn/../.git/modules/caffe-fast-rcnn - Mona Jalal
显示剩余6条评论

101
如果您的当前工作目录不在Git仓库中,尝试使用Git命令会导致此错误。这是因为默认情况下,Git会查找项目根目录中的.git仓库目录,如我对“Git在不在项目目录中时不显示日志”的回答所指出的那样。
根据官方Linux内核Git文档GIT_DIR是[环境变量],默认情况下设置为查找.git目录(在当前工作目录中?):
如果设置了GIT_DIR环境变量,则指定要使用的路径而不是默认的.git作为仓库的基础。
您需要进入仓库/工作副本,或者首先未初始化或克隆存储库,在这种情况下,您需要在要放置存储库的目录中初始化一个仓库。
git init

或者克隆一个仓库

git clone <remote-url>
cd <repository>

14
在裸仓库的钩子中,如果提到GIT_DIR,则GIT_DIR会被设置为“.”而不是“.git”。 - commonpike
对于 git init 给予 +1。在阅读了您的答案后,我在多个我已经克隆但未被识别的仓库上使用了这个命令。因此,当从一个目录树中运行该命令时,只要该目录树应该是一个 git 仓库,并且所有文件都在 git 目录中,但却声称不是 fatal: Not a git repository (or any parent up to mount point 时,它似乎是安全的。 - ElderDelp
@commonpike确实:我的钩子没有起作用,因为我想在推送到我的裸仓库时拉取另一个仓库。我不得不将GIT_DIR设置为“.../.git”。 - rambi

56

我的问题是,由于操作系统出了些小问题,我的本地仓库上的任何命令最后都会以“fatal: Not a git repository (or any of the parent directories):.git”结尾,包括fsck命令。

问题出在HEAD文件为空

我能够在.git/refs/heads目录下找到我所工作的实际分支名称,然后执行了以下操作:

echo 'ref: refs/heads/ML_#94_FILTER_TYPES_AND_SPECIAL_CHARS' > .git/HEAD

它有效了。


4
我的 HEAD 文件因某种原因损坏了,所以我不得不进行恢复并修复了这个问题。 - Steven
2
你太棒了,伙计。节省了我大量的时间。 - Vaibhav Sah
4
我在 git rebase 过程中打开了 Visual Studio,Visual Studio 察觉到文件变化后不久,我的电脑突然崩溃了。重启后,.git/HEAD 文件里全是 NULL 值,我用从某个地方(例如 .git\refs\remotes\origin\master)读取的完整哈希值(5621afeffbabed40e3f386676068c45643644b7d)替换掉后,git 又可以正常工作了。 我还需要参考这篇文章:https://dev59.com/4nNA5IYBdhLWcg3wC5JR,根据其中的建议删除了 .git/index 文件并在执行 git reset 前移除了 .git/index.lock 文件。现在一切正常。 - Ivan
1
这对我来说也是个问题。我也对许多文件进行了本地更改,这为我节省了一些额外的工作。谢谢! - Ady Moldo
1
谢谢,实际上我的.git/HEAD文件被root所拥有,无法被用户读取。更改所有权解决了这个问题 :) - XonqNopp
显示剩余8条评论

23

注意:这并不是回答常见问题的答案,而是针对另一个问题的解决办法,该错误信息可能会出现。我不想新建一个问题,只是为了写下这个答案,请告诉我是否应该这样做 :P

由于某些崩溃引起的某些损坏,我遇到了这种情况,即使.git确实存在,我仍然会收到此错误。

smar@aaeru ~/P/Nominatim> git status
fatal: Not a git repository (or any of the parent directories): .git
smar@aaeru ~/P/Nominatim [128]> ls .git
COMMIT_EDITMSG  config*  FETCH_HEAD  HEAD  index  logs/  modules/  objects/  ORIG_HEAD packed-refs

因为我没有任何需要保存的东西,所以我选择了简单的方法:

......

smar@aaeru ~/P/Nominatim [128]> git init
Reinitialized existing Git repository in /home/smar/Projektit/Nominatim/.git/

然而仍未解决问题,例如git log返回fatal: bad default revision 'HEAD'。虽然远程存在,但我执行了git fetch --all然后只需git reset --hard origin/master就可以将自己恢复到先前存储库的状态。

请注意,如果存在一些未提交的更改,您可以使用git statusgit diff等命令查看它们。然后在运行重置之前,只需git diff yourfile > patch即可。

对于我来说,git reflog已经完全消失了。因此,如果您进行了重置,并且有一些您想要避免的更改,我不确定在重置后是否还能够获得它们。因此,请确保您备份了所有无法丢失的更改,最终可以通过复制克隆来完成。


我遇到了这个问题。我尝试了@Smar提到的方法,但结果仍然是“致命错误...”。那么接下来该怎么办?有什么建议吗? - Aaron
3
在使用Visual Studio时出现了问题,执行git initgit fetch --all修复了该问题。 - Morse
看起来这个问题已经存在很长时间了,但仍然发生。我正在使用VS 2022将项目更新到较新的.Net-4.7.2版本,突然git命令停止工作。.git文件夹还在那里。使用git initgit fetch --all解决了这个问题。另一个可能导致此问题的原因是我在一个已经合并/删除的远程分支上。 - mihkov

8

如果对其他人有帮助,我遇到了这个错误消息,是在意外删除了.git/objects/文件夹之后

致命错误:不是git存储库(或任何父目录):.git

恢复它解决了问题。


8

我移动了文件系统上的一个git项目后,就出现了这个问题。当我运行一些git命令时,会出现错误,例如:

$ git status
fatal: Not a git repository: /home/rospasta/path_old/gitprojecta/.git/modules/.travis

我在/home/rospasta/path_old/gitprojecta/.travis/.git中找到了项目旧位置的绝对路径。手动更新新位置的路径解决了我的问题。

所以我的问题可能与git有关,但希望这可以帮到你。


8
$ git status
fatal: Not a git repository:

只需在您的cmd或git shell或任何其他终端中键入以下内容:

$ git init

7

对我来说,问题只出现在尝试从非Git目录(即不是工作副本的其他目录)执行git命令时。

要解决这个问题,请在您正在执行的git命令中添加-C <git dir>,例如将git status更改为git -C /dir/to/git status,将git add -A更改为git -C /dir/to/git -A


6

我刚在我的目录中重新初始化了git

git init 

并且它起作用了


4
在我的情况下,我使用了Tortoise SVN,并错误地同时使用了Visual Studio GIT功能。这会使Visual Studio锁定.git文件夹中的HEAD文件,因此VS和Tortoise都无法访问存储库,我从两个应用程序中都收到“fatal:Not a git repo…”错误消息。
解决方案: 1. 进入.git文件夹,将“HEAD.lock”重命名为“HEAD”。 2. 决定使用一个GIT管理应用程序,并不要触碰另一个。

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