大家平時在使用GIT的時候,尤其是在Windows平臺的時候,一般都不會特別留意跟文件相關的一些問題,比如說 文件權限,大小寫問題。
這篇文章將給大家介紹在GIT使用中,關於文件處理的兩個問題
文件權限
正常情況下,我們都不用太在乎,甚至不用理會GIT裏面文件的權限是否可讀,可寫,可執行。但如果我們加進GIT的文件是一個可執行的文件,比如一個方便快捷部署的文件deploy.sh
. 那麼如果沒有可執行權限的話,在Linux系統下面是無法執行的。
當我們新建一個deploy.sh
文件,加到GIT裏面,我們通過git ls-files -s
可以看到文件是權限是644
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
的命令,來修改文件的權限
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
文件了
Windows系統下文件名大小寫重命名
如果大家的開發環境時Windows,而實際部署的環境時Linux的話,就有可能會遇到這個問題:
你一開始給某個文件夾起名爲demofolder
,裏面有個文件httpUtil.js
提供get的方法。 過幾天大家一起codereview的時候,這個名字被大家吐槽要用駝峯,所以你回來之後就想着給這個名字重命名爲demoFolder
, 中間的==F==變大寫。 於是你就在Windows的目錄中,把文件夾名字改名爲demoFolder
, 然後就準備提交代碼。 結果發現git status
沒有任何代碼變更,commit不了!
這是怎麼回事呢?
這是因爲GIT默認忽略大小寫,git config core.ignorecase
這個值默認爲true
D:\workspace\blog\gitdou (master -> origin) ([email protected])
λ 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) ([email protected])
λ 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) ([email protected])
λ 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) ([email protected])
λ git mv demofolder demoFolder1
D:\workspace\build_your_own_x\gitdou (master -> origin) ([email protected])
λ git mv demoFolder1 demoFolder
D:\workspace\build_your_own_x\gitdou (master -> origin) ([email protected])
λ 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文件操作的兩個問題以及對應的解決方案,希望能在你需要的時候提供一點思路!