前端 技术之 Git&GitHub
前端 技术之 Git&GitHub
第一章Git 操作
一、分布式版本控制系统在 这类系统如 Git 、BitKeeper , 客
户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来 。这么一分布式的版本控制系统在管理项目时 存放的不是项目版本与版本之间的差异 它存的是索引 所需磁盘空间很少 所以每个客户端都可以放下整个项目的历史记录分布式的版本控制系统出现之后 解决了集中式版本控制系统的缺陷
1. 断网的情况下也可以进行开发 因为版本控制是在本地进行的
2. 使用 github 进行团队协作 哪怕 github 挂了 每个客户端保存。
的也 都是整个完整的项目 包含历史记录的。
Windows 上安装:https://git-scm.com/download/win
在 Mac 上安装:git地址 https://git scm.com/download/mac
二、Git 初始化配置
一般在新的系统上,我们都需要先配置下自己的 Git 工作环境。配置工作只需一
次,以后升级时还会沿用现在的配置。当然,如果需要,你随时可以用相同的命令修
改已有的配置。
Git 提供了一个叫做 git config 的 命令 来配置或读取相应的工作环境变量而正是由
这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放
在以下三个不同的地方:
/etc/gitcon fig 文件:系统中对所有用户都普遍适用的配置。若使用 git
更多 Java –大数据 –前端 –python 人工智能资料下载,可百度访问:尚硅谷官网
config 时用 system 选项,读写的就是这个文件。
~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git
config 时用 global 选项,读写的就是这个文件。
.git/config 文件 当前项目的 Git 目录中的配置文件(也就是工作目录
中的 .git/config 文件)这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置
配置内容:用户信息
第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:
git config global user.name damu
git config global user.email damu @example.com
要检查已有的配置信息,可以使用 git config --list 命令 删除配置信息 git config g lobal u nset user.email
Git 底层概念(底层命令): 基础的 linux 命令
clear:清除屏幕
echo ‘test content‘:往控制台输出信息 echo ‘test content‘ > test.txt
ll:将当前目录下的 子文件 子目录平铺在控制台
find目录名 将对应目录下的子孙文件 子孙目录平铺在控制台
find目录名 type f :将对应目录下的文件平铺在控制台
rm文件名 删除文件
mv源文件 重命名文件 : 重命名
cat文件的 url : 查看对应文件的内容
vim文件的 url( 在英文模式下)
按 i 进插入模式 进行文件的编辑
按esc 键 按 键 进行命令的执行
q! 强制退出(不保存)
wq 保存退出
set nu 设置行号
初始化新仓库
命令:git init
解析: 要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行: git init
作用: 初始化后,在当前目录下会出现一个名为 .git 的目录(如果没有看到点击文件上方的菜单栏的查看√隐藏的项目就可以看见.git文件了),所有 Git 需要
的数据和资源都存放在这个目录中。不过目前,仅仅是按照既有的结构框架初始化
好了里边所有的文件和目录,但我们还没有开始跟踪管理项目中的任何一个文件。
.git文件目录的各个文件的含义如下:
hooks 目录 包含客户端或服务端的钩子脚本;
info 包含一个全局性排除文件;
logs 保存日志信息;
objects 目录存储所有数据内容;
refs 目录存储指向数据的提交对象的指针(分支);
config 文件包含项目特有的配置选项;
description 用来显示对仓库的描述信息;
HEAD 文件指示目前被检出的分支;
index 文 件保存暂存区信息;
git 对象
Git 的核心部分是一个简单的键值对数据库 。 你可以向该数据库插入任意类型
的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索该内容。
1、向数据库写入内容 并返回对应键值
命令:echo ‘test content‘ | git hash-object -w --stdin
-w 选项指示 hash-object 命令存储数据对象;若不指定此选项,则该命令仅返回对应的键值
--stdin(standard input)选项则指示该命令从标准输入读取内容;若不指定此选项,则须在命令尾部给出待存储文件的路径
git hash-object -w 文件路径
存文件
git hash-object 文件路径
返回对应文件的键值
d670460b4b4aece5915caf5c68d12f560a9fe3e4
返回:该命令输出一个长度为 40 个字符的校验和。 这是一个 SHA-1 哈希值
2、 查看 Git 是如何存储数据的
命令:find .git/objects -type f 返回:.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4
这就是开始时 Git 存储内容的方式:一个文件对应一条内容。校验和的前两个字符用于命名子目录,余下的 38 个字符则用作文件名。
?
3、根据键值拉取数据
命令:git cat-file -p d670460b4b4aece5915caf5c68d12f560a9fe3e4
-p 选项可指示该命令自动判断内容的类型,并为我们显示格式友好的内容
返回:对应文件的内容
对一个文件进行简单的版本控制
1、创建一个新文件并将其内容存入数据库
命令:echo ‘version 1‘ > test.txt
git hash-object -w test.txt
返回:
83baae61804e65cc73a7201a7252750c76066a30 ?
2、 向文件里写入新内容,并再次将其存入数据库
命令:echo ‘version 2‘ > test.txt
git hash-object -w test.txt
返回:1f7a7a472abf3dd9643fd615f6da379c4acb3e3a
3、查看数据库内容
命令:
find .git/objects
type f
git cat
file p 83baae61804e65cc73a7201a7252750c76066a30
git cat
file p 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a
git cat
file t 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a
利用 cat-file -t 命令,可以让 Git 告诉我们其内部存储的任何对象类型
返回:blob
问题:
1. 记住文件的每一个版本所对应的 SHA-1 值并不现实
2. 在Git中,文件名并没有被保存——我们仅保存了文件的内容
解决方案:树对象
注意:当前的操作都是在对本地数据库进行操作 不涉及暂存区
构建树对象
树对象( tree object ),它能解决文件名保存的问题,也允许我们将多个文件
组织到一起 。 Git 以一种类似于 UNIX 文件系统的方式存储内容 。 所有内容均以
树对象和数据对象 (git 对象 的形式存储,其中树对象对应了 UNIX 中的目录项,
数据对象 (git 对象 则大致上对应文件内容 。 一个树对象包含了一条或多条记录 每条记录含有一个指向 git 对象或者子 树对象的 SHA 1 指针 以及相应的模式、类
型、文件名信息 )。 一个树对象 也可以 包含 另一个树对象。
我们可以通过update-index;write-tree;read-tree等命令来构建树对像并塞入到暂存区。
假设我们做了一系列操作之后得到一个树对像。
操作
1. 利用update -index 命令 为 test.txt 文件的首个版本——创建一个暂存区。并通过write-tree 命令 生成树对像。
命令:git update index add cacheinfo 100644\
83baae61804e65cc73a7201a7252750c76066a30 test.txt
git write-tree
文件模式为 100644 ,表明这是一个普通文件
100755,表示一个可执行文件
120000 ,表示一个符号链接 。
--add 选项因为此前该文件并不在暂存区中首次需要 add
--cacheinfo 选项因为将要添加的文件位于Git 数据库中,而不是位于当前目录下 所有需要 cacheinfo
2. 新增new.txt 将new.txt 和 test.txt 文件的第二个个版本塞入暂存区。并通过write-tree 命令 生成树对像。
命令:echo ‘new file‘ > new.txt
git updateindex cacheinfo 100644\1f7a7a472abf3dd9643fd615f6da379c4acb3e3a test.txt
git- update-index --add new.txt
git write-tree
3. 将第一个树对象加入第二个树对象,使其成为新的树对象
命令:git read-tree
--prefix=bak d 8329fc1cc938780ffdd9f94e0d364e0ea74f579
git write-tree
read-tree 命令,可以把树对象读入暂存区。
尚硅谷前端 技术之 Git&GitHub 链接:https://share.weiyun.com/hWHc9ABJ 密码:n6e4yv
更多IT知识可以找我探讨我的vx:cmL46679910
Q:1820836501