作者:Mintimate
Mintimate's Blog,只为与你分享
我们搭建好一个Git服务器后,在初始化仓库,往往使用git init
或git init --bare
来初始化项目。但是,这两个的区别是什么呢?
通常,我们初始化本地仓库时,使用git init
:建立一个标准的Git仓库。
这样的仓库初始化后,其项目目录为工作空间,其下的.git
目录是版本控制器。
cd .git
ls -a
通常,我们初始化远程服务器仓库时,使用git init --bare
:建立一个“裸”的Git仓库。
这样的仓库初始化后,其项目目录下就是标准仓库.git
目录里的内容,没有工作空间。
这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作(如:push
、commit
操作)。但是,你依旧可以使用git show
命令查看提交内容:
相信看完上述描述,大家已经知道什么时候使用Git init
,什么时候又使用Git init --bare
了:
工作空间
的代码和文件。只适合git init --bare
适用于远程仓库;一方面,使用Git方便备份本地项目,另外一方面,没有工作空间,只提供版本管理的Git,更方便团队协作。但是,如果你远程初始化的“裸”仓库,之后想看默认分支的工作空间具体项目文件怎么办?
很简单,配合git工具下的hook
“裸”仓库创建工作空间很简单,配合hook即可。
Git 能在特定的重要动作发生时触发自定义脚本。 有两组这样的钩子:客户端的
和服务器端的
。 客户端钩子由诸如提交和合并这样的操作所调用,而服务器端钩子作用于诸如接收被推送的提交这样的联网操作。
简单地说,hook就是一些在Git特点动作时候,触发的事件。
具体可以查看:Git官方中文文档
我们要在裸仓库内,看到用户提交的工作空间很简单。只需要编写post-receive
hook即可:
# 当前在裸仓库内
cd hooks
# 创建并编辑post-receive
vim post-receive
输入内容:
#!/bin/sh
git --work-tree=#工作空间# --git-dir=#Git仓库地址# checkout -f
比如:
其中:
之后,进行提取(赋予执行权限):
chmod +x post-receive
之后,用户push
提交后,在外面定义的工作空间就可以看到用户提交的具体内容:
git init
使用于本地进行项目部署和搭建,git init --bare
使用于服务器上,多版本协同管理。你可以使用hook来对服务器上内容进行进一步完善。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。