首先在了解Git基本工作流程之前我们需要对Git如何存储文件和历史记录有个浅显的了解。
Git如何存储文件
Git使用的是40个16进制的SHA-l Hash来标识对象,Git有四种对象
1. blob 文本文件,或者二进制文件,.java .cs .html 等源代码都属于blob对象
2. tree 目录
3.commit 提交
4.tag 指定commit对象的一个标识
这四种对象有这样一种关系,一个tag指向一个commit历史提交,一个commit历史提交指向一个tree目录,一个tree目录指向一个或多个tree或blob对象。
Git仓库
Git仓库分为两种,bare(裸仓库,不带工作区,用于团队协作,没有 .git 目录)、non-bare(带工作区的Git仓库)
接下来我们将演示如何创建一个Git仓库,创建Git仓库分两种方式,一种是本地 git init,另外一种是git clone
git init 创建Git仓库
我们通过Git来管理代码都是需要带工作区的Git仓库,所以我们先来介绍如何创建一个带工作区的Git仓库。
先进入到随便一个盘符,我这里以 F:\less\Git 为例,右键打开 Git Bash Here,输入如下命令即可,
git init git_non_bare_repo
这时,我们发现Git目录下多了一个 git_non_bare_repo目录,而这个目录里面又有个
.git目录,这个目录是隐藏的需要打开文件选项显示隐藏文件,.git下又有许多目录和文件,这些文件就是Git用了管理仓库所需要的文件,我们只要把需要管理的源码放到git_non_bare_repo目录下即可,如图:
假设,先前我们开发已经有段时间,存在很多源码了,那么如何把这些源码加入到Git仓库呢?这就好比,我手动创建了一个git_init_repo目录,如何把它纳入管理?
只要在git_init_repo目录里执行如下语句即可:
git init
创建一个裸仓库也是很简单的,当然,你也可以查看裸仓库和带工作区的仓库有什么区别,其实就是多个.get目录
git clone克隆仓库
上面所介绍的都是本地创建仓库,但是一进公司,肯定是让你从远程拉代码下来的,这就是克隆远程仓库,因为是测试,我们打开 https://github.com 随便找个项目,
比如: https://github.com/usds/playbook
复制这个地址然后执行:
git clone https://github.com/usds/playbook.git
如下图:
至此,我们已经掌握了如何创建和克隆Git仓库,休息一下,接下来将正式进入Git的工作流程.
Git工作流程
git的工作流程都是围绕下图进行的,
1. 工作区 其实就是我们电脑 F:\less\Git\git_non_bare_repo 目录
2. 暂存区 是工作区和历史提交的一个桥梁
3.历史提交 就是commit对象对应的一个提交
我们首先需要把工作区的代码文件添加到暂存区,然后在提交。也可以从commit中检出一个历史提交
首先,准备一下需要操作的文件,
.config 和bin目录下的文件是我们需要忽略的文件,cs html java是要提交的源码文件,提交完成之后中途我需要删除 txt 文件
Git Status 查看状态
可以通过
Git Add 加入暂存区
git add -A
将里面所有的文件添加到暂存区
Git Commit 提交到仓库
git commit -m '本次提交的注释'
将暂存区中的文件提交到本地Git仓库中
这样,一个基本流程就已经走完了。
如果不相信,我们可以在本地电脑删除.txt文件,然后通过git checkout来撤销本次未提交的修改
Git Checkout 撤销修改
通过
撤销本次所有未提交的修改
删除Git仓库中的文件
这个简单,只要把本地对应的文件删除掉,在重新 add -A commit一下就可以了,同样,本地文件如有修改过或者重命名移动过,也需要add -A commit提交
.gitignore设置忽略文件
我们重新准备一个新的仓库,结构如图
bin目录中有个.cs和.config文件。
准备工作做完后,使用git status查看下状态,很多需要Add的,但是我们不希望把.config文件和bin目录纳入管理。那么就要设置忽略文件了 .gitignore
因为是windows环境,采用点开头的文件不能直接创建,要用linux下的vim来创建,
vim .gitignore
创建好后可以按 i 进入插入模式编辑文件,编辑完成后按 esc 到操作模式,在输入 :wq保存并退出,一时不太习惯VIM 所以这里我就直接保存退出了。
忽略文件创建好之后,我们用文本文件打开进行编辑。
这样就设置好了,可以通过status来查看。
如遇到:.gitignore设置好还是无效,那么原因是git库中已经存在有这些文件了,所以忽略不了,需要把git库中的这些文件删除掉之后才能过滤,至于如何删除,上面已经提到过了
上图:
1. 过滤后缀是o或者a的文件
2.过滤以~结尾的文件
3.过滤 .pyc文件
4.但是不过滤 test.pyc
5. 对于 本身文件名是 !test.py 的文件 需要 纳入进来 那么要用反斜杠
6. 过滤 foo 文件夹下所有文件
7. 过滤所有 res 目录,就算它是某个目录的子目录