我通过将第一个字母去大写来更改了一些文件名,如name.jpg中的name.jpg。Git无法识别这些更改,我不得不删除这些文件并再次上传。在检查文件名的更改时,Git是否可以区分大小写?我没有对文件本身进行任何更改。
当前回答
我从其他答案中尝试了以下解决方案,但没有奏效:
git-mv文件名git rm-f文件名
如果您的存储库是远程托管的(GitHub、GitLab、BitBucket),您可以在源站(GitHub.com)上重命名文件,并强制以自顶向下的方式重命名文件。
以下说明适用于GitHub,但其背后的一般思想应适用于任何远程存储库托管平台。请记住,您尝试重命名的文件类型很重要,也就是说,它是GitHub认为在浏览器中可编辑(代码、文本等)还是不可编辑(图像、二进制等)的文件类型。
访问GitHub.com导航到GitHub.com上的存储库并选择您所在的分支使用站点的文件导航工具,导航到要重命名的文件GitHub允许您在浏览器中编辑文件吗?a.)可编辑单击“编辑此文件”图标(看起来像铅笔)更改文件名文本输入中的文件名b.)不可编辑在新选项卡中打开“下载”按钮,并将文件保存到计算机重命名下载的文件在GitHub.com上的上一个选项卡中,单击“删除此文件”图标(看起来像垃圾桶)确保选中“Commit directly to the branchname branch”单选按钮,然后单击“Commit changes”按钮在GitHub.com的同一目录中,单击“上载文件”按钮从计算机上载重命名的文件确保选中“Commit directly to the branchname branch”单选按钮,然后单击“Commit changes”按钮本地,签出/提取/拉动分支多恩
其他回答
只要您只是重命名文件而不是文件夹,就可以使用gitmv:
git mv -f yOuRfIlEnAmE yourfilename
(在Git2.0.1中进行了修改,上面的咒语中的-f标志是多余的,但在较旧的Git版本中需要。)
修复整个repo上的git文件名大小写:
git rm -r --cached .
git add --all .
git status ##Review that **only** changes staged are renames
## Commit your changes after reviewing:
git commit -a -m "Fixing file name casing"
git push origin master
@Uriahs Victor评论解释:
此命令实际执行的操作是删除git认为仍然存在的文件/文件夹名称。所以它会清除缓存,但将所有内容保留在当前文件夹中您的本地更改),但它会发现其他错误情况文件夹/文件不再存在,因此将在git中显示为已删除地位然后你可以向上推github,它将删除错误案例的文件夹/文件。这个答案有一个图形描述命令的含义。
当你做了很多文件重命名,其中一些只是改变了大小写,很难记住是哪一个。手动“git移动”文件可能需要一些工作。因此,在文件名更改任务期间,我要做的是:
将所有非git文件和文件夹删除到不同的文件夹/存储库。提交当前的空git文件夹(这将显示为所有文件已删除。)将所有文件添加回原始git文件夹/存储库。提交当前非空的git文件夹。
这将解决所有的案例问题,而不需要找出您重命名的文件或文件夹。
我制作了一个bash脚本,将存储库文件名小写:
function git-lowercase-file {
tmp="tmp-$RANDOM-$1"
git mv -f $1 $tmp
git mv -f $tmp ${1,,}
}
那么你可以这样使用它:
git-lowercase-file Name.jpg
我接受了@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 pull -rebase和git pull -ff-only之间的区别
- GitHub -致命:无法读取用户名https://github.com':没有这样的文件或目录
- 撤消git平分错误
- 使用.gitconfig配置diff工具
- 如何配置Mac OS X术语,使git有颜色?
- Visual Studio Code: .git文件夹/文件隐藏
- “node_modules”文件夹应该包含在git存储库中吗
- MySQL中的表名是否区分大小写?
- 为什么git-rebase给了我合并冲突,而我所做的只是压缩提交?
- 当我试图推到原点时,为什么Git告诉我“没有这样的远程‘原点’”?
- 如何从远程分支中挑选?
- 如何查看一个分支中的哪些提交不在另一个分支中?
- 如何取消在github上的拉请求?
- HEAD和master的区别
- GIT克隆在windows中跨本地文件系统回购