git学习指南

本文仅做本人学习笔记,随学习深入在逐步更新。。。。。。

用途

版本控制(最基本的功能)
主动提交(commit 历史)
远程仓库(协同开发)

git工作流程

在这里插入图片描述
1、在工作目录中添加、修改文件;
2、将需要进行版本管理的文件放入暂存区域;
3、将暂存区域的文件提交到git仓库。
git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

git文件的四种状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。git不关心文件两个版本之间的具体差别,而是关心文件的整体是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用SHA-1算法计算文件的校验和。
图片: https://odocs.myoas.com/uploader/f/SZW29wAuAFcO8N91.png?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE3MTY0NTE5NzcsImZpbGVHVUlEIjoiUktBV1Zhd1dETEl4dmprOCIsImlhdCI6MTcxNjQ1MTM3NywiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjoyOTU3MjJ9.NXbkynflaH33BnS0B0Mm5EAlxTAg2bFJ0Ri1_xdsNX0

Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified,如果使用git rm移出版本库, 则成为Untracked文件

Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态,使用git checkout 则丢弃修改过,返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改

Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified

具体流程如下:
新建文件—>Untracked
使用add命令将新建的文件加入到暂存区—>Staged
使用commit命令将暂存区的文件提交到本地仓库—>Unmodified
如果对Unmodified状态的文件进行修改—> modified
如果对Unmodified状态的文件进行remove操作—>Untracked

git专用术语解释

工作区

用来编辑保存项目文件的地方,也是用户能直接操作到的地方

index或stage

索引\暂存区 一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index),新建初始化的工作区.git目录下没有index文件,经过初次提交之后,在版本库下会生成index文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本地仓库 即工作区下的.git目录

版本库又名仓库,英文名repository,理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原" ;即创建一个目录,使用git init 初始换成为本地仓库, 工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的本地版本库,仓库所有版本信息都会存在这里 。

Git 仓库有两种形式:

  • 工作目录中的 .git 目录。这种是我们经常接触的Git仓库形式。
  • 裸仓库,目录一般是 .git。裸仓库没有工作区(working tree),一般是存在于服务器中,用于给用户仓库交互和存储的
远程仓库

远程仓库是指托管在因特网或其他网络项目的版本库。 即托管代码服务器,可以多个远程仓库,可设置仓库读、写权限。 与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。

签入(checkin)

将新版本复制回仓库

签出(checkout)

从仓库中将文件的最新修订版本复制到工作区

提交(commit)

将暂存区的文件提交到仓库

冲突(conflict)

多人对同一文件的同一部分进行了修改,导致了冲突的发生。

合并(merge)

将指定分支合并到当前分支

分支(branch)

从当前分支上分离开的副本。

头(HEAD)

指向当前选择的分支。

修订(revision)

表示代码的一个版本状态。Git通过用SHA1 hash算法表示的ID来标识不同的版本。

标记(tags)

标记某个分支的某一个版本,方便检索和查看。

推送(push)

向远程仓库推送当前分支

拉取(pull)

从远程仓库拉取文件,并合并入当前分支。

origin

origin指向的就是你本地的代码库托管在远程仓库上的版本

git指令操作

git config

git config 作用域
git config  --local  xxxx   xxx       ##本地级别的配置保存在当前仓库下面的 .git/config 文件内,通常 .git 文件夹是隐藏的,仅对当前仓库有效,不影响其他的仓库。优先级别最高,如果全局级别或系统级别的配置里出现了同一配置项,则以本地级别配置内容为准局部当前目录下配置,需要在工作区即.git所在目录或者工作区下属目录执行方可成功,如果是在工作区外非git目录中执行次命令无效报错和 "git config  xxx  xxx" 效果一样;

git config  --global  xxxx  xxx       ##全局级配置文件包含当前系统用户的拥有的仓库配置值,每个系统用户的全局级配置相互隔离。全局级别的配置默认保存在当前系统用户的主目录下的 .gitconfig 文件内;优先度比系统级高,可覆盖系统级的配置值;

git config  --system  xxxx  xxx       ##系统级配置文件含有系统里每位用户及他们所拥有的仓库的配置值。其位置为git的安装目录下的/etc/gitconfig
优先度最低,其配置值可被全局级配置和本地级配置的值覆盖

优先级:仓库级 > 全局 > 系统级
使用方法
#获取配置项的值
git config --global --get user.name        ##获取某一项配置  若不指定级别,则会从本地级开始一级一级往上查找直到配置不存在。即:先从本地级配置中开始查找配置项,若本地级不存在则往上从全局级别配置查找,若全局级别还是不存在该配置项就从系统级配置查找,若还是不存在则返回空。

#设置配置项的值
git config --global  user.name   80403584  ##若不指定级别,则会配置项默认会设置到本地级的配置文件中,即设置配置项时默认使用--local级别(前提是在本地级仓库内)。若指定级别配置项就设置到该级别的配置文件中。

#删除配置项
git config --global --unset user.name      ##与设置配置项一样,删除配置项若不指定级别,则默认使用--local级别。指定级别则删除该级别的配置文件中的配置项

#获取配置项
git config --global -l                     ##若不指定配置级别,则会返回3个级别的配置,从上往下按系统级别、全局级别、本地级别的顺序进行输出显示。如果不在本地级别即仓库目录路径下,则默认输出系统级别、全局级别配置

#编辑配置文件
git config -e                               ##若不指定配置级别,若在本地仓库目录中,则默认是本地仓库级别编辑配置文件,global则是全局,system为系统级,普通用户收到权限控制

#添加配置项
git config -–add    <entry-name>            ##entry-name 为配置项名称,注意 add 后面的 section、key、value 一项都不能少,否则添加失败。
如: git config --add  merge.tool vimdiff

#设置别名类似linux alias
git config   alias.<handle> <command>       ##handle alias名; command实际命令选项
如:git config --global alias.st status

#忽略文件的权限变化
git config core.fileMode false              ##不再将文件的权限变化视作改动。

git config常用配置项
user.name      设置代码提交时使用的用户名,它将会包含在每个提交记录中,标识谁做了那些更改;

user.email      设置代码提交时使用用户邮箱,用户与用户名一起标识提交者身份;

core.editor     设置默认的文本编辑器,当需要编辑提交消息或解决合并冲突时git会调用这个编辑器,默认是nano,也可设置为vim、gedit等

core.ignorecase 设置文件名在git中大小写敏感性,默认是false,如果设置为ture,git将会忽略文件名大小写差异;

color.ui           设置git输出字体颜色,默认是false,如果设置为ture,即可启启用全局的 Git 控制台颜色,同时也支持自定义 Git 控制台的颜色方案,一般设置为auto即可;

alias.xxx         设置命令别名,类似linux alias命令,针对一些常用或者较长子命令可以通过设置别名,提升效率;

http/https.proxy       设置http/https代理访问远程仓库,一般用于内网访问外网仓库,安全管控统一走代理;

http/https.postBuffer    设置Git缓存区的大小,如果提交的内容较大,默认缓存较小,提交会失败,缓存大小单位:B,例如:524288000(500MB);

http/https.sslVerify       是否验证远程仓库的 SSL 证书。在一些情况下,可能默认是true,如果需要禁用 SSL 验证也可以设置成false;

gc.auto                    设置自动垃圾回收的触发条件,清理不必要的文件并优化本地存储库,如果要禁用设置为0

git init

用途

初始化版本仓库,创建一个空的 Git 仓库或重新初始化现有的仓库

  • 初始化空目录,通过 Git 对该目录进行版本管理
  • 初始化已关联版本仓库目录
    该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。

使用方法

git init                  ##将当前目录初始化成为一个git代码库
git  init     <project-name>      ##创建一个目录,将其初始化为代码仓库,project-name为新建仓库名

版本库说明即.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
│   ├── push-to-checkout.sample
│   ├── sendemail-validate.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── objects
│   ├── 7f
│   │   └── d5222177e8ffadda6437dc9cfa0630a2777673
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags
释义
  • branches:目录,存储了每个远程分支的相关信息;
  • config:文件,存储了项目级别的Git配置信息,即优先级最高的本地仓库配置;
  • description:文件,对于空的Git仓库,此文件内容为空。对于非空的Git仓库,描述该项目的文本;
  • HEAD:文件,记录当前激活的分支,其内容指向具体的分支(refs/heads/)。一个git仓库一定会有一个HEAD文件。HEAD 文件也可以直接记录一个commit-id,这种情况就是常见的’detached HEAD.’,当检出特定的commit-id时( git checkout )就会这样;
    通过HEAD可判断仓库的默认分支;
    HEAD可以指向不存在的分支;
  • hooks:目录,git 钩子目录,git init 时,会默认创建一些简单的 hooks 文件,文件夹用来存放 Git 脚本,设定在执行某些 Git 操作时,触发相应的脚本;
  • index:文件,暂存区/索引文件,裸仓库(bare repository)下没有index文件;
  • info: 目录,记录仓库描述信息;
  • info/exclude:文件,描述哪些文件排除在版本控制之外,和 .gitignore 功能类似
  • objects:目录,存放所有的 Git 对象。在生成 Git 对象时,会同时生成一个 40 位的哈希值,哈希值的前 2 位用作文件夹名,后 38 位用作 Git 文件名;
  • objects/pack:目录,pack文件存储位置。该目录下还存在 *.idx 文件,为对应的 *.pack 文件的索引文件;
  • objects/info:目录,记录objects 目录的说明;
  • refs:目录,存储 git 的所有引用;
  • refs/head: 目录,记录 git 的分支(branch);
  • refs/tags:目录,记录 git 的标签(tag);
  • 35
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值