我們有時候在多平臺開發代碼或者批量修改了文件夾的權限時,使用git status
命令你很有可能會看到一大片的文件變更記錄。其實不用擔心,這些只是權限變更的文件也會被顯示出來而已。如果你的工程目錄不用考慮文件的權限,那麼我們可以關閉這個特性:
git config core.filemode false
今天我們介紹下git常用的一些配置參數。
git配置文件
當我們初始化或者clone
一個git
倉庫的時候,會自動生成.git
的目錄,默認隱藏,但我們依然可以查看其文件,其中有一個config
的文件是基礎的配置文件:
$ cat .git/config
[core]
# 用於未來能夠兼容git版本,決定怎麼處理git命令和文件的
repositoryformatversion = 0
# 是否提供文件權限的diff
filemode = true
# 決定當前倉庫是中心倉庫還是開發庫
bare = false
# 記錄所有的ref更新:決定變更ref時,會不會被記錄在`$GIT_DIR/logs/<ref>`目錄下
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = ssh://[email protected]:8235/reposity
[branch "master"]
remote = origin
merge = refs/heads/master
repositoryformatversion
倉庫版本
現在發佈的版本號都是0
,但這個屬性是爲了未來的兼容性,當開發者認爲有新的特性需要加入的時候,可以將這個版本號改爲1
,此時,新的Git
版本可以正確執行功能,而老的版本會出現報錯:
"Expected git repo version <= 0, found 1. Please upgrade Git"
filemode
文件權限
# diff時考慮文件權限爲true,不考慮爲false
core.filemode = true | false
我們通過這個參數來決定是否會diff
文件的權限,如果是源代碼,可以關閉這個選項,如果是腳本、二進制程序等需要權限認證之類的還是要開啓該參數的:
git config core.filemode false
更改完成後再cat
下.git/config
就會發現該參數變了。
bare
裸倉庫
我們可以使用git init
來將我們的目錄轉換爲一個Git
本地倉庫或者初始化爲一個新倉庫。在初始化的時候我們可以加上--bare
參數來決定是否創建一個裸倉庫。
裸倉庫一般指的是遠端的中心倉庫,可以被clone
和push
更新,但不包含工作區,因此不能執行常規的git
命令,也不能進行直接的提交和變更。而普通倉庫卻正好相反,用於我們常規協作開發時的修改和提交。
# 裸倉庫爲true,普通倉庫爲false
core.bare = true | false
logallrefupdates
記錄引用更新
core.logallupdates = true | false | always
當值爲true
時,會將所有引用(ref)
的更新記錄到$GIT_DIR/logs/<ref>
中,包括更新的編號、日期和原因等內容。<ref>
的值根據分支的不同爲refs/heads/
或 refs/remotes/
等。
當值爲always
時,<ref>
的值爲refs/reflog
。
當倉庫爲裸倉庫時,值爲false
。
總結
我們可以通過文檔來了解所有的參數,這裏我們只需要瞭解bare
和filemode
兩個即可,同時filemode
可以通過命令來修改。
參考資料
- https://stackoverflow.com/que...
- git tips: 設置filemode:https://www.jianshu.com/p/3b0...
- Git 本地倉庫和裸倉庫:https://segmentfault.com/a/11...
- Git文檔:https://git-scm.com/docs/git-...