
Git
一.最流行的分布式版本控制软件
介绍
Git 是目前最流行的分布式版本控制软件 在开发的过程中用于管理对文件、目录或工程等内容的修改历史,方便查看历史记录,备份以便恢复以前的版本的软件工程技术
实现功能
实现跨区域多人协同开发
追踪和记载一个或者多个文件的历史记录
组织和保护你的源代码和文档
统计工作量
并行开发、提高开发效率
跟踪记录整个软件的开发过程
减轻开发人员负担,节省时间,同时降低人为错误
版本控制分类
本地版本控制
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如 RCS
集中版本控制
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改
用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也 无法切换版本
所有数据都保存在单一的服务器上,如果这个服务器会损坏(有很大的风险), 这样就会 丢失所有的数据,需要定期备
代表产品:SVN、CVS、VSS
分布式版本控制
所有版本信息仓库全部同步到本地的每个用户
可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时 push 到相应的服 务器或其他用户那里。
每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复 所有的数据
更加安全, 不会因为服务器损坏或者网络问题,造成不能工作的情况
代表软件: Git
二.下载与安装
官网 傻瓜式安装
文档与互动练习
三.基本配置
初始设置
首先设置电子邮箱和用户名,因为每次提交都会使用该信息
查看配置
查看所有配置 系统配置 当前用户配置
四.Git工作原理*
1.四个工作区&关系
Git 本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库 (Repository 或 Git Directory)。如果再加上远程的 git 仓库(Remote Directory)就可以分为四个 工作区域。文件在这四个区域之间的转换关系如下
1.1. Workspace: 工作区,平时开发时存放代码的地方
1.2. Index/Stage: 暂存区,用于存放临时改动,保存即将提交的文件列表信息
1.3. Repository: 仓库区(本地仓库) ,安全存放数据的位置,这里有你提交的所有版本的数据,其中HEAD指向最新放入仓库的版本
1.4. Remote: 远程仓库,即托管代码的服务器(GitHub/Gitee)
本地三区域
Directory:使用 Git 管理的一个目录,也就是一个仓库,包含我们的工作空间和 Git 的管 理空间。
WorkSpace:需要通过 Git 进行版本控制的目录和文件,这些目录和文件组成了工作空间。
.git:存放 Git 管理信息的目录,初始化仓库的时候自动创建。
Index/Stage:暂存区,或者叫待提交更新区,在提交进入 repo 之前,我们可以把所有的 更新放在暂存区。
Local Repo:本地仓库,一个存放在本地的版本库;HEAD 只是当前的开发分支(branch)。
Stash:隐藏,是一个工作状态保存栈,用于保存/恢复 WorkSpace 中的临时状态。
2.工作流程
在工作目录中添加、修改文件;
将需要进行版本管理的文件放入暂存区域;
将暂存区域的文件提交到 git 本地仓库。 因此,git 管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
五.仓库创建
1. 创建工作目录
工作目录(WorkSpace)一般就是你希望 Git 帮助你管理的文件夹,可以是你项目的目录, 也可以是一个空目录,建议不要有中文
6 个命令
2. 本地创建/远程克隆
六.文件管理
1. 文件的四种状态
● 版本控制就是对文件的版本控制,在 Git 管理中,文件被统一管理,有四个状态
Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到 git 库, 不参与版本控制. 通过 git add 状态变为 Staged
Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这 种类型的文件有两种处理方式, 如果它被修改, 变为 Modified. 如果使用 git rm 移出版本库, 则成为 Untracked
Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这种文件有两个去处, 通过 git add 可进入暂存 staged 状态, 使用 git checkout 则丢弃修改过, 返回到 unmodify 状态,这个 git checkout 即从库中取出文件, 覆盖当前修改
\4. Staged: 暂存状态. 执行 git commit 则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为 Unmodify 状态. 执行 git reset HEAD filename 取消暂存, 文件状态为Modified
2. 忽略文件
如果不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等, 在主目录 下建立".gitignore"文件(默认就有),此文件有如下规则:
忽略文件中的空行或以井号(#)开始的行
支持 Linux 通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符, 方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等。
如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
如果名称的最前面是一个路径分隔符(/),表示忽略 .gitignore 文件所在的目录,不包 括其任何子目录 中的 dir 目录
如果名称的最后面是一个路径分隔符(/),忽略 .gitignore 文件所在的目录和所有子目 录的 dir
七.分支管理
注意事项和细节说明
如果同一文件在合并分支时都被修改了则会引起冲突, 修改冲突文件后重新提交(说明: 这时要决定保留哪个分支代码)
Master 主分支应该非常稳定,用来发布新版本,一般情况下不要在上面工作,工作一般 在新建的分支(比如 dev、v1.0、v2.0)上工作
分支代码稳定后,可以合并到主分支 Master
在进行分支合并时, 最好是各分支都已经处于 Committed 的状态, 这样可以减小处理合 并冲突的难度. 5. Push 操作, 是 Push 你已经 Committed 的代码, 如果你修改了一个文件, 但是你没有执行 Commit ,那么你 Push 的其实是上次 Committed 的状态
add 、 commit 、push 的操作可以针对单个文件, 也可以针对文件夹(可以看一下 Idea 的 git 操作菜单)
文件要 Commit 前需要先 Add 到 暂存区 , 以后文件修改了, 就可以直接 Commit
如果要删除文件, 可以在本地删除该文件, 然后 commit 文件所在文件夹即可, 并重新 push 该分支, 那么在远程仓库, 也会删除对应分支的文件.