GIT - 关于文件处理

你们平时在使用GIT的时候,尤为是在Windows平台的时候,通常都不会特别留意跟文件相关的一些问题,好比说 文件权限,大小写问题。node

这篇文章将给你们介绍在GIT使用中,关于文件处理的两个问题

文件权限

正常状况下,咱们都不用太在意,甚至不用理会GIT里面文件的权限是否可读,可写,可执行。但若是咱们加进GIT的文件是一个可执行的文件,好比一个方便快捷部署的文件deploy.sh. 那么若是没有可执行权限的话,在Linux系统下面是没法执行的。git

当咱们新建一个deploy.sh文件,加到GIT里面,咱们经过git ls-files -s能够看到文件是权限是644json

D:\workspace\blog\demo (master -> origin)
λ git ls-files -s
100644 d37be9ba5c2dc1491460e7ce7d0bfdc1c4de6613 0       deploy.sh

这样的话,咱们在Linux就不能直接执行这个deploy.sh的文件(固然咱们能够在Linux强制修改文件的权限,但会致使后续的代码更新出错). 这时咱们能够用git update-index --chmod=+x YOUR_FILE的命令,来修改文件的权限bash

D:\workspace\blog\demo (master -> origin)
λ git update-index --chmod=+x deploy.sh

D:\workspace\blog\demo (master -> origin)
λ git ls-files -s
100755 d37be9ba5c2dc1491460e7ce7d0bfdc1c4de6613 0       deploy.sh

D:\workspace\blog\demo (master -> origin)

这时你们就能够提交代码了,Linux环境下就能够执行这个deploy.sh文件了ui

Windows系统下文件名大小写重命名

若是你们的开发环境时Windows,而实际部署的环境时Linux的话,就有可能会遇到这个问题:spa

你一开始给某个文件夹起名为 demofolder,里面有个文件 httpUtil.js提供get的方法。 过几天你们一块儿codereview的时候,这个名字被你们吐槽要用驼峰,因此你回来以后就想着给这个名字重命名为 demoFolder, 中间的==F==变大写。 因而你就在Windows的目录中,把文件夹名字更名为 demoFolder, 而后就准备提交代码。 结果发现 git status没有任何代码变动,commit不了!

这是怎么回事呢?code

这是由于GIT默认忽略大小写,git config core.ignorecase 这个值默认为trueblog

D:\workspace\blog\gitdou (master -> origin) (gitdou@0.1.0)
λ git config core.ignorecase
true

咱们能够简单地经过git config core.ignorecase false命令把忽略大小写关掉。可是二牛不建议这样作,尤为是在Windows环境下,容易遇到合并分支时因为大小写问题而出现冲突。 建议采用重命名的方式来实现更名。 开发

GIT有个mv的命令来实现文件的重命名. 好比把demofolder改为demoFolder1, 咱们能够用git mv demoFolder demoFolder1来实现。可是不能只是改成大小写部署

D:\workspace\build_your_own_x\gitdou (master -> origin) (gitdou@0.1.0)
λ git mv demoFolder demofolder
Rename from 'demoFolder' to 'demofolder/demoFolder' failed. Should I try again? (y/n) n

缘由前面已经说了,GIT默认是忽略大小写的。因此咱们能够来个曲线救国,先rename成其它名字,再改回来就能够了

D:\workspace\build_your_own_x\gitdou (master -> origin) (gitdou@0.1.0)
λ dir
 Volume in drive D is DATA
 Volume Serial Number is 086F-F062

 Directory of D:\workspace\build_your_own_x\gitdou

01/10/2019  05:34 PM    <DIR>          .
01/10/2019  05:34 PM    <DIR>          ..
06/28/2018  04:41 PM                66 .gitattributes
07/18/2018  08:20 AM               935 .gitignore
01/10/2019  03:25 PM    <DIR>          demofolder
06/28/2018  04:41 PM             1,070 LICENSE
06/29/2018  09:19 AM    <DIR>          node_modules
06/29/2018  10:04 AM               561 package.json
06/28/2018  04:57 PM               102 README.md
01/10/2019  03:29 PM    <DIR>          src
06/29/2018  10:03 AM    <DIR>          test
               5 File(s)          2,734 bytes
               6 Dir(s)  12,081,958,912 bytes free

D:\workspace\build_your_own_x\gitdou (master -> origin) (gitdou@0.1.0)
λ git mv demofolder demoFolder1

D:\workspace\build_your_own_x\gitdou (master -> origin) (gitdou@0.1.0)
λ git mv demoFolder1 demoFolder

D:\workspace\build_your_own_x\gitdou (master -> origin) (gitdou@0.1.0)
λ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        renamed:    demofolder/httpUtil.js -> demoFolder/httpUtil.js

以上就是关于GIT文件操做的两个问题以及对应的解决方案,但愿能在你须要的时候提供一点思路!

相关文章
相关标签/搜索