通常如果一个仓库作为远程仓库使用的时候,我们初始化的时候通常是git init --bare,首先解释一下这个bare,它翻译成汉语即"裸的",他之会生成一类文件,用于记录版本库历史记录的.git目录下面的文件,而不会包含实际项目源文件的拷贝,因此该版本库不能称为工作目录(working tree)。
当不使用--bare选项时,就会生成.git目录以及其下的版本历史记录文件,这些版本记录文件就存放在.git目录下,而使用--bare选项时,就不再生成.git目录,而只是生成.git目录下面的版本历史记录文件,这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面。
使用git init初始化的版本库用户也可以在该目录下执行所有git方面的操作,但是别的用户在将更新push上来的时候容易出现冲突。如果远端仓库正在使用某个分支,而我们又要把更新提交到这个分支上,就可能会出错。当然,如果我们是向远程仓库中的空闲分支上提交,还是不会有问题的。
我们通常的解决办法就是使用git init --bare来创建一个裸仓库,之所以叫做裸仓库是因为这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作,如果我们进行其他操作的话,会得到诸如This operation must be run in a work tree。
原文地址:http://blog.csdn.net/xinguimeng/article/details/45515545