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文件操做的兩個問題以及對應的解決方案,但願能在你須要的時候提供一點思路!

相關文章
相關標籤/搜索