sourcetree/git,如何识别处理文件名大小写变动?
发布于 作者:苏南大叔 来源:程序如此灵动~关于代码版本库的管理,早些年风光无限的svn
被git
所取代。而git
基本上都是在命令行下使用的,所以就有了gui
图形化工具,比如sourcetree
。这款软件是非常好用的,推荐大家使用。
本文中描述的事项是:当文件命名大小写错误后,git
如何识别处理的问题。
背景描述
苏南大叔在调试thinkcmf
的时候,新建了一个indexController.php
文件,开发机(mac)能够正常识别出这个文件。但是部署上线后,却报错404。检查发现,这个indexController.php
文件的首字母应该是大写。所以,这里需要对这个文件进行改名。然后提交到git
仓库里面。
狗血的事情,就在这个时候发生了,在sourcetree
里面,显示并没有文件可以提交!
解决方案一:修改当前仓库的git设置(不推荐)
在souretree
里面,进入到当前项目后,点击右上角的设置按钮。然后切换到远程仓库
的左下角的编辑配置文件
按钮。在弹出的编辑器里面,找到ignorecase = true
的字样,然后修改成为ignorecase = false
之后,保存即可。
当然,上述config文件就是:存在于项目根目录下面的隐藏文件:/.git/config
文件。所以,你也可以直接修改这个文件。
然后在sourcetree里面,就可以找到相关的提交信息了。但是这样操作后,在最终的仓库里面,文件存在着两个,新旧文件都是存在的。但是,在本地文件系统里面,却只有一个文件。所以,还是不推荐这样的操作的。
解决方案二(文件名):使用git命令强制改名提交(推荐)
此方案中,必须保持上面的配置:ignorecase = true
。需要修改文件名大小写的时候,使用简单粗暴有效的下列命令:
git mv -f <错误的命名> <正确的命名>
这种情况下,再次提交的时候(sourcetree
或者git commit
),会提示有个文件名重命名的操作。
当然,不通过sourcetree
,而是通过命令提交也是可以的。
git commit -m <信息注释>
在最终的仓库里面,就可以看到,已经改名成功了,只有一个最终的文件。
解决方案二(目录名):git
命令强制修改(推荐)
上一小节的内容说的是普通文件的大小写改名,接着说明目录的大小写改名。目录的改名操作比较复杂一些,下面的范例中,原名称是Ajax
,要改名的新名称是ajax
。
这个步骤用git mv -f <老名称> <新名称>
操作的话,要操作两次。用个临时名称tmp
来做个过渡。否则就会报错。"Invalid argument"。
如果这个目录下面还有其它文件的话,就更麻烦一些,直接提交的话,sourcetree会报错。错误信息是:already exists in index
。
要把这些内部文件“删除”,然后再“添加”进去。其实就是先移动到一个临时的外部目录,然后提交submit
之后,再移动回来,再提交一次。有些麻烦是不?
总体上来说,就是git mv -f
两次,移动该目录下面的文件两次,sourcetree
提交两次。
结论
sourcetree
的背后就是git
,所以苏南大叔推荐您:要是sourcetree
找不到解决方案的话,不妨试试从git
的角度来看待这些问题。您说是吧?
更多sourcetree相关经验文章,请点击这里查看。https://newsn.net/tag/sourcetree/ 。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。