git说"不受版本控制"刚签出的文件

时间:2014-10-15 14:45:24

标签: git

我有一个明显的印象,我的Git回购会被某种方式破坏。

这是我正在做的序列:

  1. git clone [remote的克隆字符串]

    这创建了一个文件“App / android / AndroidManifest.xml”

  2. git mv App / android / AndroidManifest.xml App / android / AndroidManifestTemplate.xml

    这会显示错误消息“致命:不受版本控制,源= App / And ......”

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

    有关如何修复的建议吗?

7 个答案:

答案 0 :(得分:8)

可能App/android/AndroidManifest.xml确实存在,但是有不同的情况(例如App/android/androidmanifest.xml,这意味着App/android/AndroidManifest.xml没有版本化(因此错误消息):

使用正确的案例做git mv就足够了。

OP解释了in the comments

  

发生的事情是Git中有两个文件夹,“App”和“app”。
  当我在Windows下检出repo时,由于Windows不区分大小写,它实际上将两个文件夹叠加到一个“App”中。   这意味着,目录结构很好,但是一半的文件(来自“app”的文件)有一个无效的Git路径!

答案 1 :(得分:2)

另一个令我沮丧的怪癖是,如果您使用命令行,它将使用您的当前路径来git mv文件。因此,如果您在C:\Git\MyRepo\MyFolder\MyFile.txt

中有一个文件

如果您这样做:

c:

cd git

cd myrepo

cd myfolder

dir

它将正常工作,您将看到您的文件。但是,如果您输入git mv MyFile.txt MyFile2.txt,则会因为git找不到Myfile.txt而报错。

原因是它正在查看您当前的路径,即c:\git\myrepo\myfolder\

但是git区分大小写。因此,您必须返回并输入

c:

cd Git

cd MyRepo

cd MyFolder

如果您再输入git mv,它将正常工作。

将其作为对像我这样的人的答案,这些人在调试此错误消息时发现了这篇文章。

答案 2 :(得分:0)

以上所有答案都很不错,我在尝试移动文件时发现了这一点,并在同一次提交期间将它们大写

通过提交新的文件路径,我可以访问新路径,然后访问git mv(:

问题解决了

答案 3 :(得分:0)

由于git区分大小写,但操作系统不区分大小写,因此git认为该路径实际上存在不同的大写字母时是错误的。

解决此问题的一种编程方式可以是从操作系统中删除冲突路径,然后执行git reset --hard HEAD或从HEAD检出目录。

答案 4 :(得分:0)

解决这个问题最简单的方法是先添加文件,然后重命名文件

$ git 添加文件名

$ git mv 当前文件名新文件名

然后你的问题就解决了。 Screenshot for above issue

答案 5 :(得分:0)

今天遇到了这个问题。就我而言,它似乎是导致此问题的路径中的反斜杠。

我试图像这样在 cmd 中重命名我的文件:

cd C:\Path\To\My\File
git mv file1.js file1.ts

这给了我这个 Not under version control 错误。

一旦我切换到 git bash 而不是 cmd 并开始使用类似 linux 的正斜杠它工作正常。

答案 6 :(得分:-1)

currently chosen answer中所述,OP遇到的情况是由2个已有的文件夹(或文件名)引起的,它们具有相同的拼写但大小写不同。首先,这是一个不好的命名选择,希望不会经常发生。

在这里,为了完整起见,当您在Windows上使用 git bash 时,如果未使用精确正确的名称指定旧文件名,也会出现相同的“不在版本控制下”错误消息情况。

示例:

  1. 假设您的存储库中有一个文件路径包含大小写混合的Dir/MyVeryLongFileName.txt,并且git将以区分大小写的方式存储其文件路径。

  2. 现在,您输入git mv dir/MyV Tab 。假设您没有对路径dir使用TAB自动完成功能,可能是因为它足够短,无法键入,并且您没有注意到您错误地将其首字母键入为d而不是{{ 1}}。

  3. 由于Windows不区分大小写,因此TAB自动补全仍然有效,因此您现在可以在命令行中使用它

    D

    现在您要完成命令,BOOM,您会收到错误消息:

    $ git mv dir/MyVeryLongFileName.txt
    

    实际上,如果您使用相同的样式来键入$ git mv dir/MyVeryLongFileName.txt somewhere/else/ fatal: not under version control, source=dir/MyVeryLongFileName.txt, destination=somewhere/else/MyVeryLongFileName.txt Tab 进行调查,则bash会告诉您存在旧文件(尽管实际上拼写错误)。具有误导性。

以上所有这些都不是火箭科学,但是在您有时间赛跑以准备好PR时,要提高血压会非常棘手。 #LearnInTheHardWay

故事的寓意?即使已经输入了目录名,也可以使用TAB自动补全功能。在上面的示例中,键入ls dir/MyV Tab 将自动为您解决该错误情况,您将得到git mv dir。在路径的每个部分继续使用 Tab