我有一个明显的印象,我的Git repo以某种方式被破坏了。
这是我正在做的序列:
最初我认为这可能是一个gitignore的事情,但那也不是。我试过git fsck,它没有报告任何内容。
有关如何修复它的任何建议?
也许qazxsw poi确实存在,但是有一个不同的情况(如qazxsw poi,这意味着App/android/AndroidManifest.xml
没有版本化(因此错误信息):
那么用正确的情况做App/android/androidmanifest.xml
就足够了。
App/android/AndroidManifest.xml
解释git mv
:
发生的事情是Git中有两个文件夹,“OP”和“in the comments”。 当我在Windows下检查了repo时,由于Windows不区分大小写,它实际上将两个文件夹重叠成一个“
App
”。 这意味着,目录结构很好,但一半的文件(来自“app
”方面的文件)有一个无效的Git路径!
让我感到沮丧的另一个怪癖是如果你正在使用命令行,它将使用你当前的路径来App
文件。所以如果你在app
有一个文件
如果你这样做:
git mv
C:\Git\MyRepo\MyFolder\MyFile.txt
c:
cd git
cd myrepo
它会正常工作,你会看到你的文件。但是如果你键入cd myfolder
,你会收到一个错误,因为git找不到Myfile.txt。
原因是它正在查看你当前的路径,即dir
但是git区分大小写。所以你必须回去打字
git mv MyFile.txt MyFile2.txt
c:\git\myrepo\myfolder\
c:
cd Git
如果你然后键入git mv它将正常工作。
把这个作为一个答案,像我这样的人在调试此错误消息时找到了这篇文章。
如cd MyRepo
中所述,OP遇到的情况是由2个预先存在的文件夹(或文件名,就此而言)具有相同的拼写但不同的情况引起的。这首先是一个糟糕的命名选择,希望不会经常发生。
这里,为了完整起见,在Windows上使用git bash时,当您没有使用精确正确的大小写指定旧文件名时,也会发生相同的“不受版本控制”错误消息。
例:
cd MyFolder
,git将以区分大小写的方式存储其文件路径。Dir/MyVeryLongFileName.txt
使用TAB自动完成,可能是因为它足够短以便键入,并且您没有注意到您错误地将其第一个字母键入为git mv dir/MyV
而不是dir
。d
现在你继续完成你的命令,然后,BOOM,你得到错误:
D
事实上,如果您使用相同的样式键入$ git mv dir/MyVeryLongFileName.txt
Tab进行调查,bash会告诉您旧文件存在(尽管其实际上是错误的拼写错误),这是误导性的。以上所有这些都不是火箭科学,但是当你和你的公关准备就绪时,提高你的血压会非常棘手。 #LearnInTheHardWay
这个故事的主旨?即使在键入目录名称后也可以使用TAB自动完成功能。在上面的示例中,键入$ git mv dir/MyVeryLongFileName.txt somewhere/else/
fatal: not under version control, source=dir/MyVeryLongFileName.txt, destination=somewhere/else/MyVeryLongFileName.txt
Tab将自动为您修复不正确的情况,您将获得ls dir/MyV
。继续使用Tab为路径的每个部分。