git init 与git init --bare

对于git 仓库的初始化操作,有人说用git init ,有人说用git init –bare ,那么我就来说一下这两者的区别吧。
git init 跟git init –bare 看上去就是后面有无–bare的区别,bare是裸的意思
1.git init 是初始化一个git仓库,比如新建一个demo1文件夹将它git初始化,

cd demo1
git init
ls -a

发现多了一个.git文件,

cd .git
ls

可以看到里面有很多git的配置文件,而我们推送的文件都会在demo1文件目录下显示,.git文件目录是记录我们进行了哪些操作,我们也可以在demo1下面进行各种git操作,然而我们本地推送的更新,一般不会马上显示在服务端,需要我们手动检出,或者配置一下hooks,具体可以查看我的上一篇博客。
git init初始化仓库无法即时检出更新的问题

2.git init –bare是初始化一个裸仓库,比如新建一个demo2文件夹,

cd demo2
git init --bare
ls

就会发现这些生成的文件其实就是.git文件目录下的那些文件,但是当我们想在这个文件目录下进行一些git操作的时候会出现报错: This operation must be run in a work tree。这个操作必须在工作树上面进行,这是因为git init –bare 生成的是一个裸仓库,是没有工作区的,只会记录git提交的历史信息,git log一下是可以看到各个版本信息的,但是没办法进行版本回退或者切换分支的操作,但是有一个好处是可以通过添加hooks钩子在demo2的同级目录下新建一个存放项目源码的文件夹,也就是说将git仓库与项目源码分离,这样推送的更新会马上显示到项目文件上,具体设置方法可以查看这篇博客
git仓库与项目源码分离

这两者的取舍我觉得还是具体情况具体分析吧,各有优劣。

你可能感兴趣的:(git)