Git使用教程

一. Git介绍


分布式 : Git版本控制系统是一个分布式的系统, 是用来保存工程源代码历史状态的命令行工具;


保存点 : Git的保存点可以追踪源码中的文件, 并能得到某一个时间点上的整个工程项目额状态; 可以在该保存点将多人提交的源码合并, 也可以会退到某一个保存点上;


Git离线操作性 :Git可以离线进行代码提交, 因此它称得上是完全的分布式处理, Git所有的操作不需要在线进行; 这意味着Git的速度要比SVN等工具快得多,  因为SVN等工具需要在线时才能操作, 如果网络环境不好, 提交代码会变得非常缓慢; 


Git基于快照 : SVN等老式版本控制工具是将提交点保存成补丁文件, Git提交是将提交点指向提交时的项目快照, 提交的东西包含一些元数据(作者, 日期, GPG等);


Git的分支和合并 : 分支模型是Git最显著的特点, 因为这改变了开发者的开发模式, SVN等版本控制工具将每个分支都要放在不同的目录中, Git可以在同一个目录中切换不同的分支;

分支即时性 : 创建和切换分支几乎是同时进行的, 用户可以上传一部分分支, 另外一部分分支可以隐藏在本地, 不必将所有的分支都上传到GitHub中去;

分支灵活性 : 用户可以随时 创建 合并 删除分支, 多人实现不同的功能, 可以创建多个分支进行开发, 之后进行分支合并, 这种方式使开发变得快速, 简单, 安全;


二. Git通用客户端(msysgit)


1. 下载Git客户端


Git客户端下载地址 :https://code.google.com/p/msysgit/downloads/list 将地址复制到浏览器栏即可下载.


2. 安装Git客户端


欢迎界面 : 直接下一步;



协议 : 必须接受;



安装位置 : 预留100M空间, 自定义安装位置;



选择安装组件 :也可以默认选择;

-- 图标组件(Addition icons) : 选择是否创建快速启动栏图标 或者 是否创建桌面快捷方式;

-- 桌面浏览(Windows Explorer integration) : 浏览源码的方法, 单独的上下文浏览 只使用bash 或者 只用Git GUI工具; 高级的上下文浏览方法 使用git-cheetah plugin插件;

-- 关联配置文件 : 是否关联git配置文件, 该配置文件主要显示文本编辑器的样式;

-- 关联shell脚本文件 : 是否关联Bash命令行执行的脚本文件;

-- 使用TrueType编码 : 在命令行中是否使用TruthType编码, 该编码是微软和苹果公司制定的通用编码; 



开始菜单快捷方式目录 : 设置开始菜单中快捷方式的目录名称, 也可以选择不再开始菜单中创建快捷方式;



设置环境变量 : 选择使用什么样的命令行工具, 一般情况下我们默认使用Git Bash即可, 默认选择;

-- Git自带 : 使用Git自带的Git Bash命令行工具;

-- 系统自带CMD : 使用Windows系统的命令行工具;

-- 二者都有 : 上面二者同时配置, 但是注意, 这样会将windows中的find.exe 和 sort.exe工具覆盖, 如果不懂这些尽量不要选择; 



选择换行格式 

-- 检查出windows格式转换为unix格式 : 将windows格式的换行转为unix格式的换行在进行提交;

-- 检查出原来格式转为unix格式 : 不管什么格式的, 一律转为unix格式的换行在进行提交;

-- 不进行格式转换 : 不进行转换, 检查出什么, 就提交什么;



开始安装 : 



安装结束 : over;



3. 配置GitHub


修改Git Bash的配置 : 将Git Bash设置为快速编辑模式, 可以更好的使用该命令行工具 : 

二. Git的一些用法


1. .gitignore文件


屏蔽文件 : .gitignore文件是告诉Git哪些目录或者文件需要忽略, 这些文件将不被提交; 

常用场景 : 写完代码后会执行变异调试等操作, 使用 .gitignore 文件将这些编译后的文件屏蔽, 这些文件不需要Git工具进行管理;

Android中的.gitignore : 在Android中 bin 和 gen 两个目录可以忽略;

.gitignore位置 : 项目根目录下;


过滤模式 : Git中的 .gitignore 中有两种模式,开放模式 保守模式,保守模式的优先级要高于开放模式;


开放模式 : 设置哪些文件 活 目录 被过滤, 凡是在文件中列出的文件或者目录都要被过滤掉;

-- 过滤目录 : /bin/ 就是将bin目录过滤, 该文件下的所有目录和文件都不被提交;

-- 过滤某个类型文件 : *.zip *.class 就是过滤zip 和 class 后缀的文件, 这些文件不被提交;

-- 过滤指定文件 : /gen/R.java, 过滤该文件, 该文件不被提交;


保守模式 : 设置哪些文件不被过滤, 凡是列在其中的文件都要完整的提交上去;

-- 跟踪目录 : !/src , 该目录下的所有文件都要被提交;

-- 跟踪某类文件 : !*.java , 凡是java文件都要保留;

-- 跟踪指定文件 : !/AndroidManifest.xml , 该文件需要保留, 提交上去;


配置原则 : 一般情况下采用开放模式鱼保守模式共同使用;

eg : 一个目录下有很多目录和文件, 当我们只需要保留其中的一个文件的时候, 先用开放模式不保留这些文件, 然后用保守模式将这个文件留下来, 保守模式的优先级要高于开放模式;


2. 标签使用(Tag)


标签作用: 在开发的一些关键时期,使用标签来记录这些关键时刻, 例如发布版本, 有重大修改, 升级的时候, 会使用标签记录这些时刻, 来永久标记项目中的关键历史时刻;


查看标签: 列出的标签安装ASCII字母顺序确定, 排序没有很明确的意义;

-- 列出所有的标签 :  

git tag
--  使用限定列出限定后的标签  
git tag -l v1.*



标签分类 : Git中的标签分为 轻量级标签(lightweight) 和 带注释的标签(annotated), 一般情况下推荐使用带注释的标签, 如果标签是临时的可以采用轻量级标签;

-- 轻量级标签 : 轻量级标签中的信息含量很少, 这种标签只代表某时刻代码的提交, 相当于指向这个提交的指针;

-- 带注释标签 : 这种标签是一种校验和, 包含标签名, 邮箱, 日期, 标签信息, GPG签名 和 验证, 它相当于一个对象, 封装了这些信息;


创建标签 :

-- 创建轻量级标签 : 这样的标签没有附带其它的信息;

git tag v2.0


--  创建带注释标签  : -m 后跟的是注释信息, 当使用git show v2.1的时候, 会显示这个注释信息;
git tag -a v2.1 -m 'first version'

--  创建GPG私钥的注释标签  
git tag -s v2.1 -m 'GPG version'

在本机上实验不成功 出现下面的错误 

Administrator@XRDPTJ9ILK6IWRA /storage/TabHost_Test (master)$ git tag -s v2.2 -m 'GPG version'gpg: error loading `iconv.dll': 找不到指定的模块。gpg: please see http://www.gnupg.org/download/iconv.html for more informationgpg: keyblock resource `c:/Documents and Settings/Administrator/.gnupg\secring.gpg': file open errorgpg: keyblock resource `c:/Documents and Settings/Administrator/.gnupg\pubring.gpg': file open errorgpg: skipped "HanShuliang <13241153187@163.com>": secret key not availablegpg: signing failed: secret key not availableerror: gpg failed to sign the dataerror: unable to sign the tag
以后再找原因;

-- 为之前的提交添加标签 : 先使用 git log --oneline 命令列出之前的提交, 会有一个七位的十六进制数进行标记, 使用git tag -a v3.1 f1bb97a 命令即可为这个提交添加标签;

$ git log --onelinef1bb97a first commitgit tag -a v3.1 f1bb97a


删除标签 : 使用命令 git tag -d 标签名 命令删除标签;

git tag -d v0.1



验证标签 : 提交了GPG带注释标签才可以验证, 因为上面没有提交成功, 这里留下一个命令;

git tag -v v1.0


共享标签 : 即将标签提交到GitHub中;

git push origin --tags



3. 分支和合并


(1) 查看现存分支


查看现存分支 : git branch命令;

git branch

从结果可以看出, 现在只有一个分支master;


(2) 创建分支


创建分支 : git branch 分之名称, 就可以创建一个分支, 创建完分支以后可以查看分支, 当前使用的分支会显示成为绿色, 前面带有 "*", 如果不是当前使用的分支, 显示的是白色, 并且没有 "*" 前缀;

git branch branch1


(3) 切换分支


切换分支 : git checkout 分支名称, 切换分支以后, 在分支进行操作,文件的改变不会体现在master主分支中, 主分支改变, 会体现在其它分支中;

git checkout branch1


关于主分支和其它分支 

-- 分支编辑 : 现有两个分支 master 主分支, 和刚创建的branch1 分支, 切换到 branch1 分支, 在branch1 中创建一个文件 description_branch1.txt; 

-- 其它分支文件不会影响主分支 : 然后在切换回 master 主分支, 发现没有description_branch1.txt文件, 创建一个文件 description_master.txt;

-- 主分支会影响其它分支 : 在切换回 branch1 分支中, 发现存在 description_master.txt文件;

.

对比过程 


查看该工程项目分支情况 : 

git branch

-- 分支结果 

  branch1* master


切换到 branch1 分支  
git checkout branch1
-- 切换结果  
Switched to branch 'branch1'


查看 branch1 分支下的文件  
ls
--  查看文件结果  
AndroidManifest.xml  ic_launcher-web.png   resassets               libs                  srcbin                  proguard-project.txtgen                  project.properties

创建一个文件  
touch description_branch1.txt

添加这个文件到本地缓存  :
git add description_branch1.txt

提交本地缓存  : 注意, 这里必须提交,  如果不提交缓存, 这个文件在主分支也会出现 ;
git commit -m 'add a description of branch1'
--  提交结果结果  
[branch1 7f5785e] add a description of branch1 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 description_branch1.txt

查看该分支下的文件  
ls
--  查看文件结果  
AndroidManifest.xml      libsassets                   proguard-project.txtbin                      project.propertiesdescription_branch1.txt  resgen                      srcic_launcher-web.png

切换回主分支  
git checkout master

-- 切换分支结果 

Switched to branch 'master'Your branch is up-to-date with 'origin/master'.


查看主分支文件  
ls
--  查看文件结果  : 没有在 branch1 中添加的文件;
AndroidManifest.xml  ic_launcher-web.png   resassets               libs                  srcbin                  proguard-project.txtgen                  project.properties


.


(4) 提交分支 


提交分支命令 : 将本地的分支提交到 GitHub中;

git push origin experiment


(5) 分支合并移除


合并分支命令 : 合并分支之后, 分支中有的文件在 主分支中也会显示, 相当于将branch1 分支中的文件拷贝了一份到master分支中;

git merge branch1
合并结果  
Updating f1bb97a..7f5785eFast-forward description_branch1.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 description_branch1.txt




.

(6) 删除分支


删除分支命令 

git branch -d branch1

强制删除分支命令  : 如果branch1 分支还没有被合并的话, Git是不允许删除这个分支的, 此时要想删除该分支, 就只能使用下面的命令强制删除该分支 : 
git branch -D branch1


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值