尝试远程添加Git存储库时收到“致命错误:不是git存储库”


439

我通过遵循本教程向自己介绍Git:

一切正常,直到将回购添加到本地计算机的部分为止:

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

(用正确的名称替换USERNAME,NFSNSERVER和REPOAME之后),我收到错误消息:

fatal: Not a git repository (or any of the parent directories): .git

你能帮我走过这一步吗?


2
git init但还要确保您的子目录都没有自己的.git文件夹
James Oravec 2015年

Answers:


907

您是否初始化了本地Git存储库,应该将此远程存储添加到该存储库中?

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

尝试git init


2
我已经完成了此步骤,但是在设置了我的引擎码帐户并安装了引擎码之后,必须再次执行此步骤。
AVProgrammer 2012年

3
我的.git文件夹不见了。是git init一样删除存储库文件夹,然后git clone ...。我要做的只是pull
弗朗西斯科·科拉莱斯·莫拉莱斯

3
@FranciscoCorralesMorales如果您的.git文件夹不见了,您可以git init再次运行以创建一个新文件夹。您需要重新添加一个遥控器,然后才能从中拉出。

3
从本地系统提交更改时出现相同的错误。尝试git init并成功。谢谢!
rbashish '16

6
我的确有.git,我已经做过git init了,但是我遇到了错误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

85

如果当前工作目录不在Git存储库中时尝试使用Git命令,则会出现此错误。这是因为,默认情况下,.git我对“除非我在项目目录中,否则Git不会显示日志”的回答所指出的那样,Git默认情况下将查找存储库目录(在项目根目录内?):

根据Linux Kernel Git官方文档, 默认情况下GIT_DIR[环境变量]是否设置为寻找.git目录(在当前工作目录中?):

如果GIT_DIR设置了环境变量,那么它将指定要使用的路径,而不是.git存储库基础的默认路径。

您要么需要cd进入存储库/工作副本,要么首先没有初始化或克隆存储库,在这种情况下,您需要在要放置存储库的目录中初始化存储库:

git init

或克隆存储库

git clone <remote-url>
cd <repository>

13
+1代表提及GIT_DIR。在裸仓库中的钩子中,GIT_DIR设置为“。” 而不是“ .git”。
commonpike 2014年

为+1 git init。阅读完您的答案后,我克隆但未识别的存储库中多次使用了此功能。因此,当从应该是a的目录树运行时,似乎是安全的git repository,所有文件都在git目录中,但声称不是fatal: Not a git repository (or any parent up to mount point
ElderDelp

34

我的问题是,由于操作系统的某些故障,本地存储库上的任何命令都以“致命:不是git存储库(或任何父目录):. git”结尾,其中包含fsck命令。

问题是HEAD文件

我能够在.git / refs / heads中找到我已经处理过的实际分支名称,然后执行此操作:

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

有效。


2
我的HEAD文件由于任何原因被损坏,因此我不得不恢复该文件并解决了该问题
Steven

1
你是好朋友。节省了我的时间
Vaibhav Sah

这也是我的问题。谢谢
卡洛斯·拉斐尔·拉米雷斯

3
我在git rebase期间打开了Visual Studio,Visual Studio注意到文件发生了更改,此后不久我就蓝屏了。重新启动.git / HEAD充满NULL后,当我用完整的哈希(5621afeffbabed40e3f386676068c45643644b7d)替换它们时,从诸如.git \ refs \ remotes \ origin \ master之类的位置读取内容,git又开始工作了,我还需要stackoverflow.com/questions / 1115854 /…因为这告诉我删除.git / index,并且在执行git reset之前需要删除.git / index.lock。现在可以了
伊万

1
我几乎失去了恢复工作的希望。我只复制并粘贴您的解决方案,就神奇了。谢谢
Mukesh Kumar

17

注意:这不能解决常见问题(OP的问题),但是可以解决出现此错误消息的其他问题。我不想做新的问题只是为了写下这个答案,告诉我是否应该这样做: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 logreturn fatal: bad default revision 'HEAD'。遥控器那里,所以我这样做了git fetch --all,然后只是git reset --hard origin/master为了让自己回到以前的回购状态。

请注意,如果有一些未提交的更改,可以使用来查看它们git statusgit diff依此类推。然后git diff yourfile > patch在运行重置之前。

至少对我而言,reflog(git reflog)完全消失了。因此,如果您进行了重置,并且想要防止某些更改,那么我不确定重置后是否可以将其恢复。因此,请确保您拥有所有不会丢失的更改,最终只需在尝试此操作之前复制副本即可。


我知道了 并尝试了@Smar提到的方式,但结果相同“致命....”。那么,下一步该怎么办?有什么建议吗?
混乱

1
使用Visual Studio时发生此问题,git init并且git fetch --all确实解决了该问题。
莫尔斯

7
$ git status
fatal: Not a git repository:

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

$ git init

6

我在文件系统上移动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问题,而是HTH。


5

万一它对别人有帮助,我不小心删除了.git / objects /

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

恢复它解决了问题。


4

在命令行/ CLI中,如果当前目录不是存储库,则会出现此错误。因此,您必须先将CD放入存储库中。


4

可能为时已晚,但可能会帮助将来的访客的另一种解决方案。首先删除旧.git目录-

rm .git

然后再次初始化git repo

git init

6
应当注意,这会破坏所有git元数据,例如提交。您将保留数据,但是Git将“重新开始”-这可能不是一件好事。
约瑟夫

1
@JosephA .:对,那不是最理想的。您可以提出更好的解决方案吗?fatal即使.git文件夹存在,我也会收到错误消息。
哈桑·拜格

但是,嘿,提交是否已经在远程仓库中了?还是您真正需要在HD /本地上提交这些内容?@JosephA。
kevthanewversi

Coz我在想,您仍然可以在不具有本地提交信息的情况下进行git revert,git reset之类的工作...对吗?@JosephA。
kevthanewversi

1
这就是一切!解决这个问题的最坏方法可能是。
理查德·兰斯

4

似乎您不打算进入特定的文件夹。例如,如果我正在开发一个名为bugsBunny的项目,并且将其保存在d:/ work:code文件夹中,那么首先必须使用cd d:/ work / code / bugsBunny进入该文件夹,然后再执行此操作可以继续使用您的git命令。


4

即使我也有同样的问题。我编写了一个Shell脚本,它将在一周的17:55的工作日使用crontab将所有代码备份到我的git repo中。通过查看cron的日志,我发现了上述问题。

仅当您尝试从非gir目录(即不是工作副本的其他目录)执行git命令时,才出现上述问题。要-C <git dir>在您正在执行的git命令中修复此添加问题,该命令 git status将为git -C /dir/to/git statusgit add -A将为git -C /dir/to/git -A


3

在我的情况下,我使用了Tortoise SVN,并犯了一个错误,即同时使用Visual Studio GIT函数。这使得Visual Studio将HEAD文件锁定在.git文件夹中,因此VS或Tortoise都无法访问该存储库,并且两个应用程序都出现“致命错误:不是git repo ...”错误。

解:

  1. 进入.git文件夹,并将“ HEAD.lock”重命名为“ HEAD”
  2. 确定一个GIT管理员应用程序,不要碰另一个


2

就我而言,我在使用Windows cmd尝试任何git-命令(例如git status)时遇到了相同的问题。因此,我的工作是在环境变量中为窗口https://windows.github.com/安装git之后,在“ PATH”变量上添加git的类路径。通常,git将安装在C:/ user /“用户名” / appdata / local / git / bin上,并将其添加到环境变量的PATH中

在cmd上还有另外一件事转到git仓库或cd到您的克隆在窗口上的位置,通常它们将存储在github cd文档/ Github / yourproject下的文档中,之后您可以使用任何git命令

谢谢


2

转到存储本地回购的源文件夹,在c:/ GitSource中找到我的示例,在文件夹中单击鼠标右键,在此处单击git bash,然后单击git status...。



2

在我的情况下,.git / HEAD文件损坏(仅包含点)。因此,我对其进行了编辑,并将其内容替换为:

ref: refs/heads/master

然后它又开始工作了。


1

对我来说,这与我的.git/路径中格式错误的所有权有关。 root拥有.git/HEAD.git/index,阻止jenkins用户运行作业。


1
在命令行上这似乎不可复制。设置的所有权后.git/HEAD,并.git/indexroot:root,我仍然能够增加遥控器没有错误。当将整个.git目录的所有权更改为时root,会出现另一个错误:error: could not lock config file .git/config: Permission denied
Kyle Strand

1

下面的错误似乎是Gits在当前目录中找不到.git文件,因此抛出错误消息。

因此,将目录切换到您已从git中签出代码的存储库目录,然后运行此命令。

  • $ git checkout

1

就我而言,我发现从某些时候开始,Windows中的git对驱动器号区分大小写。

在Windows中升级git二进制文件后,以前工作的cli命令停止了。例如,脚本中的路径为D:\ bla \ file.txt,而git命令仅接受d:\ bla \ file.txt


1

git一直运行良好,突然间它开始显示此fatal: Not a git repository (or any of the parent directories): .git消息。

对于我来说,不确定.git文件夹中的内容有什么损坏,我确实git clone ** newfolder将整个.git文件夹复制到了我已更改的损坏/旧文件夹中,然后git开始显示错误消息。

一切恢复正常,并且git也识别出我已更改/未暂存的文件。


0

还原.git/ORIG_HEAD和其他根.git回购文件

从备份还原后出现此错误,显然.git目录根目录中包含的文件未将其定向到目标,但是所有子文件夹都这样做了,起初我以为存储库是完整的。

我通过还原根文件来修复它。


0

在GitLab进行身份验证后,Jenkins Git插件出现了这个问题。Jenkins正在报告'hudson.plugins.git.GitException:[...] stderr:GitLab:找不到您要查找的项目。致命:无法从远程存储库读取。”

但是,如果我直接从Jenkins框(命令行)进行了“ git clone”或“ git fetch”操作,则不会出现问题。

通过删除该特定作业的Jenkins作业文件夹中的整个/ workspace目录,解决了该问题,例如

rm -Rf $JENKINS_HOME/jobs/myJenkinsJob/workspace/

大概本地.git文件夹已陈旧/损坏了?


0

这也可能是由于权限所致。检查所有者/组权限,并确保您具有访问该数据的足够权限。就我而言,我在所有权设置为root:root的回购中运行“ git status”时遇到此错误。以root身份运行“ git status”解决了我的问题。或者,如果您不希望用户/组所有权为root:root,则将存储库添加到您有权访问的内容中。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.