我通过将第一个字母去大写来更改了一些文件名,如name.jpg中的name.jpg。Git无法识别这些更改,我不得不删除这些文件并再次上传。在检查文件名的更改时,Git是否可以区分大小写?我没有对文件本身进行任何更改。


当前回答

因此,GitHub如何处理这种区分大小写的部署问题有很多解决方案。

在我的例子中,我已经将文件名的大小写约定从大写改为小写。

我相信git可以跟踪更改,但这个命令git-config-core.ignorecase false指示git如何在幕后操作

在我的例子中,我运行了命令,git突然有很多文件要跟踪,标记为未跟踪。

然后我点击gitadd,然后git提交并再次在netlify上运行我的构建。

然后可以跟踪现在显示的所有错误,例如找不到模块:无法解析“”/Components/ProductRightSide位于/opt/build/rebo/Components/products中,并已修复,以便git能够成功跟踪和实施更改。

这是一个很好的解决方法,也可以避免沮丧,但相信我,这肯定会奏效的。

PS:解决问题后,您可能需要运行命令git-config-core.ignorecase true还原git如何区分大小写。

此外,请注意git-config-core.ignorecase-false与其他文件扩展名存在问题,因此您可能需要注意,如果您知道自己在做什么并且确信这一点,请执行此操作。

这是netlify上的一条线索,可能会有所帮助

其他回答

在OSX下,为了避免这个问题并避免在不区分大小写的文件系统上开发时出现其他问题,可以使用Disk Utility创建区分大小写虚拟驱动器/磁盘映像。

运行磁盘实用程序,创建新的磁盘映像,并使用以下设置(或根据需要进行更改,但要区分大小写):

确保告诉git它现在在区分大小写的FS上:

git config core.ignorecase false

我接受了@CBarr的回答,并编写了一个Python 3脚本,用一个文件列表来实现:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import os
import shlex
import subprocess

def run_command(absolute_path, command_name):
    print( "Running", command_name, absolute_path )

    command = shlex.split( command_name )
    command_line_interface = subprocess.Popen( 
          command, stdout=subprocess.PIPE, cwd=absolute_path )

    output = command_line_interface.communicate()[0]
    print( output )

    if command_line_interface.returncode != 0:
        raise RuntimeError( "A process exited with the error '%s'..." % ( 
              command_line_interface.returncode ) )

def main():
    FILENAMES_MAPPING = \
    [
        (r"F:\\SublimeText\\Data", r"README.MD", r"README.md"),
        (r"F:\\SublimeText\\Data\\Packages\\Alignment", r"readme.md", r"README.md"),
        (r"F:\\SublimeText\\Data\\Packages\\AmxxEditor", r"README.MD", r"README.md"),
    ]

    for absolute_path, oldname, newname in FILENAMES_MAPPING:
        run_command( absolute_path, "git mv '%s' '%s1'" % ( oldname, newname ) )
        run_command( absolute_path, "git add '%s1'" % ( newname ) )
        run_command( absolute_path, 
             "git commit -m 'Normalized the \'%s\' with case-sensitive name'" % (
              newname ) )

        run_command( absolute_path, "git mv '%s1' '%s'" % ( newname, newname ) )
        run_command( absolute_path, "git add '%s'" % ( newname ) )
        run_command( absolute_path, "git commit --amend --no-edit" )

if __name__ == "__main__":
    main()

若并没有工作,使用git-rm文件名从磁盘中删除文件并将其添加回。

与@Sijmen的答案类似,这是我在OSX上重命名目录时的工作原理(灵感来自另一篇文章的答案):

git mv CSS CSS2
git mv CSS2 css

简单地执行git-mv-CSS CSS会产生无效参数错误:致命:重命名“/static/CSS”失败:无效参数可能是因为OSX的文件系统不区分大小写

p.s BTW如果您使用的是Django,collectstatic也无法识别大小写差异,您必须在静态根目录中手动执行上述操作

有时临时更改Git的大小写敏感度是有用的。

方法#1-更改单个命令的大小写敏感性:

git-c core.ignorecase=true checkout mybranch,关闭单个checkout命令的区分大小写功能。或者更一般地:git-c core.ignorecase=<<true或false>><<command>>。(感谢VonC在评论中提出了这一点。)

方法#2-更改多个命令的大小写敏感性:

要更改设置更长时间(例如,如果在更改回之前需要运行多个命令):

git-config-core.ignorecase(返回当前设置,例如false)。git-config-core.ignorecase<<true或false>>-设置所需的新设置。…运行多个其他命令。。。git-config-core.ignorecase<<false或true>>-将配置值设置回以前的设置。