文章目录

  • 初始化仓库git init和git init --bare的区别
  • git init --bare 使用场景

初始化仓库git init和git init --bare的区别

我们搭建好一个Git服务器后,在初始化仓库,往往使用git initgit 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的区别和使用场景相关推荐

  1. linux suse git,SUSE 搭建GIT服务

    1.安装git 1.1在suse软件库中安装git zypper install git 不同系统的Linux安装软件包的命令不同,suse中是使用zypper. 1.2检查git是否安装成功 # g ...

  2. git init 与 git init --bare 区别

    git init 与 git init --bare 区别 发现问题 最早是在公司的wiki上发现了这个命令,google后发现值得记录下来 实践中发现的区别 网上找了很多资料,但说的很乱,干脆在自己 ...

  3. git init和git clone获取仓库 (一)

    文章目录 使用git init和git clone获取git仓库 1 git init 在本地目录上创建Git仓库 2 git clone 从已有的Git存储数据库中克隆仓库到本地目录 3 导航页 使 ...

  4. Git(5)-- 获取 Git 仓库(git init 和 git clone命令)

    文章目录 一.在已存在目录中初始化仓库 1.进入文件夹: 方法一:鼠标右键`-->`Git Bash Here 方法二:右键要管理的文件夹`-->`Git Bash Here 2.执行`g ...

  5. GIT项目管理工具(part3)--初始化仓库及查看仓库状况

    本系列BLOG为鄙人学习GIT时的学习笔记.前一个知识点引出后一个知识点,后一个例子接着前一个例子. 文章目录 基本命令 1.初始化仓库 举个例子 2.查看本地仓库状态 举个例子0(这个例子有11个后 ...

  6. 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 ...

  7. git学习 add - commit - init

    资料来自 B站尚硅谷BV1pW411A7a5,侵权删 希望有一点点linux基础. 代码托管中心: 码云 github 团队协作 跨团队协作 本地库初始化 git init 效果 设置签名 1.项目级 ...

  8. GitHub入门与实践(四)——Git的基本操作从初始化仓库到确认提交是否成功

    一.git init --初始化仓库 在本地建立一个目录,并初始化为仓库 $mkdir git-tutorial  //在本地建立名为 git-tutorial 的目录 $cd git-tutoria ...

  9. Git系列:如何创建和初始化仓库,添加更新修改

    目录 •写在前面 •创建仓库 •添加文件 •下一步 对Git有了一个大致基本的认识之后,就可以开始使用Git创建我们项目的版本库了,这一篇文章就是简洁明了的介绍创建Git项目仓库的大致过程,包括其中用 ...

最新文章

  1. 使用 Global.asax 文件
  2. 程序员,技术的“背锅侠”,盘点 2020 年面向监狱编程的那些事!
  3. 单寄存器加载与存储指令
  4. FreeMarker手册pdf
  5. STL 源代码剖析 算法 stl_algo.h -- equal_range
  6. 提升Python程序性能的7个习惯
  7. java掠夺_Editing Java版指南/村庄与掠夺 (section)
  8. idea自动导包_IDEA已经世界第一了,听说你还不会?
  9. CentOS安装postgresql9.1
  10. python窗口截图快捷键_windows下实现快捷键截图小工具
  11. 反编译工具的安装与使用(解决部分能反编译部分不能反编译)
  12. excel的简单操作
  13. Python交流QQ群
  14. DSP 性能 GMAC 和 GFLOP含义
  15. 【产品】产品设计:美工线的设计
  16. 熊猫分发_与熊猫度假
  17. CCC之I类设备、II类设备、III类设备的对比
  18. chai断言库学习3-Core Plugin Concepts
  19. android横向卡片式布局,创建卡片式布局  |  Android 开发者  |  Android Developers
  20. oracle 数据库存储过程编译报错PLS-00103出现符号 end-of-file在需要下列之一时

热门文章

  1. scratch猫捉老鼠 电子学会图形化scratch编程等级考试一级真题编程题答案2019-8
  2. 求大神带我研究MX模式邮件发送
  3. hdu 4539 郑厂长系列故事——排兵布阵
  4. AcWing 248. 窗内的星星
  5. mpeg2是信源还是信道编码_论信源编码与信道编码
  6. Laravel注意事项
  7. Hinge Loss简介
  8. spark dataframe的select和selectexpr的区别
  9. d3.js放射线条生成器lineRadial
  10. 【2022年全新版】TeXLive 和 WinEdt / TeXstudio 的安装配置(详细)