刚签出文件时,git说“不受版本控制”

问题描述 投票:6回答:3

我有一个明显的印象,我的Git repo以某种方式被破坏了。

这是我正在做的序列:

  1. git clone [remote的克隆字符串] 这创建了一个文件“App / android / AndroidManifest.xml”,以及其他许多文件。
  2. git mv App / android / AndroidManifest.xml App / android / AndroidManifestTemplate.xml 这给出了错误消息“致命:不受版本控制,源= App / And ......”

最初我认为这可能是一个gitignore的事情,但那也不是。我试过git fsck,它没有报告任何内容。

有关如何修复它的任何建议?

git
3个回答
8
投票

也许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路径!


2
投票

让我感到沮丧的另一个怪癖是如果你正在使用命令行,它将使用你当前的路径来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它将正常工作。

把这个作为一个答案,像我这样的人在调试此错误消息时找到了这篇文章。


-1
投票

cd MyRepo中所述,OP遇到的情况是由2个预先存在的文件夹(或文件名,就此而言)具有相同的拼写但不同的情况引起的。这首先是一个糟糕的命名选择,希望不会经常发生。

这里,为了完整起见,在Windows上使用git bash时,当您没有使用精确正确的大小写指定旧文件名时,也会发生相同的“不受版本控制”错误消息。

例:

  1. 假设你的repo中有一个文件路径包含混合大小写的cd MyFolder,git将以区分大小写的方式存储其文件路径。
  2. 现在输入currently chosen answer Tab。假设您没有对路径Dir/MyVeryLongFileName.txt使用TAB自动完成,可能是因为它足够短以便键入,并且您没有注意到您错误地将其第一个字母键入为git mv dir/MyV而不是dir
  3. 由于Windows不区分大小写,因此TAB自动完成仍然有效,因此您现在可以在命令行中使用它 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为路径的每个部分。

© www.soinside.com 2019 - 2024. All rights reserved.