一、Git说明
1、概述
Git是分布式的版本控制系统。与集中式版本控制系统相比,区别在于,用户可以针对本地仓库(无需连接远程服务器)进行所有的源码管理操作,当用户在本地完成所有提交后,可以再将其变更推送至远程服务。Git使用快照存储的存储模型,即Git是在目录树级别追踪修订版本的。向Git仓库的每一次提交,它代表当时工作区中的部分或全部目录树的一份快照。
2、内容移动核心命令
从 | 到 | 命令 | 备注 |
---|---|---|---|
工作目录 | 暂存区域 | add | 暂存本地变更 |
暂存区域 | 本地仓库 | commit | 仅提交暂存区域中的内容 |
本地仓库 | 远程仓库 | push | 在推送时同步内容 |
本地仓库 | 工作目录 | checkout | 切换当前分支 |
远程仓库 | 本地环境 | clone | 创建本地仓库和工作目录 |
远程仓库 | 本地仓库 | fetch | 更新远程分支的引用 |
远程仓库 | 本地仓库和工作目录 | pull | 抓取和合并本地分支和工作目录 |
3、Git存储模型
使用快照存储模型进行版本控制时,引入一个问题就是会消耗大量的硬盘空间。针对这种情况,Git使用链接来减少多次提交时重复的内容,另外Git也会使用zlib压缩来压缩存储的内容。在某些触发点,Git会运行GC(垃圾回收)功能(也可以使用gc命令执行),检查修订版本之间非常类似的内容,并且将那些修订版本打包到一起形成一个压缩包文件,从而减小对磁盘空间的占用。
4、多仓库模型
考虑到Git的存储模型,及为得到最佳的可用性和性能,Git通常用来处理多个较小的仓库而非较大的整体仓库。
使用这个模型,将项目的每一个模块放入一个不同Git仓库。因此,一个项目可能需要克隆几个不同的仓库以便得到本地处理的所有内容。每个窗口最终都会存在于磁盘上的一个单独目录树中。
或者,如果正在开始一个新项目,则可以创建新的模块,这些模块中的每一个都针对一个单独的Git仓库。(git init命令被用于创建新的仓库,每个目录树一个。)
同时处理多个仓库的情况在Git中很常见。一个项目中,一些仓库是由init命令新近创建的,而另一些是从已有的远程仓库克隆下来的。
每个仓库都位于单独的工作目录中,其中实际的仓库被物理存储于该目录的.git目录中。
5、追踪、暂存、添加
追踪指的是让Git控制和监控一个文件。让Git追踪一个文件的第一步就是暂存它。此处,暂存意味着告知Git从工作目录中获取最新变更并且将其放入暂存区域。要使用git add命令来完成这一操作。无论是在暂存一个当前不被Git追踪的全新文件,还是在暂存对一个已经被Git追踪的文件的更新,都仍然要使用add命令。
6、版本号信息
Git版本控制系统中的版本号,不同于传统的版本或修订号。Git会为它存储的一切内容创建校验和(SHA1)。从某个角度讲,一个变更的整体SHA1值可以像其他大多数版本控制系统中的版本号那样发挥作用。但是SHA1实际上是40个字符的十六进制字符串,并不简洁、能够轻易记住。但通常使用任意SHA1中的足够字符就可以作为两个SHA1的区分——通常是前七个字符。而Git也提供了支持:仅使用SHA1的前其他字符即可指定对应的版本。
7、支持文件
Git忽略文件允许用户告知Git应该忽略哪些文件并且不要尝试管理;Git属性文件允许用户定义要应用到特定文件或文件类型的某些操作的设置。
- 忽略文件:.gitignore
Git的忽略文件为用户提供了从跟踪和处理过程中排除掉指定文件(通常为编译时中间文件)的操作。忽略文件可以使Git不会尝试管理或变更指定文件或目录。 - 属性文件:.gitattributes
Git的属性文件通常用于指定需要特定处理的文件,如二进制文件。在这个文件中,可以将不同的文件类型指定识别为二进制文件。
例如:将.bin设置为二进制文件,只需在属性文件中添加"*.bin binary"
.gitignore文件和.gitattributes文件均为文本文件,使用文本编辑器编辑后即可使用。
二、Git常用命令
git命令形式:git <git-options> <command> <command-options> <operands>
命令 | 目的 |
---|---|
add | 将文件内容添加到索引 |
branch | 列示、创建或删除分支 |
checkout | 切换分支或恢复工作树文件 |
clone | 将仓库克隆到新目录 |
commit | 将变更记录到仓库 |
config | 获取以及设置仓库或全局选项 |
diff | 显示提交之间、提交与工作树之间等的变更 |
fetch | 下载来自另一个仓库的对象和引用 |
help | 显示帮助信息 |
log | 显示提交日志 |
merge | 将两个或多个开发历史合并到一起 |
mv | 移动或重命名一个文件、目录或符号链接 |
pull | 从另一个仓库或本地分支进行抓取或集成 |
push | 更新远程引用以及相关的对象 |
rebase | 将本地提交转发到更新的上游头信息 |
rm | 从工作树和索引中移除文件 |
show | 显示各种类型的对象 |
status | 显示工作树的状态 |
三、Git分支管理
- 获取分支信息
git branch
注:该命令会列出本地分支并且在当前活动分支旁边会放置一个星号(*)。 - 创建分支
git branch <branch name> - 切换分支
git checkout <branch name> - 删除分支
git branch -d <branch name> - 重命名分支
git branch -m <branch name>