初始化仓库git init和git init --bare的区别和使用场景
文章目录
- 初始化仓库git init和git init --bare的区别
- git init --bare 使用场景
初始化仓库git init和git init --bare的区别
我们搭建好一个Git服务器后,在初始化仓库,往往使用git init
或git init --bare
来初始化项目。但是,这两个的区别是什么呢?
- git init: 建立一个标准的git仓库
建立一个标准的Git仓库,这样的仓库初始化后,其项目目录为工作空间,其下的.git目录是版本控制器。可以正常的进行源文件的编写,提交等各种git常规操作。
通常我们会用 git init 命令来将我们所在的目录转换为一个 Git 本地仓库或者初始化一个新的空仓库。git init
命令执行后会在本地生成一个 .git 的文件夹,用来追踪仓库的所有变更。
- git init --bare: 指定某个目录成为中心仓库(裸仓库)
通常,我们初始化远程服务器仓库时,使用git init --bare <repo>
:建立一个“裸”的gt仓库。这样的仓库初始化后,其项目目录下就是标准仓库.git目录里的内容,没有工作空间。
这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作(如:push、commit操作)。但是,你依旧可以使用git show命令查看提交内容。
git init --bare 初始化的目录等同于一个.git目录的内容。这样就比较好理解git的本质:本地仓库的.git和服务器仓库。它们是一回事情。
git init --bare 使用场景
如何设置一个远程共享库并进行团队协作
参考URL: https://thelucid.com/2008/12/02/git-setting-up-a-remote-repository-and-doing-an-initial-push/
git裸仓库到底是怎么样的——实践出真知
参考URL: https://blog.csdn.net/q221520amlls/article/details/119325744
在本文中我将:
使用“普通库”代指用"git init"命令创建的git库;
使用“裸库”代指用"git init --bare"命令创建的git库;
裸仓库适用于远程仓库,裸仓库可以直接作为服务器仓库供各开发者push、pull数据,实现数据共享和同步,不保存文件,只保存历史提交的版本信息。
一般来说,一个裸库往往被创建用于作为大家一起工作的共享库,每一个人都可以往里面push自己的本地修改。裸仓库一个惯用的命名方式是在库名后加上.git。
裸仓库的目录名一般以.git 结尾,这也是为什么我们从 GitHub clone 仓库的时候,地址都是 xxx.git 这样的形式的原因。
举个例子:初始化裸仓库,用于做为git服务端共享仓库
1) 初始化裸仓库
git init --bare <repo>
这个命令执行后,将在本地创建一个名为 repo 的文件夹, 里面包含着 Git 的基本目录, 我们一般会将这个文件夹命名为后面加 .git 的形式,如 repo.git (这也是为什么我们从 GitHub clone 仓库的时候,地址都是 xxx.git 这样的形式的原因)。效果如下
root@sheservice:~# git init --bare repo.git
Initialized empty Git repository in /root/repo.git/
root@sheservice:~# cd repo.git/
root@sheservice:~# tree -a repo.git
repo.git
├── branches
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── fsmonitor-watchman.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── pre-merge-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ ├── pre-receive.sample
│ └── update.sample
├── info
│ └── exclude
├── objects
│ ├── info
│ └── pack
└── refs├── heads└── tags9 directories, 16 files
root@sheservice:~#
裸仓库, 并不包含 工作区 , 也就是说,我们并不能在这个目录下执行我们一般使用的 Git 命令。
除了 初始化一个空的裸仓库,还有一个思路就是把现有仓库导出为裸仓库 — 即一个不包含当前工作目录的仓库。做法直截了当,克隆时用 --bare 选项即可。
git clone --bare my_project my_project.git
现在 my_project.git 目录中已经有了一份 Git 目录数据的副本。
2)把裸仓库移到服务器上
有了裸仓库的副本后,剩下的就是把它放到服务器上并设定相关协议。假设一个域名为 git.example.com 的服务器已经架设好,并可以通过 SSH 访问,我们打算把所有 Git 仓库储存在/opt/git 目录下。只要把裸仓库复制过去
$ scp -r my_project.git user@git.example.com:/opt/git
现在,所有对该服务器有 SSH 访问权限,并可读取 /opt/git 目录的用户都可以用下面的命令克隆该项目:
$ git clone user@git.example.com:/opt/git/my_project.git
如果某个 SSH 用户对 /opt/git/my_project.git 目录有写权限,那他就有推送权限。如果到该项目目录中运行 git init 命令,并加上 --shared 选项,那么 Git 会自动修改该仓库目录的组权限为可写(译注:实际上 --shared 可以指定其他行为,只是默认为将组权限改为可写并执行 g+sx,所以最后会得到 rws。)。
$ ssh user@git.example.com
$ cd /opt/git/my_project.git
$ git init --bare --shared
由此可见,根据现有的 Git 仓库创建一个裸仓库,然后把它放上你和同事都有 SSH 访问权的服务器是多么容易。现在已经可以开始在同一项目上密切合作了。
总结:
git init使用于本地进行项目部署和搭建,git init --bare使用于服务器上,多版本协同管理。
一般来讲,作为远端备份或公共版本库时,应该使用git init --bare。你要是想建立一个固定的地址让大家一起用,就在服务器上用–bare。
初始化仓库git init和git init --bare的区别和使用场景相关推荐
- linux suse git,SUSE 搭建GIT服务
1.安装git 1.1在suse软件库中安装git zypper install git 不同系统的Linux安装软件包的命令不同,suse中是使用zypper. 1.2检查git是否安装成功 # g ...
- git init 与 git init --bare 区别
git init 与 git init --bare 区别 发现问题 最早是在公司的wiki上发现了这个命令,google后发现值得记录下来 实践中发现的区别 网上找了很多资料,但说的很乱,干脆在自己 ...
- git init和git clone获取仓库 (一)
文章目录 使用git init和git clone获取git仓库 1 git init 在本地目录上创建Git仓库 2 git clone 从已有的Git存储数据库中克隆仓库到本地目录 3 导航页 使 ...
- Git(5)-- 获取 Git 仓库(git init 和 git clone命令)
文章目录 一.在已存在目录中初始化仓库 1.进入文件夹: 方法一:鼠标右键`-->`Git Bash Here 方法二:右键要管理的文件夹`-->`Git Bash Here 2.执行`g ...
- GIT项目管理工具(part3)--初始化仓库及查看仓库状况
本系列BLOG为鄙人学习GIT时的学习笔记.前一个知识点引出后一个知识点,后一个例子接着前一个例子. 文章目录 基本命令 1.初始化仓库 举个例子 2.查看本地仓库状态 举个例子0(这个例子有11个后 ...
- git init、git status、git config user.name、git add、git commit、git remote、git push、git clone、git pull
1. Git本地仓库初始化 1.1 git init 功能 git init:初始化一个新本地仓库,它会在工作目录下生成一个.git的隐藏文件夹来管理仓库,千万不要删掉它. 1.2 git statu ...
- git学习 add - commit - init
资料来自 B站尚硅谷BV1pW411A7a5,侵权删 希望有一点点linux基础. 代码托管中心: 码云 github 团队协作 跨团队协作 本地库初始化 git init 效果 设置签名 1.项目级 ...
- GitHub入门与实践(四)——Git的基本操作从初始化仓库到确认提交是否成功
一.git init --初始化仓库 在本地建立一个目录,并初始化为仓库 $mkdir git-tutorial //在本地建立名为 git-tutorial 的目录 $cd git-tutoria ...
- Git系列:如何创建和初始化仓库,添加更新修改
目录 •写在前面 •创建仓库 •添加文件 •下一步 对Git有了一个大致基本的认识之后,就可以开始使用Git创建我们项目的版本库了,这一篇文章就是简洁明了的介绍创建Git项目仓库的大致过程,包括其中用 ...
最新文章
- 使用 Global.asax 文件
- 程序员,技术的“背锅侠”,盘点 2020 年面向监狱编程的那些事!
- 单寄存器加载与存储指令
- FreeMarker手册pdf
- STL 源代码剖析 算法 stl_algo.h -- equal_range
- 提升Python程序性能的7个习惯
- java掠夺_Editing Java版指南/村庄与掠夺 (section)
- idea自动导包_IDEA已经世界第一了,听说你还不会?
- CentOS安装postgresql9.1
- python窗口截图快捷键_windows下实现快捷键截图小工具
- 反编译工具的安装与使用(解决部分能反编译部分不能反编译)
- excel的简单操作
- Python交流QQ群
- DSP 性能 GMAC 和 GFLOP含义
- 【产品】产品设计:美工线的设计
- 熊猫分发_与熊猫度假
- CCC之I类设备、II类设备、III类设备的对比
- chai断言库学习3-Core Plugin Concepts
- android横向卡片式布局,创建卡片式布局 | Android 开发者 | Android Developers
- oracle 数据库存储过程编译报错PLS-00103出现符号 end-of-file在需要下列之一时