git-git命令解析、git config、文件区域管理
1、命令帮助
1.1、查看帮助
git help <子命令> # 注意:不加"子命令"表示针对git,否则的话,就是查看具体子命令的帮助信息
1.2、命令简介
# git --help 用法:git [--version] [--help] [-C <路径>] [-c <名称>=<取值>] [--exec-path[=<路径>]] [--html-path] [--man-path] [--info-path] [-p | --paginate | -P | --nopager] [--no-replace-objects] [--bare] [--git-dir=<路径>] [--work-tree=<路径>] [--namespace=<名称>] <命令> [<参数>] 这些是各种场合常见的 Git 命令: 开始一个工作区(参见:git help tutorial) clone # 克隆一个仓库到一个新目录 init # 创建一个空的 Git 仓库或重新初始化一个已存在的仓库 在当前变更上工作(参见:git help everyday) add # 添加文件内容至索引 mv # 移动或重命名一个文件、目录或符号链接 reset # 重置当前 HEAD 到指定状态 rm # 从工作区和索引中删除文件 检查历史和状态(参见:git help revisions) bisect # 通过二分查找定位引入 bug 的提交 grep # 输出和模式匹配的行 log # 显示提交日志 show # 显示各种类型的对象 status # 显示工作区状态 扩展、标记和调校您的历史记录 branch # 列出、创建或删除分支 checkout # 切换分支或恢复工作区文件 commit # 记录变更到仓库 diff # 显示提交之间、提交和工作区之间等的差异 merge # 合并两个或更多开发历史 rebase # 在另一个分支上重新应用提交 tag # 创建、列出、删除或校验一个 GPG 签名的标签对象 协同(参见:git help workflows) fetch # 从另外一个仓库下载对象和引用 pull # 获取并整合另外的仓库或一个本地分支 push # 更新远程引用和相关的对象 命令 'git help -a' 和 'git help -g' 显示可用的子命令和一些概念帮助。 查看 'git help <命令>' 或 'git help <概念>' 以获取给定子命令或概念的帮助。
2、环境初始化
2.1、目标
环境初始化的目的就是创建自己的版本控制代码仓库,而创建代码仓库主要有两种方式: 1、在本机工作目录下,通过导入代码文件来创建新的 Git 仓库。 2、从已有的 Git 仓库克隆出一个新的镜像仓库。
2.2、本地环境初始化
2.2.1、初始化
mkdir /data/git -p && cd /data/git git init 注意: init初始化后,在当前工作目录下会出现一个名为 .git 的目录,该目录有git即定的目录结构样式,所有 Git 需要的数据和资源都存放在这个目录中。 如果当前目录下有现成的代码文件的话,就相当于直接把所有代码都开始被git管理了。 root@localhost:/data/git# ll -a drwxr-xr-x 3 root root 4096 Jun 9 10:04 ./ drwxr-xr-x 5 root root 4096 Jun 9 10:04 ../ drwxr-xr-x 7 root root 4096 Jun 9 10:04 .git/
2.2.2、目录结构解析
root@localhost:/data/git# tree .git/ .git/ ├── HEAD # 当前分支的标识符号,一般指向refs/heads目录下的分支文件 ├── branches # 代码分支 ├── config # git config 命令设置的配置信息 ├── description # 被gitweb(Github的原型)用来显示对仓库的描述 ├── hooks # 一些触发器规则的文件,俗称"钩子文件" │ ├── applypatch-msg.sample │ ├── commit-msg.sample │ ├── fsmonitor-watchman.sample │ ├── post-update.sample │ ├── pre-applypatch.sample │ ├── pre-commit.sample │ ├── pre-merge-commit.sample │ ├── pre-push.sample │ ├── pre-rebase.sample │ ├── pre-receive.sample │ ├── prepare-commit-msg.sample │ ├── push-to-checkout.sample │ └── update.sample ├── info # 一些特殊文件设置目录,比如忽略文件设置,.gitignore是互补的 │ └── exclude ├── objects # 存放git对象,这是一个最核心的文件目录 │ ├── info │ └── pack └── refs # 各个提交对象的标识(SHA-1)文件 ├── heads # 分支相关信息的目录 └── tags # 标签相关信息的目录
2.3、个人信息配置【git config】
2.3.1、配置与说明
个人主机git的环境基本环境准备好后,还需要使用git config命令配置一下代码仓库的用户环境(只需一 次),主要是设置一下当前主机上的git配置信息,以后升级时还会沿用下去。当然,可以用相同的命令修改它。 注意:git仓库必须配置 config 信息,不然的话,后期我们进行代码提交的时候,会提示报错,让我们先配置git仓库的基本信息。 git的配置文件主要有三个地方: 1)、etc/gitconfig 当前系统中git全局配置。使用 git config 的 --system 编辑。 2)、~/.gitconfig 当前主机上某用户配置。使用 git config 的 --global 编辑。 3)、.git/config 某主机工作目录的git项目配置,优先级最高,会覆盖其他文件相同配置。 注意: 对于windows系统来说,该文件主要存在于 $GIT_HOME D:\Program Files (x86)\Git\mingw64\etc $USER C:\Users\Administrator.PC-201704222111 这两个目录下,每个人的具体目录稍有不同,但是格式一样。 用户环境的配置主要是两条:配置当前主机的git用户名称和邮件地址。 ##### git config --global user.name "2776680**@qq.com" git config --global user.email 2776680**@qq.com ##### 注意: user.name "值",不能写成 user.name="sswang" --global 参数,表示我们配置的信息针对于当前系统的用户,会保存到用户的家目录下。 没有 --global 参数,表示配置针对当前工作目录,信息保存在当前目录的 .git/config 文件里。 这两条配置很重要,每次 Git 提交时都会引用这两条信息,作为历史记录信息保存起来 它还有另外两个config的配置参数: --system 针对系统所有用户的配置 --local 这对本地仓库目录的,这是默认携带的参数 这三者的优先级是:local > global > system root@localhost:~# cat /root/.gitconfig [user] name = 2776680**@qq.com email = 2776680**@qq.com
2.3.2、--system、--global、--local作用域
2.4、检查效果
2.4.1、检查所有配置信息
git config --list # 注意:这里面的信息都是来自于 gitconfig 或者 config文件
2.4.2、检查指定范围的配置信息
git config --list --global # 注意:--local 只能用于某个指定的git仓库中,非仓库的其他位置都会发生报错
2.4.3、检查用户信息
git config user.name
git config --local user.name
2.4.4、清除设置信息
git config --unset --local|global|system user.name
3、区域管理
3.1、区域管理分类
区域管理,其实就是在使用git进行代码版本控制的过程中,实现文件数据移动/保存的几个位置。git的正常使用过程中,主要存在四个区域
3.1.1、 工作目录
工作目录 Working Directory /data/git(不包含.git)
3.1.2、 暂存区域
暂存区域 Staging Area /data/git/.git/index
3.1.3、 本地仓库
本地仓库 Repository-local /data/git/.git
3.1.4、 远程仓库
远程仓库 Repository-remote git://path/to/project.git
3.2、区域管理分类图
这四个区域在物理上存在两个地方:
当前主机:工作目录、暂存区域、本地仓库,这三个区域就是我们刚才初始化的 git目录。
远程主机:远程仓库即远程代码仓库
3.3、区域设置
git init的时候,会自动创建两个区域:工作目录/本地仓库。
git服务部署的时候,会设置远程仓库。
3.3.1、区域间文件示意图
# 版本查询 git reflog git log # 注意:本地仓库切回暂存区,需要有两次commit以上才可以生效
3.3.2、区域操作命令
git clone # 从远程仓库获取文件到本机主机,包括所有配置信息 git pull # 从远程仓库获取最新代码,并合并到本地仓库 git fetch # 从远程仓库获取最新代码,不合并到本地仓库 git push # 将本地仓库的代码推送到远程仓库 git add # 将工作目录的文件添加到暂存区 git commit # 将文件从暂存区移动到本地仓库 git reset # 将文件从本地仓库移动文件到暂存区或者工作目录 git checkout # 将文件从暂存区移动到工作目录 git rm # 移除指定的文件