初始化仓库git init和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
    └── tags

9 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。

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在本地电脑上安装和配置git服务器,首先需要准备一台运行常见操作系统的服务器。下面是按照步骤进行的简单教程: 1. 安装git:在服务器上打开终端或命令提示符工具,运行适用于服务器操作系统的包管理器命令。例如,对于Ubuntu,运行`sudo apt-get install git`命令即可安装git。 2. 创建git用户:在服务器上创建一个专门用于git的用户,以提高安全性和管理性。运行`sudo adduser git`命令来创建用户,并根据提示输入必要的信息。 3. 创建git仓库:登录为git用户,进入想要存储仓库的目录(在这个例子中,我们使用/home/git目录)并创建一个新仓库。例如,运行`mkdir /home/git/myrepo.git`命令创建名为myrepo.git仓库。 4. 初始化仓库:在myrepo.git目录内运行`git init --bare`命令来初始化一个空的git仓库。 5. 配置SSH访问:为了保护git服务器的安全性,只允许使用SSH协议进行访问。运行`sudo nano /home/git/.ssh/authorized_keys`命令来编辑git用户的authorized_keys文件,将需要访问git仓库的SSH公钥添加到该文件中保存。 6. 配置用户访问权限:可以为每个用户或组配置git仓库的访问权限。运行`sudo nano /home/git/myrepo.git/config`命令,编辑git仓库的配置文件,设置需要的权限。 7. 配置其他选项:根据需要,可以在git仓库的config文件中进行其他配置,如设置仓库全局配置、勾子、提交模板等。 8. 启动git服务器:在终端或命令提示符工具中运行`git daemon --reuseaddr --base-path=/home/git/ /home/git/`命令启动git服务器,并开始监听在9418端口上的请求。 通过按照以上步骤,您就可以成功安装和配置一个git服务器了。这个服务器可以用来存储和管理您的git仓库,允许团队成员进行代码协作和版本控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值