Lite Git (II) - Initialize

Lite Git (II) - Initialize

前言

本专栏名为Lite Git。主要想与Pro Git对应,后者为Git官方指南,有兴趣,或者想了解更多细节的同学,请移步官网下载PDF版

本专栏主要为了让初出茅庐的同学更快、更合理地掌握Git的基本运用;

同时,本专栏也会介绍一下作为Android开发人员关心的:repo的运用;

本篇是该专栏的第二篇,主要介绍Git的仓储创建,已经了解的可以跳过此篇;

何为git仓库 (git repository)

顾名思义,由git管理的一个目录,可以称之为一个git仓库;

git仓库的创建

git仓库可以通过如下方式创建:

git init

任何一个git仓库都是可以既为服务端,又为客户端的,这也是git所标榜的分布式的一种表现;

具体来说,git init命令常用使用方法有如下几种:

  1. 将一个现有目录转化为一个git仓库:
    #将当前目录转化为一个git仓库;
    git init
    
  2. 创建一个新的裸仓库:
    #创建一个名为demo的git裸仓库;
    git init --bare demo
    
  3. 创建一个新的空仓库:
    #创建一个名为demo的git仓库;
    git init demo
    

关于裸仓库与常规仓库的区别,这里用一个实例来解答:

#创建一个名为demo_normal的常规git仓库
ryan ~/git_demo $ git init demo_normal
Initialized empty Git repository in /home/ryan/git_demo/demo_normal/.git/
#创建一个名为demo_bare的git裸仓库
ryan ~/git_demo $ git init --bare demo_bare
Initialized empty Git repository in /home/ryan/git_demo/demo_bare/
#查看demo_normal这个仓库的目录结构
ryan ~/git_demo $ ll demo_normal/
total 12
drwxr-xr-x 3 ryan ryan 4096 Oct 26 16:23 ./
drwxr-xr-x 4 ryan ryan 4096 Oct 26 16:23 ../
drwxr-xr-x 7 ryan ryan 4096 Oct 26 16:23 .git/

#查看demo_normal这个仓库内的.git目录结构
ryan ~/git_demo $ ll demo_normal/.git/
total 40
drwxr-xr-x 7 ryan ryan 4096 Oct 26 16:23 ./
drwxr-xr-x 3 ryan ryan 4096 Oct 26 16:23 ../
-rw-r--r-- 1 ryan ryan   23 Oct 26 16:23 HEAD
drwxr-xr-x 2 ryan ryan 4096 Oct 26 16:23 branches/
-rw-r--r-- 1 ryan ryan   92 Oct 26 16:23 config
-rw-r--r-- 1 ryan ryan   73 Oct 26 16:23 description
drwxr-xr-x 2 ryan ryan 4096 Oct 26 16:23 hooks/
drwxr-xr-x 2 ryan ryan 4096 Oct 26 16:23 info/
drwxr-xr-x 4 ryan ryan 4096 Oct 26 16:23 objects/
drwxr-xr-x 4 ryan ryan 4096 Oct 26 16:23 refs/

#查看demo_bare这个仓库的目录结构
ryan ~/git_demo $ ll demo_bare/
total 40
drwxr-xr-x 7 ryan ryan 4096 Oct 26 16:23 ./
drwxr-xr-x 4 ryan ryan 4096 Oct 26 16:23 ../
-rw-r--r-- 1 ryan ryan   23 Oct 26 16:23 HEAD
drwxr-xr-x 2 ryan ryan 4096 Oct 26 16:23 branches/
-rw-r--r-- 1 ryan ryan   66 Oct 26 16:23 config
-rw-r--r-- 1 ryan ryan   73 Oct 26 16:23 description
drwxr-xr-x 2 ryan ryan 4096 Oct 26 16:23 hooks/
drwxr-xr-x 2 ryan ryan 4096 Oct 26 16:23 info/
drwxr-xr-x 4 ryan ryan 4096 Oct 26 16:23 objects/
drwxr-xr-x 4 ryan ryan 4096 Oct 26 16:23 refs/

可见:

  • 常规仓库的git仓库信息会保存在一个名为.git的子目录中;
  • 裸仓库则直接将git仓库信息保存在仓库根目录下;

此外补充一下裸仓库的信息:

裸仓库主要是用于服务端保存,这种保存方式由于根目录用于保存git仓库信息,因此没有工作区的概念,git追踪的文件也无法checkout出来。
得益于此,裸仓库占用的磁盘空间会比常规仓库少,同时不会出现本地工作区所处分支与git仓库分支不对应的情况;

git仓库的克隆

以上方创建的demo_bare裸库为例。假设这个仓库为服务端的版本,那么如果我们想基于此仓库进行开发,则需要将其克隆至本地:

#本地克隆,可直接指定仓库路径,此例则为将~/git_demo/demo_bare这个仓库克隆到当前目录下,命名为demo_client
git clone ~/git_demo/demo_bare demo_client
#http克隆(需要http服务器)
git clone https://172.0.0.1/git_demo/demo_bare demo_client
#ssh克隆(需要ssh通畅)
git clone ryan@172.0.0.1:~/git_demo/demo_bare demo_client

同理,如果希望克隆一个仓库作为二级镜像,git clone命令也支持克隆为裸仓库:

git clone ~/git_demo/demo_bare demo_client --bare

git仓库间的关联

以上方克隆的名为demo_client的裸仓库为例,我们通过查看其根目录下的config文件确认其与demo_bare的关系:

ryan ~/git_demo $ cat demo_client/config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = true
[remote "origin"]
        url = /home/ryan/git_demo/demo_bare

可以看见,我们的git clone的行为实际上通过[remote "origin"]这样一个字段记录下来了,其中的url实际上就是demo_bare仓库所在位置;

下图可以表示demo_clientdemo_bare的关系,注意箭头是单向的,表示demo_client知道demo_bare的存在,并将其设定为同步进度的上游,但demo_bare并不知道demo_client的存在(也不需要知道),也不关心有多少仓库将自己设定为上游了,只要安全校验通过,就可以从demo_client同步进度;
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值