注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

断尘居

温柔的男人像海洋。

 
 
 
 
 

日志

 
 

GitHub超详细图文攻略(下)  

2014-08-13 12:20:53|  分类: Git / SVN |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

三. 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字母顺序确定, 排序没有很明确的意义;

-- 列出所有的标签 :  

  1. git tag  
-- 使用限定列出限定后的标签 : 

  1. git tag -l v1.*  



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

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

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


创建标签 :

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

  1. git tag v2.0  


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

  1. git tag -a v2.1 -m 'first version'  

-- 创建GPG私钥的注释标签 : 

  1. git tag -s v2.1 -m 'GPG version'  

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

  1. Administrator@XRDPTJ9ILK6IWRA /storage/TabHost_Test (master)  
  2. $ git tag -s v2.2 -m 'GPG version'  
  3. gpg: error loading `iconv.dll': 找不到指定的模块。  
  4.   
  5. gpg: please see http://www.gnupg.org/download/iconv.html for more information  
  6. gpg: keyblock resource `c:/Documents and Settings/Administrator/.gnupg\secring.g  
  7. pg': file open error  
  8. gpg: keyblock resource `c:/Documents and Settings/Administrator/.gnupg\pubring.g  
  9. pg': file open error  
  10. gpg: skipped "HanShuliang <13241153187@163.com>": secret key not available  
  11. gpg: signing failed: secret key not available  
  12. error: gpg failed to sign the data  
  13. error: unable to sign the tag  
以后再找原因;

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

  1. $ git log --oneline  
  2.   
  3. f1bb97a first commit  
  4.   
  5. git tag -a v3.1 f1bb97a  


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

  1. git tag -d v0.1  



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

  1. git tag -v v1.0  


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

  1. git push origin --tags  



3. 分支和合并


(1) 查看现存分支


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

  1. git branch  

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


(2) 创建分支


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

  1. git branch branch1  


(3) 切换分支


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

  1. git checkout branch1  


关于主分支和其它分支 : 

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

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

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

.

对比过程 : 


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

  1. git branch  

-- 分支结果 : 

  1. branch1  
  2. master  


切换到 branch1 分支 : 

  1. git checkout branch1  
-- 切换结果 : 

  1. Switched to branch 'branch1'  


查看 branch1 分支下的文件 : 

  1. ls  
-- 查看文件结果 : 

  1. AndroidManifest.xml  ic_launcher-web.png   res  
  2. assets               libs                  src  
  3. bin                  proguard-project.txt  
  4. gen                  project.properties  

创建一个文件 : 

  1. touch description_branch1.txt  

添加这个文件到本地缓存 :

  1. git add description_branch1.txt  

提交本地缓存 : 注意, 这里必须提交, 如果不提交缓存, 这个文件在主分支也会出现;

  1. git commit -m 'add a description of branch1'  
-- 提交结果结果 : 

  1. [branch1 7f5785e] add a description of branch1  
  2.  1 file changed, 0 insertions(+), 0 deletions(-)  
  3.  create mode 100644 description_branch1.txt  

查看该分支下的文件 : 

  1. ls  
-- 查看文件结果 : 

  1. AndroidManifest.xml      libs  
  2. assets                   proguard-project.txt  
  3. bin                      project.properties  
  4. <strong>description_branch1.txt</strong>  res  
  5. gen                      src  
  6. ic_launcher-web.png  

切换回主分支 : 

  1. git checkout master  

-- 切换分支结果 : 

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


查看主分支文件 : 

  1. ls  
-- 查看文件结果 : 没有在 branch1 中添加的文件;

  1. AndroidManifest.xml  ic_launcher-web.png   res  
  2. assets               libs                  src  
  3. bin                  proguard-project.txt  
  4. gen                  project.properties  


.


(4) 提交分支 


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

  1. git push origin experiment  


(5) 分支合并移除


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

  1. git merge branch1  
合并结果 : 

  1. Updating f1bb97a..7f5785e  
  2. Fast-forward  
  3.  description_branch1.txt | 0  
  4.  1 file changed, 0 insertions(+), 0 deletions(-)  
  5.  create mode 100644 description_branch1.txt  




.

(6) 删除分支


删除分支命令 : 

  1. git branch -d branch1  

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

  1. git branch -D branch1  


4. Git工作流程


(1) 两种工作流程


协作开发工作流程 : 这种情况是最复杂的情况, 多人团队共同开发一个项目;

-- 与远程仓库同步 : git pull ;

-- 修改文件 : 添加 删除 修改文件;

-- 查看变更 : git status ;

-- 载入变更 :添加文件, 先使用git add fileName, 在使用 git commit -m 'note' 载入变更; 如果是删除 修改文件, 直接使用 git commit -m 'note' 提交;

-- 重复 : 重复执行 修改文件 查看变更 载入变更 提交载入动作;

-- 上传 : 使用 git push 命令将项目源码提交带GitHub中去;


单独开发工作流程 : 如果是个人独立开发, 仅追踪本地文件变更, 就不需要提交到服务器上, 因为Git是分布式的;

-- 修改文件 : 

-- 提交变更 : 

-- 重复 : 


(2) 简单示例


1> 独立开发示例


该示例不会上传, 仅在本地进行操作;


从GitHub中检出项目源码 : 注意, 检出的源码是根目录源码, 我们在总仓库的根目录检出即可,不同再为项目创建目录;

  1. git clone git@github.com:han1202012/AndroidPictureViewer.git  
-- 检出克隆结果 : 

  1. Cloning into 'AndroidPictureViewer'...  
  2. remote: Counting objects: 86, done.  
  3. remote: Compressing objects: 100% (62/62), done.  
  4. remote: Total 86 (delta 3), reused 86 (delta 3)  
  5. Receiving objects: 100% (86/86), 1.67 MiB | 109.00 KiB/s, done.  
  6. Resolving deltas: 100% (3/3), done.  
  7. Checking connectivity... done.  

删除bin和gen目录 : 这两个目录是Android工程编译产生的临时文件, 没有必要上传到GitHub中去;

  1. rm -rf bin gen  
-- 查看删除结果状态 : 

  1. git status  
-- 结果 : 

  1. On branch master  
  2. Your branch is up-to-date with 'origin/master'.  
  3.   
  4. Changes not staged for commit:  
  5.   (use "git add/rm <file>..." to update what will be committed)  
  6.   (use "git checkout -- <file>..." to discard changes in working directory)  
  7.   
  8.         deleted:    bin/AndroidManifest.xml  
  9.         deleted:    bin/ImageView_Test.apk  
  10.         deleted:    bin/classes.dex  
  11.         deleted:    bin/res/crunch/drawable-xxhdpi/ic_launcher.png  
  12.         deleted:    bin/resources.ap_  
  13.         deleted:    gen/shuliang/han/imageview_test/BuildConfig.java  
  14.         deleted:    gen/shuliang/han/imageview_test/R.java  


提交缓存 : 

  1. git commit -a  
-- 提交结果 : 

  1. [master e4377ba] delete bin and gen directory.  
  2.  28 files changed, 2 insertions(+), 110 deletions(-)  
  3.  create mode 100644 .gitignore  
  4.  delete mode 100644 bin/AndroidManifest.xml  
  5.  delete mode 100644 bin/ImageView_Test.apk  
  6.  delete mode 100644 bin/classes.dex  
  7.  delete mode 100644 bin/resources.ap_  
  8.  delete mode 100644 gen/shuliang/han/imageview_test/BuildConfig.java  
  9.  delete mode 100644 gen/shuliang/han/imageview_test/R.java  


2> 协作开发示例


与远程仓库同步 : 

  1. git pull  

-- 如果其他人没有提交项目到GitHub上, 就会出现下面结果 : 

  1. Already up-to-date.  

修改文件后查看变更 : 

  1. git status  
-- 如果没有变更会出现下面情况 : 

  1. On branch master  
  2. Your branch is ahead of 'origin/master' by 1 commit.  
  3.   (use "git push" to publish your local commits)  
  4.   
  5. nothing to commit, working directory clean  

载入变更 : 如果有变更, 那么使用命令载入变更. 使用 git commit -a 或者 git add 命令;

-- 添加文件 : 先使用 git add 文件名 来添加文件到缓存, 之后使用 git commit -m '' 命令提交代码到本地缓存;

-- 删除改变文件 : 直接使用 git commit -m '', 提交删除 或则 改变 到本地缓存;


提交项目源码到服务器 : 

  1. git push  
-- 提交源码结果 : 

  1. warning: push.default is unset; its implicit value is changing in  
  2. Git 2.0 from 'matching' to 'simple'. To squelch this message  
  3. and maintain the current behavior after the default changes, use:  
  4.   
  5.   git config --global push.default matching  
  6.   
  7. To squelch this message and adopt the new behavior now, use:  
  8.   
  9.   git config --global push.default simple  
  10.   
  11. See 'git help config' and search for 'push.default' for further information.  
  12. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode  
  13. 'current' instead of 'simple' if you sometimes use older versions of Git)  
  14.   
  15. Counting objects: 4, done.  
  16. Delta compression using up to 2 threads.  
  17. Compressing objects: 100% (2/2), done.  
  18. Writing objects: 100% (3/3), 292 bytes | 0 bytes/s, done.  
  19. Total 3 (delta 1), reused 0 (delta 0)  
  20. To git@github.com:han1202012/AndroidPictureViewer.git  
  21.    1ddf8c7..e4377ba  master -> master  


查看GitHub中的源码情况 : gen 和 bin 目录果然被删除了;



------------------------------------

原文:http://blog.csdn.net/shulianghan/article/details/18812279

  评论这张
 
阅读(1094)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017