git init 與 git init –bare 的區別

git init 和 git init –bare 的區別

使用命令”git init –bare”(bare漢語意思是:裸,裸的)初始化的版本庫(暫且稱爲bare repository)只會生成一類文件:用於記錄版本庫歷史記錄的.git目錄下面的文件;而不會包含實際項目源文件的拷貝;所以該版本庫不能稱爲工作目錄(working tree);如果你進入版本目錄,就會發現只有.git目錄下的文件,而沒有其它文件;就是說,這個版本庫裏面的文件都是.git目錄下面的文件,把原本在.git目錄裏面的文件放在版本庫的根目錄下面;換句話說,不使用–bare選項時,就會生成.git目錄以及其下的版本歷史記錄文件,這些版本歷史記錄文件就存放在.git目錄下;而使用–bare選項時,不再生成.git目錄,而是隻生成.git目錄下面的版本歷史記錄文件,這些版本歷史記錄文件也不再存放在.git目錄下面,而是直接存放在版本庫的根目錄下面

用”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倉庫的原因。

轉自:http://blog.csdn.net/feizxiang3/article/details/8065506

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章