草庐IT

windows - Git 不会还原或提交它认为已修改的文件

coder 2023-06-25 原文

我已经按照 this tutorial 将 SVN 存储库转换为 Git .现在似乎无法像 this answer 中建议的那样提取子存储库.

请原谅这篇长文章,但大部分文本都是格式良好的 git 输出。

操作系统:Windows 8 命令行:MinGW Git版本:1.8.1.msysgit.1

除非您有一个干净的临时区域并且没有修改过的文件,否则提取子存储库的过程似乎不起作用。

git status 告诉我我有一个修改过的文件,即使这是一个新的 SVN 导入。好的,让我们尝试摆脱它。

尝试还原文件。

user$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified: folder with space/folder/toolbar.png
#
no changes added to commit (use "git add" and/or "git commit -a")

user$ git checkout -- "folder with space/folder/toolbar.png"

user$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified: folder with space/folder/toolbar.png
#
no changes added to commit (use "git add" and/or "git commit -a")

这没有用,但我真的不在乎我是否提交它,所以我接下来会尝试。

user$ git commit -a -m "Testing if committing fixes it"
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified: folder with space/folder/toolbar.png
#
no changes added to commit (use "git add" and/or "git commit -a")

user$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified: folder with space/folder/toolbar.png
#
no changes added to commit (use "git add" and/or "git commit -a")

通过跳过暂存来提交是行不通的,所以让我们先尝试暂存。

user$ git add "folder with space/folder/toolbar.png"

user$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified: folder with space/folder/toolbar.png
#
no changes added to commit (use "git add" and/or "git commit -a")

行不通,所以我很困惑......去问问更聪明的人。

我是 git 的新手,但熟悉 Hg 并且一直在阅读 this online tutorial让我自己开始。

我完全有可能搞砸了一个简单的命令。

已经尝试过: 我四处寻找解决我的特定问题的方法,但运气不佳。我偶然发现了 this answer这似乎相关但并不能完全解决我的问题。

编辑:可能有趣的事情 这是让我困惑的部分。不久前,我已将此 repo 推送到在线存储库中。在重新克隆后,repo 仍然认为文件已被修改(即 git status 返回相同的结果,并且我已经设置了 git config --global core.autocrlf false 并通过运行 git config --global core.autocrlf 进行验证,它确实返回 false)。

编辑 2:修复已找到,但问题仍未理解 我已经设法通过简单地从系统、暂存区中删除文件然后提交更改来修复存储库。 在此之后,为了取回文件,我只是将其复制回来并将其提交到存储库。

这个问题虽然已解决,但只会让我更加困惑。

当我尝试删除文件时,我注意到如果我将存储库重置为 HEAD,其最后一次提交已删除文件,git status 将指示没有任何更改并且文件未被跟踪但文件将在我的工作树中恢复。考虑到它在 git 中被标记为已删除,这很奇怪......

只有在第二次删除它之后,即使 git 不再记得它,我还是设法真正删除了它,以便 git resetgit reset --hard不要恢复文件。

如果有人可以解释我是如何进入这种状态的,如果这是 git 中的错误或正常行为,我将不胜感激。

我的怀疑 我丢失了我使用的命令序列,但发生的事情是这样的: 该文件是 Images/toolbar.png,我已导航到 Images 文件夹。

在我从文件系统中删除它之后,git 检测到这样的变化:

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted: toolbar.png
#       deleted: ../images/toolbar.png
#

请注意 images 文件夹没有大写!这是在忽略路径大小写的 Windows 中运行的。我怀疑这可能是问题的一部分......

我真的很困惑,但我的问题已经解决了。所以这篇文章仍然只是出于好奇,尽管我无法复制它在某处从 SVN 转换时的行为。

最佳答案

我前段时间遇到过类似的问题。

这个文件的大小写,或者它所在的目录是否在任何时候发生了变化?

我有一个目录,其中的大写字母已更改为全部小写(假设它从 /Foo 变为 /foo)。它给了我你所描述的所有相同的问题。

每当我修改一个文件时,它都会给我类似的输出:

#       modified: bar.txt
#       modified: ../Foo/bar.txt

我也有同样的问题,提交或重置没有产生任何结果。

我认为问题的原因是 Windows 文件路径不区分大小写,但 Unix 是。由于许多类似 Git 的命令行工具都是在 Unix-y 系统上开发的,因此它们有时不能很好地处理这种差异,并且在将文件添加为 Foo/bar.txt 时会感到困惑> 和 foo/bar.txt。我认为这让 Git 认为有两个不同的文件,而实际上只有一个。

我最终的修复与你的相同,从历史记录中删除整个目录,然后重新添加它(并且永远不会再更改大写)。这也导致了你描述的同样的怪异,我不得不在它发生之前将它删除两次。

无论如何,我知道这不是一个确定的答案,但我已经能够重现这个问题,所以我很确定这就是导致它的原因(至少对我而言)。

关于windows - Git 不会还原或提交它认为已修改的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15940349/

有关windows - Git 不会还原或提交它认为已修改的文件的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  3. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  4. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  5. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  6. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  7. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  8. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  9. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  10. ruby - Highline 询问方法不会使用同一行 - 2

    设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案

随机推荐