天天看點

git init 與git init --bare

1 git init 和 git init –bare 的差別

用"git init"初始化的版本庫使用者也可以在該目錄下執行所有git方面的操作。但别的使用者在将更新push上來的時候容易出現沖突。

比如有使用者在該目錄(就稱為遠端倉庫)下執行git操作,且有兩個分支(master 和 b1),目前在master分支下。另一個使用者想把自己在本地倉庫(就稱為本地倉庫)的master分支的更新送出到遠端倉庫的master分支,他就想當然的敲了

git push origin master:master

于是乎出現

因為遠端倉庫的使用者正在master的分支上操作,而你又要把更新送出到這個master分支上,當然就出錯了。

但如果是往遠端倉庫中空閑的分支上送出還是可以的,比如

git push origin master:b1 還是可以成功的

解決辦法就是使用”git init –bare”方法建立一個所謂的裸倉庫,之是以叫裸倉庫是因為這個倉庫隻儲存git曆史送出的版本資訊,而不允許使用者在上面進行各種git操作,如果你硬要操作的話,隻會得到下面的錯誤(”This operation must be run in a work tree”)

這個就是最好把遠端倉庫初始化成bare倉庫的原因。