《GIT入门PPT.ppt》由会员分享,可在线阅读,更多相关《GIT入门PPT.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、版本控制版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。分类:本地版本控制系统集中化的版本控制系统分布式版本控制系统GIT分布式版本控制系统分布式版本控制系统GIT简史早期Linux的开发人员是使用BitKeeper来管理版本控制和维护程式码。2005年的时候,开发BitKeeper的公司同Linux内核开源社区结束合作关系,并收回使用BitKeeper的权利。Torvalds开始着手开发Git来替代BitKeeper。随着Git的快速发展,很多有名的软件都使用Git来进行版本控制。GIT特点多数操作仅添加数据直接记录快照,而非比较差异GIT特点(续)近乎所有操作
2、都是本地执行 (离线操作)时刻保持数据完整性(SHA-1 哈希值)文件流转的三个工作区域: 工作目录,暂存区域,以及本地仓库工作目录,暂存区,和本地仓库注:Stage 和 index 是同一个概念Git 工作流程在工作目录中修改某些文件。对修改后的文件进行快照,然后保存到暂存区域。提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。git对象Git 是一套内容寻址文件系统。这种说法的意思是,Git 从核心上来看不过是简单地存储键值对(key-value)。它允许插入任意类型的内容,并会返回一个键值,通过该键值可以在任何时候再取出该内容。安装GIT支持多种平台Windows/MAC下
3、直接从官方网站:http:/git- 下载最新二进制发行版Linux下(以Debian/Ubuntu为例)$ apt-get install git从官网下载源码自己编译安装配置GIT配置用户名称和电子邮件地址,以在commit log中体现出来。#git config -global user.name zhangsan#git config -global user.email “查看已有的git配置信息#git config -list配置单个git项目的配置#git config user.email 配置core.autocrlf Windows和Unix系统下文件换行的方式不同,因
4、此建议进行以下配置:windows系统下:#git config -global core.autocrlf trueUnix类系统下:#git config -global core.autocrlf input获取帮助想了解 Git 的各式工具该怎么用,可以阅读它们的使用帮助,方法有三:$ git help $ git -help$ man git-比如,要学习 config 命令可以怎么用,运行:$ git help config使用GIT仓库在工作目录初始化新的git仓库:#mkdir hello#cd hello 该目录称为工作目录#git init 将会在当前目录产生.git文件夹
5、(即git目录)创建一个bare仓库(无工作目录,一般在服务器上使用):#mkdir hello.git#cd hello.git#git init -bareClone一个仓库$git clone URLgit add 和git commit$git add 将未跟踪或已修改的文件加入到暂存区域#git add hello.c$git commit 将暂存区域的文件提交到版本库,(如果使用-a 选项已跟踪已修改未暂存的文件也会提交)#git commit -m add hello world module提交消息(commit message)使用 git commit会提示写提交消息或者
6、git commit -m “msg.”建议的消息模板:本次更新的简要描述(50 个字符以内)如果必要,此处展开详尽阐述。段落宽度限定在 72 个字符以内。某些情况下,第一行的简要描述将用作邮件标题,其余部分作为邮件正文。其间的空行是必要的,以区分两者(当然没有正文另当别论)。如果并在一起,rebase 这样的工具就可能会迷惑。另起空行后,再进一步补充其他说明。- 可以使用这样的条目列举式。- 一般以单个空格紧跟短划线或者星号作为每项条目的起始符。每个条目间用一空行隔开。git status查看工作目录状态三种文件状态:Changes to be committed Changes not s
7、taged for commit Untracked files git log显示提交日志$ git logcommit 96a8a6dff817ec66f44342007202690a93763949Author: zhangsan Date: Mon Dec 9 21:52:11 2013 +0800 add hello world mit hash(SHA-1 校验和)2.作者的名字和电子邮件地址3.提交时间4.最后缩进一个段落显示提交说明也可使用git自带的图形工具gitk(历史记录更直观)git分支git branch分支操作基于当前分支,新建一个名为develop的分支#git
8、branch develop 换到develop分支#git checkout develop 简化上面两个操作为一个操作#git checkout -b develop 从某个历史提交创建分支#git checkout -b temp 8f7a493c分支合并Git merge 合并分支#git checkout master 转到主分支#git merge bugfix 合并1个bug修复分支#git merge newfeature 合并1个新特征分支与服务器同步git push和git pull为远程仓库(URL)添加一个别名:#git remote add origin userse
9、rver:/path/repo.git#git fetch origin 同步服务器上的数据到本地#git merge origin/master 合并(一般是快进主分支)#git pull origin mater简化了git fetch和git merge两个操作#git push origin loacal_branch:remote_branch 更新远程仓库#git push origin :serverfix 删除远程的serverfix分支git diff比较差异 #git diff 比较的是工作区和暂存区的差别 #git diff -cached 比较的是暂存区和版本库的差别
10、#git diff HEAD 可以查看工作区和版本库的差别 每次commit后,git diff -cached没有内容,是因为暂存区的内容已经更新到版本库中,因此暂存区和版本库中的内容无差别git reset撤销操作git reset mixed ,是将git的HEAD变了,并根据HEAD来更新暂存区,但文working tree的文件并没有改变。git reset soft . 实际上,是git reset mixed id 后,又做了一次git addgit reset herd .是将git的HEAD变了,文件也变了(相当于回到某个提交,之后的改变都将灰飞烟灭)。以上的1,2条用于重新
11、整理提交,第3条用于放弃之后的修改注意: 一定要在理解了的基础上使用.gitignore过滤文件忽略规则a.空行用于分割,便于阅读,#号开头表示注释,空行和 # 会被git忽略。b.*号匹配文件或目录名中的0或多个字符,但不包含表示文件目录的反斜杠/ ; ?匹配单个字符;方括号表示匹配其中的一个字符。 *.ao 匹配 *.a *.o * foo0-9.c 匹配foo0.c foo1.c . foo9.cc. 以反斜杠开头的表示只匹配当前目录下 /todo 匹配当前目录下的todo,子目录下的todo不会匹配d. 以反斜杠结尾的表示匹配目录 即 doc/ 忽略整个 doc目录e.!对规则取反,即
12、包含之前忽略掉的文件。如: *.html !index.html 表示除了名为index.html文件,其它的html文件均忽略(如果文件名含#或!可使用转义,eg:#*#)怎样进行团队协作开发Git支持多种开发流程(Git Flow),典型的有:集中式工作流(如下图)集成管理员工作流司令官与副官工作流git使用惯例要早提交,常提交,并且不要觉得麻烦1. 每个提交的修订都会为你提供一个还原点。如果你完全把代码搞砸了(没骗你,我们都这么做过),你是希望恢复到一个小时前的工作还是一周前的工作?2. 合并文件时会出现的危险会随着时间不断增加。合并文件一直很麻烦。如果你不是每天都保持提交代码,某一天你
13、会突然发现你和其他人的更改内容会有50多个冲突。你不会为此感到高兴的。3. 它促使你把任务分离成分散的单元。通常人们都是快完成的时候才提交的,因为他们想把代码做成一个完整的逻辑单元模块。不过庞大的任务不可避免地要分离出较小的分散功能,而频繁地提交它们会使你更了解它们,你可以一个个地构建并提交。git使用惯例(续)写提交信息时一定要认真解释清楚为什么要提交新的代码,同一个程序员之后提交信息绝不能和前面的完全相同.这里列出一些提交信息的反面教材反面教材:1. 什么也没做2. 能跑了3. 解决了一些混帐问题4. 解决了5. 改进了一点bug6. 上传了7. 排字错误8. 修订1024git使用惯例(续)常用git status查看工作目录状态提交前要检查你更改了什么(使用git diff)不要上传你自己的用户设置附属文件也要集成在一起,比如更新了新的第三方库(无源码的.a .so文件)临时文件,编译生成的文件不要放进源代码管理软件里(使用.gitignore来忽略),也不要通过复制或者打包文件来进行备份