问: “git init” 与 “git init –bare” 的区别是什么呢?

在本文中我将

使用“普通库”代指用”git init”命令创建的GIT库;

使用“裸库”代指用”git init –bare”命令创建的GIT库;

当你创建一个普通库时,在工作目录下,除了.git目录之外,你还可以看到库中所包含的所有源文件。你拥有了一个可以进行浏览和修改(add, commit, delete等)的本地库。
当你创建一个裸库时,在工作目录下,只有一个.git目录,而没有类似于本地库那样的文件结构可供你直接进行浏览和修改。但是你仍旧可以用git show命令来进行浏览,举个例子(参数为某个commit的SHA1值):

# git show 921dc435a3acd46e48e3d1e54880da62dac18fe0

一般来说,一个裸库往往被创建用于作为大家一起工作的共享库,每一个人都可以往里面push自己的本地修改。一个惯用的命名方式是在库名后加上.git,举个例子:

# mkdir example.git
# cd example.git
# git init --bare .

这样你便拥有了一个叫做example的共享库。在你自己的本地机器上,你可以用git remote add命令做初始化check-in:

// assume there’re some initial files you want to push to the bare repo you just created,
// which are placed under example directory
# cd example
# git init
# git add *
# git commit -m "My initial commit message"
# git remote add origin [email protected]:example.git
# git push -u origin master

项目团队里面的每个人都可以clone这个库,然后完成本地修改之后,往这个库中push自己的代码。

# git clone [email protected]:example.git
# cd example


用“git init –bare”初始化的版本库(bare repository)仅包含”.git”目录(记录版本历史),不含项目源文件拷贝。如果你进入版本目录,你会发现仅有”.git”目录,没有其他文件。版本库仅包含记录着版本历史的文件。


从使用方面看:
git init 用于本地代码库,跟文件夹下包括所有的源代码,git版本控制相关的文件在.git目录下;
git init --bare 意思是建一个裸库,执行命令后,跟目录下只包括git版本控制相关的文件等,相对于上面.git文件夹下的所有文件。跟目录是不包括项目源代码的。
一般来讲,作为远端备份或公共版本库时,应该使用git init --bare

最后更新: 2018年11月09日 15:11

原始链接: http://cwiwi.com/2018/11/08/git-init-git-init-bare-diff/