文章目录

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

使用git init和git clone获取git仓库

通常获取git仓库有两种方式:

  1. 将本地未进行版本控制的本地目录转换为Git仓库;
  2. 从其他服务器上克隆一个已存在的Git仓库;

1 git init 在本地目录上创建Git仓库

git init [-q | --quiet] [--bare] [--template=<template_directory>][--separate-git-dir <git dir>][--shared[=<permissions>]] [directory]

该命令创建一个空的Git存储数据库,基本上会在.git目录中创建objectsrefs/headsrefs/tags,和模板文件。还会创建一个引用主分支的HEAD的初始HEAD文件。
如果$GIT_DIR环境变量被指定了,则会替代./.git目录作为一个存储库的基础。
如果objects目录是通过$GIT_OBJECT_DIRECTORY环境变量指定的,那么在此目录下创建sha1目录,否则就是默认的$GIT_DIR/objects目录。
在已有的Git存储库中运行git init是安全的,他不会覆盖已存在的东西。重新运行git init的主要原因是获取新添加的模板(或者如果是--separate-git-dir选项,则将Git存储库移到另一个地方)。

  • [-q, --quite]
    只打印错误信息和警告信息;
  • [--bare]
    创建一个裸仓库,不包括.git文件夹,如下:
  • [--template=<template_directory>]
    用于在初始化Git仓库时将模板文件夹中的文件拷贝到我们初始化时的.git存储数据库中,如果不指定,默认拷贝的是/usr/share/git-core/templates路径下的模板,里面包括如下内容:

    $ ls /usr/share/git-core/templates/
    branches  description  hooks  info
    

    如果指定自己默认路径则初始化的Git存储数据库如下:
    其中模板依次可通过--template=<DIR>设置,$GIT_TEMPLATE_DIR环境变量设置,init.templateDir 配置设置,并且依次覆盖下一级设置。

  • [--separate-git-dir <git dir>]
    默认git init会在当前目录下创建一个.git文件夹来储存Git数据库,此命令可指定一个路径来初始化Git存储数据库,并在本地创建一个.git文件来链接到指定的目录中去:

    可以看到本地只有一个.git文件,文件中描述了当前仓库的Git存储数据库具体位置在哪里,并自动链接过去。
  • [--shared[=<permissions>]]
    用于指定创建的Git存储数据库的读写权限,包括同组用户,所有用户等等权限设置,如果没有指定默认是group权限。感兴趣可以git init --help查看此选项具体用法。
  • [directory]
    如果指定了此选项,git init命令则会在此目录中运行,如果目录不存在还会创建该目录。

2 git clone 从已有的Git存储数据库中克隆仓库到本地目录

git clone [--template=<template_directory>][-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror][-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>][--dissociate] [--separate-git-dir <git dir>][--depth <depth>] [--[no-]single-branch] [--no-tags][--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules][--[no-]remote-submodules] [--jobs <n>] [--sparse] [--] <repository>[<directory>]

克隆一个仓库到新被创建的目录中,为克隆的Git存储库中每个分支创建远程跟踪分支(通过git branch --remotes可查看跟踪分支),并创建和检出克隆仓库当前活跃的分支到本地初始分支。
克隆完成后,一个不带参数的git fetch命令可以更新所有远程跟踪分支,并且不带参数的git pull命令还会将远程主分支合并到当前分支中。
这个默认配置是通过在refs/remotes/origin下创建对远程分支头的引用并且初始化remote.origin.urlremote.origin.fetch配置变量实现的。

  • [--template=<template_directory>]
    请看git init相关选项获取此选项作用。
  • [-l, --local]
    用于从本地Git存储仓库克隆Git存储数据库,此选项会拷贝本地的refs,HEAD等信息到克隆的Git存储数据库,并将.git/objects通过硬链接形式链接到本地Git存储库以节约本地空间。
    如果未指定-l选项但[url]是本地路径则还是会默认进行-l选项的行为,但是如果指定的是--no-local选项对本地仓库进行克隆则会走默认的git clone流程:
  • [-s, --shared]
    当克隆的仓库在本地时,默认是将本地仓库中.git/objects的对象通过硬链接的方式链接到本地的克隆仓库,使用此选项不会再硬链接.git/objects目录,而是在本地的.git/objects/info目录中创建一个alternates文件并在其中描述objects原先的位置并进行共享使用。
    注意:这个选项是一个危险的选项,除非你明白它的作用,否则不要使用它。如果使用这个选项克隆了本地仓库,然后删除了源仓库中的分支,一些对象可能会变成未被引用状态。而这些对象是可能被git的命令(git commit内部可能自动调用git gc --atuo)删除的,从而导致仓库被破坏。
    还需要注意:在用-s选项克隆的存储库中运行git repack时,如果没有指定--local,-l选项,则会将源存储库中的objects复制到克隆存储库中的一个包里面,从而消除了--shared选项带来的共享效果和节省的空间。直接运行git gc是安全的,因为默认使用的--local,-l选项。
    如果想在-s选项指定的仓库中打破对共享的依赖,则可以使用git repack -a命令将源存储库中的所有对象复制到克隆的存储库的一个包中。
  • [--no-hardlinks]
    强制在克隆本地仓库时使用拷贝的形式复制.git/objects中的内容而不是使用硬链接的形式,在进行Git存储库备份时这个选项就很有用。
  • [-q, --quite]
    安静的运行命令,进度不会报告到标准错误流中。
  • [-n, --no-checkout]
    克隆完成后不执行检出HEAD操作:
  • [--bare]
    创建一个裸的Git仓库。也就是说不创建<directory>/.git目录也不会将管理文件放到<directory>/.git中,而是为自己创建一个<directory>或者<directory>.git目录,里面保存的就是实际的Git数据库。这个选项也默认是--no-checkout的,不会检出任何HEAD,也不会自动跟踪任何远程分支,也不会创建相关的配置变量。
  • [--mirror]
    设置源Git存储库的镜像。类似于--bare,对比--bare--mirror不仅仅映射源的本地分支到目标的本地分支,它还映射所有引用(包括远程跟踪分支,笔记等),并设置refspec配置,以便所有这些引用都被目标存储库中的git远程更新覆盖。
    注意:--bare--mirror都是针对服务器使用,因为服务器只需要保存Git存储数据库而不需要实际操作git命令,所以当你在这两个选项创建的存储库执行Git命令会得到下面的打印:

    fatal: this operation must be run in a work tree
    
  • [-o <name>, --origin <name>]
    未使用此选项时默认使用origin来跟踪远程仓库,使用此选项后使用<name>来跟踪远程仓库。
  • [-b <name>, --branch <name>]
    不要将新创建的HEAD指向克隆仓库HEAD指向的分支,而是指向<name>分支。
  • [-u <upload-pack>, --upload-pack <upload-pack>]
    在使用ssh访问要克隆的Git存储库时,它为另一端运行的命令指定了一个非默认的路径。这个选项主要针对Git服务器使用,为服务器使用的git等指定了一个路径。一般是/usr/bin/git-upload-pack,当服务器的git运行时会自动找到此路径的程序。
  • [--reference[-if-able] <repository>]
    如果引用的Git存储库在本地机器上,自动的会设置.git/objects/info/alternates文件来从引用源存储库来获取objects,使用已经存在的Git存储库作为替代将会需要更少的objects被从源存储库拷贝过来,从而降低网络和本地存储成本。当使用--reference-if-able时,会跳过不存在的目录,并发出警告,而不是中止克隆。
  • [--dissociate]
    --reference引用的Git存储库借用objects对象仅减少网络传输,并且在通过对借用objects进行必要的本地复制来进行克隆后,停止从引用库中借用对象。当本地克隆已经从另一个存储库借用objects时,可以使用此选项来停止新存储库从相同的存储库借用objects。此选项也主要用于Git服务器。
  • [--separate-git-dir <git dir>]
    请看git init相关选项获取此选项作用。
  • [--depth <depth>]
    创建一个浅克隆,其需要克隆的提交数量由<depth>指定,并获取所有分支顶部提交往后<depth>提交数量克隆到本地。如果也想简单克隆子模块也可以传递--shallow-submodules选项。
  • [--[no-]single-branch]
    顾名思义,--single-branch只会克隆Git存储库中指定的一个分支,远程Git存储库中其他分支不会在本地被克隆下来,也不会在本地跟踪其他远程分支,只会跟踪单个远程分支。
  • [--no-tags]
    不会克隆任何标签下来,并且在配置中设置remote.<remote>.tarOpt=--no-tags,以确保后续git pullgit fetch也不会操作到标签,除非显式的操作标签。
    可以与--single-branch一起使用,以维护单个分支,在只维护某个缺省分支时很有用。
  • [--recurse-submodules[=<pathspec>]]
    克隆创建后,根据提供的<pathspec>初始化并克隆子模块,如果没有指定<pathspec>则所有子模块都被初始化和克隆。对于有多个条目的<parhspec>可以多次给出此选项。
    使用默认的此选项,相当于运行git submodule update --init --recursive <pathspec>
  • [--[no-]shallow-submodules]
    所有被克隆的子模块都浅克隆深度为1。
  • [--[no-]remote-submodules]
    所有被克隆的子模块的远程跟踪分支的状态来更新子模块,而不是记录在Git数据库中的SHA1。相当于将--remote选项传递给git submodule update
  • [-j <n>, --jobs <n>]
    同时取出的子模块数,默认是配置submodule.fetchJobs
  • [--sparse]
    稀疏检出模式,所谓稀疏检出就是本地版本库检出时不检出全部,只将指定的文件从本地版本库检出到工作区,而其他未指定的文件则不予检出(即使这些文件存在于工作区,其修改也会被忽略)。这里不详细介绍此功能。
  • [--]
    无实际作用,只是为了将选项和操作对象分开以便易于区分。
  • <repository>
    要克隆的仓库,可能是远程仓库,也可能是本地仓库,可以是https协议也可以是ssh协议或者git协议等等。
  • [<directory>]
    如果指定了此目录,则会将Git仓库克隆到此目录中。
  • -v, --verbose
    冗长输出克隆信息。
  • [-c <key>=<value>, --config <key>=<value]
    在克隆仓库时为新创建的Git存储库设置一个配置变量,在克隆完成后立即生效。

3 导航页

git命令详细使用方式讲解及记录

git init和git clone获取仓库 (一)相关推荐

  1. Git笔记(4) 获取仓库

    Git笔记(4) 获取仓库 1. 主要获取方式 2. 在已存在目录中初始化仓库 2.1. 进入项目目录 2.2. 初始化 2.3. 追踪 2.4. 提交 3. 克隆现有的仓库 3.1. 克隆仓库 3. ...

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

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

    文章目录 初始化仓库git init和git init --bare的区别 git init --bare 使用场景 初始化仓库git init和git init --bare的区别 我们搭建好一个G ...

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

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

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

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

  6. 远端仓库初始化成裸仓库 git init --bare

    1 git init  和 git init –bare 的区别 用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作.但别的用户在将更新push上来的 ...

  7. git同步代码到远程github仓库

    原文地址: http://www.runoob.com/git/git-remote-repo.html Git 远程仓库(Github) Git 并不像 SVN 那样有个中心服务器. 目前我们使用到 ...

  8. Git 版本管理系统简介和远程仓库

    版本管理系统简介 项目的版本 版本和我们平常说的软件.游戏等的版本是一个意思,比如 1.2.8 版本.比如 第1版,比如webstorm2020. 所以,版本指的就是代码编写进度当中的一些节点. 比如 ...

  9. 【git教程】git安装、本地仓库与远程仓库使用详细指南

    git版本控制工具 下载地址:https://www.git-scm.com/download/win 选择对应版本的工具,下载后是一个exe执行文件: 本文使用到的git命令 命令 作用 git a ...

最新文章

  1. (C++)高精度整数的存储、读入、比较和四则运算
  2. 谈谈NTFS数据流文件
  3. c语言速算24源代码,C语言源程序代码-速算24
  4. hal库开启中断关中断_STM32 HAL库学习系列第9篇---NVIC按键外部中断函数
  5. java线程释放_Java多线程出现异常会自动释放锁
  6. 两个字符串 char* a, char* b,输出b在a中的位置次序。
  7. Programming WCF Services翻译笔记(八)
  8. Linux网络编程---htons函数的使用
  9. 格雷码和二进制码的互相转换
  10. vmware 运行xp 蓝屏
  11. 计算机cccc比赛,2019第四届中国高校计算机大赛—团体程序设计天梯赛 CCCC 总结...
  12. 如何利用新闻传播进行产品网络推广?
  13. 手机界面显示正常,点击输入框就放大,怎么破?看这里!
  14. ARM USB蓝牙,Bluez 移植。
  15. 向量叉乘算子、点乘算子与矩阵运算的关系
  16. 使用MySQL管理工具-SQLyog 9.63报错号码2058,超详细解析
  17. iscsi 网络存储
  18. 玩VR眼镜对眼睛有影响和危害吗?2018VR眼镜排行榜,什么VR眼镜好推荐,哪个VR眼镜好?
  19. jdbc之oracle
  20. 有趣的计算机课的作文,有趣的电脑课作文

热门文章

  1. 电阻何时取得最大功率
  2. 微信小程序实现圆形菜单弹出选中动画
  3. android espresso web,Espresso Web
  4. 【Unity】Sprite Atlas功能讲解
  5. mysql查询周数_MySQL如何获取一个指定日期所对应本年度的周数(WEEK函数)呢?
  6. 全球AI技术开放日系列5(上海站):走进爱奇艺
  7. Python3下载安装教程并安装numpy模块
  8. html表格上只有竖边框,html中画表格让表格只有横边框没有竖边框.doc
  9. 亲民地理38期-江西极顶武功山(上)
  10. fragment内嵌webView,输入框获得焦点禁用系统输入法,弹出自定义输入法的处理