基本概念
主要目的:项目管理、版本控制
集中化版本控制系统:svn 过于依赖主服务器
分布式版本控制系统:Git
将完整项目镜像下来,相当于每台电脑都是一个服务器
简介&安装
配置: 配置一次即可
git config --global user.name 'sunqg'
git config --global user.email ''
# 检查已有的配置信息
git config --list
--global 当前用户使用此配置 优先级最低
--system 系统全局使用此配置 优先级第二
当前项目使用此配置 优先级最高
区域
工作区:本地写代码的项目目录,沙箱环境(随便玩,随便改)
暂存区:暂时存储代码,
git ls-files -s 查看暂存区
版本库:托管代码
工作区写好后推到暂存区,再推到版本库
对象
git init # 创建隐藏目录,包含以下文件
目录名 | 作用 |
---|---|
hooks | 客户端或服务端的钩子脚本,类似于js中的回调函数 |
info | 全局性排除文件 |
logs | 日志信息 |
objects | 存储所有数据内容 |
refs | 存储指向数据(分支)的提交对象的指针 |
config | 文件包含项目持有的配置选项 |
description | 用来显示对仓库的描述信息 |
HEAD | 指示目前被检测出的分支 |
index | 保存暂存区信息 |
linux 常用命令
clear 清除屏幕
echo'str' 向控制台输出信息
ll 将当前目录下的文件&目录平铺在控制台
find 目录名 将对应目录下的所有子孙文件&子孙目录平铺在控制台
find 目录名 -typef 将对应目录下的文件平铺于在控制台
rm 文件名 删除文件
mv 源文件 重命名文件 重命名
cat 文件的url 查看文件的对应内容
git对象
git的核心部分是一个简单的键值对数据库(objects)
git对象只能存储文件,不能存储内容
# 不加 -w不会存入objects
echo 'test contetent' | git hash-object -w --stdin
# 查看
find ./.git/objects -type f
# 存储文件到git数据库(objects)
git hash-object path
#查看
git cat-file -p 哈希名
树对象
解决文件名存储问题,一次存储多个git对象
git对象 -》 文件 文件的一次次版本
树对象 -》 目录 项目的一次次版本
# 生成哈希
git hash-object -w filename
# 提交至缓存区
git update-index --add --cacheinfo 100644 e9ff6e3e9a0d8c5af81006168341565147af6460 git笔记.md
# 提交至git数据库objects
git write-tree
提交对象
一个提交对象(对树对象进行了封装), 代表一个版本
每一次版本都是一次快照
# 生成该树对象的相关信息 作者 时间 邮箱等
commit-tree 树的前七八位哈希值