我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

关于代码版本库的管理,早些年风光无限的svngit所取代。而git基本上都是在命令行下使用的,所以就有了gui图形化工具,比如sourcetree。这款软件是非常好用的,推荐大家使用。

苏南大叔:sourcetree/git,如何识别处理文件名大小写变动? - git-case-hero
sourcetree/git,如何识别处理文件名大小写变动?(图14-1)

本文中描述的事项是:当文件命名大小写错误后,git如何识别处理的问题。

背景描述

苏南大叔在调试thinkcmf的时候,新建了一个indexController.php文件,开发机(mac)能够正常识别出这个文件。但是部署上线后,却报错404。检查发现,这个indexController.php文件的首字母应该是大写。所以,这里需要对这个文件进行改名。然后提交到git仓库里面。

苏南大叔:sourcetree/git,如何识别处理文件名大小写变动? - 大小写问题简述
sourcetree/git,如何识别处理文件名大小写变动?(图14-2)

狗血的事情,就在这个时候发生了,在sourcetree里面,显示并没有文件可以提交!

解决方案一:修改当前仓库的git设置(不推荐)

souretree里面,进入到当前项目后,点击右上角的设置按钮。然后切换到远程仓库的左下角的编辑配置文件按钮。在弹出的编辑器里面,找到ignorecase = true的字样,然后修改成为ignorecase = false之后,保存即可。

苏南大叔:sourcetree/git,如何识别处理文件名大小写变动? - 打开配置文件
sourcetree/git,如何识别处理文件名大小写变动?(图14-3)

苏南大叔:sourcetree/git,如何识别处理文件名大小写变动? - 修改配置文件
sourcetree/git,如何识别处理文件名大小写变动?(图14-4)

当然,上述config文件就是:存在于项目根目录下面的隐藏文件:/.git/config文件。所以,你也可以直接修改这个文件。

苏南大叔:sourcetree/git,如何识别处理文件名大小写变动? - 修改配置文件2
sourcetree/git,如何识别处理文件名大小写变动?(图14-5)

然后在sourcetree里面,就可以找到相关的提交信息了。但是这样操作后,在最终的仓库里面,文件存在着两个,新旧文件都是存在的。但是,在本地文件系统里面,却只有一个文件。所以,还是不推荐这样的操作的。

苏南大叔:sourcetree/git,如何识别处理文件名大小写变动? - 004
sourcetree/git,如何识别处理文件名大小写变动?(图14-6)

苏南大叔:sourcetree/git,如何识别处理文件名大小写变动? - git_repo_double
sourcetree/git,如何识别处理文件名大小写变动?(图14-7)

解决方案二(文件名):使用git命令强制改名提交(推荐)

此方案中,必须保持上面的配置:ignorecase = true。需要修改文件名大小写的时候,使用简单粗暴有效的下列命令:

git mv -f <错误的命名> <正确的命名>

这种情况下,再次提交的时候(sourcetree或者git commit),会提示有个文件名重命名的操作。

苏南大叔:sourcetree/git,如何识别处理文件名大小写变动? - git_2
sourcetree/git,如何识别处理文件名大小写变动?(图14-8)

当然,不通过sourcetree,而是通过命令提交也是可以的。

苏南大叔:sourcetree/git,如何识别处理文件名大小写变动? - git_3
sourcetree/git,如何识别处理文件名大小写变动?(图14-9)

git commit -m <信息注释>

在最终的仓库里面,就可以看到,已经改名成功了,只有一个最终的文件。

苏南大叔:sourcetree/git,如何识别处理文件名大小写变动? - 011
sourcetree/git,如何识别处理文件名大小写变动?(图14-10)

解决方案二(目录名):git命令强制修改(推荐)

上一小节的内容说的是普通文件的大小写改名,接着说明目录的大小写改名。目录的改名操作比较复杂一些,下面的范例中,原名称是Ajax,要改名的新名称是ajax

苏南大叔:sourcetree/git,如何识别处理文件名大小写变动? - git目录改名
sourcetree/git,如何识别处理文件名大小写变动?(图14-11)

这个步骤用git mv -f <老名称> <新名称>操作的话,要操作两次。用个临时名称tmp来做个过渡。否则就会报错。"Invalid argument"。

newsn.net:这里是【评论】可见内容

苏南大叔:sourcetree/git,如何识别处理文件名大小写变动? - git目录改名
sourcetree/git,如何识别处理文件名大小写变动?(图14-12)

苏南大叔:sourcetree/git,如何识别处理文件名大小写变动? - git目录改名2
sourcetree/git,如何识别处理文件名大小写变动?(图14-13)

如果这个目录下面还有其它文件的话,就更麻烦一些,直接提交的话,sourcetree会报错。错误信息是:already exists in index

要把这些内部文件“删除”,然后再“添加”进去。其实就是先移动到一个临时的外部目录,然后提交submit之后,再移动回来,再提交一次。有些麻烦是不?

苏南大叔:sourcetree/git,如何识别处理文件名大小写变动? - git目录改名3
sourcetree/git,如何识别处理文件名大小写变动?(图14-14)

总体上来说,就是git mv -f两次,移动该目录下面的文件两次,sourcetree提交两次。

结论

sourcetree的背后就是git,所以苏南大叔推荐您:要是sourcetree找不到解决方案的话,不妨试试从git的角度来看待这些问题。您说是吧?

更多sourcetree相关经验文章,请点击这里查看。https://newsn.net/tag/sourcetree/

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   sourcetree    git