Git:基础

来自Wikioe
跳到导航 跳到搜索


.git文件夹

.git文件夹结构如下:

└── .git
    ├── hooks           # (Folder)存放一些shell脚本,可以设置特定的git命令后触发相应的脚本
    ├── info         # (Folder)仓库的其他信息
     │   └── exclude         # 本地的排除文件规则,功能和.gitignore类似
     ├── logs             # (Folder)保存所有更新操作的引用记录,主要用于git reflog等
    ├── modules       # (Folder)项目的子模块内容(需要git submodule操作)
    ├── objects       # (Folder)所有文件的存储对象
    ├── refs         # (Folder)保存分支和标签的引用
    │   └── heads        # (Folder)本地分支引用
    │   └── remotes       # (Folder)远程分支引用
    │   └── tags         # (Folder)标签的引用(通过git tag生成)
    │   └── stash        # 保存的工作现场(通过git stash生成)
    ├── COMMIT_EDITMSG   # 最新的commit message
     ├── config           # 仓库的配置文件 
    ├── description     # 仓库的描述信息,主要给gitweb使用
    ├── FETCH_HEAD     # 用于追踪远程分支的拉取与合并
     ├── HEAD             # 指向当前分支
     ├── index            # 二进制暂存区(stage)
    └── ORIG_HEAD      # 用于件进行危险操作时备份HEAD

工作区、暂存区、版本库

Git 工作区、暂存区和版本库.jpg
Git笔记 工作区、暂存区和版本库.jpg
  1. 工作区:(workspace)就是电脑里的工作目录。
  2. 暂存区:(stage/index)。就是存放在.git目录下的index文件(即.git/index)。
  3. 版本库:(repository)就是工作区的隐藏目录 .git

其中:

  1. HEAD:当前活跃分支的游标;
  2. objects:Git的对象库,位于 ".git/objects" 目录下,包含了创建的各种对象及内容;
  3. 执行git add命令(对工作区修改(或新增)的文件):暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中;
  4. 执行git commit提交操作:暂存区的目录树写到版本库中,当前分支会做相应的更新。即HEAD指向的目录树就是提交时暂存区的目录树;
  5. 执行git reset HEAD命令:暂存区的目录树会被重写,被HEAD指向的目录树所替换,但是工作区不受影响;
  6. 执行git rm --cached <file>命令:会直接从暂存区删除文件,工作区则不做出改变;
  7. 执行git checkout .(或git checkout -- <file>)命令:会用暂存区全部或指定的文件替换工作区的文件(会清除工作区中未添加到暂存区的改动);
  8. 执行git checkout HEAD .(或 git checkout HEAD <file>)命令:会用HEAD指向的当前分支中的全部或者部分文件替换暂存区和以及工作区中的文件(不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动)。

工作流程

Git工作流程.png
项目中使用Git,工作流程一般如下:
  1. 克隆Git资源作为工作目录;
  2. 切换到相应开发分支;
  3. 在克隆的资源上添加或修改文件;
  4. (如果其他人修改了,你可以更新资源;)
  5. 在提交前查看修改;
  6. 提交修改;
  7. 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交;

工作分支管理模型

项目中一般分支策略如:

  1. master:稳定分支,长期保存;
  2. develop:开发分支,长期保存;
  3. feature:特性分支,需要时建立,完成后合并到其他分支,并删除;
  4. release:发布分支,送测时建立,完成后删除或保存;
  5. hotfix:补丁分支,修复紧急缺陷时建立,完成并合并后删除;
Git分支管理模型.jpg