Git是分布式版本控制系统,他是没有中央服务器的,每个人的电脑就像是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
下图就是分布式版本控制工具管理方式:
- Git简介
1 Git概念
同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。
到 2005 年的时候,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux的缔造者 Linus Torvalds )不得不吸取教训,只有开发一套属于自己的版本控制系统才不至于重蹈覆辙。他们对新的系统订了若干目标:
• 速度
• 简单的设计
• 对非线性开发模式的强力支持(允许上千个并行开发的分支)
• 完全分布式
• 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
本质:项目开发的管理工具,使用Git可以方便的完成团队的协作开发。以及项目
开发过程中的资源管理。
总结:
分布式:就是将由一个服务器运行的资源,拆分到多个服务器中运行。
2. 版本控制工具的作用
协同修改
多人并行不悖的修改服务器端的同一个文件。
数据备份
不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
版本管理
在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运行效率。这方面 SVN 采用的是增量式管理的方式,而 Git 采取了文件系统快照的方式。
权限控制
对团队中参与开发的人员进行权限控制。
对团队外开发者贡献的代码进行审核——Git 独有。
历史记录
查看修改人、修改时间、修改内容、日志信息。
将本地文件恢复到某一个历史状态。
分支管理
允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。
3. git工作流程
代码工作区--->执行git add --->暂存区(临时存储)--->执行git commit--->本地库(历史版本)
工作区、暂存区和本地仓库,逻辑上是本地计算机。当我们新建一个文件时,文件位于工作区,处于已修改(modified)状态,表明文件已进行了修改,但还没有提交保存;通过命令 git add 将其添加到暂存区,文件是已暂存(staged)状态,表示把已修改的文件放到下次提交时要保存的清单中;通过命令 git commit将文件放入本地仓库,文件为已提交(commited)状态,表示该文件已经被安全地保存在本地数据库中,到这一步可以说是成功生成了一个新的版本。
远程仓库用来将本地仓库上传到网络,实现备份、共享和合作
4. Git官网
5 Git 的优势
大部分操作在本地完成,不需要联网
尽可能添加数据而不是删除或修改数据
分支操作非常快捷流畅
与 Linux 命令全面兼容
- Git常用命令
git init 初始化
全局设置
git config --global user.name "smallming"
git config --global user.email "472818129@qq.com"
设置成功后会在C:\Users\smallming(此目录是Windows系统账号名)中出现.gitconfig
git add filename 添加文件到缓存区
git commit -m “备注” 提交到本地库
git remote add origin 仓库地址 设置远程仓库地址
git push -u origin master 推送到远程仓库
git clone 克隆远程仓库内容
git pull origin master 拉取内容
git rm 删除文件
git checkout -b 分支名 master 创建分支
git branch 查看本地分支
git push origin 本地分支名:远程分支名 推送分支
git branch --set-upstream-to=origin/分支名 关联本地和远程分支
git merge --no-ff 分支名 把分支合并到当前分支(注意先切换到当前分支)
git branch -d 分支名 删除本地分支
git push origin --delete 分支名 删除远程分支
- Git中常用分支及作用
主分支(master):主分支主要用于存放正式版本软件的。
开发分支(Develop):早晚提交时提交到这个分支。最后合并到主分支中。
功能分支(feature):一般为了开发特定功能而创建的分支。
预发分支(release):合并到Master之前做测试的。
修补bug分支(fixbug):软件发布后修补bug的分支。