git使用心得

来源:互联网 发布:多益网络股价 编辑:程序博客网 时间:2024/06/07 05:45
    git 作为版本控制工具,已经成为协同工作中提交代码维护代码的程序员好帮手,所以了解git的使用对你在正常的编程工作中有很大的帮助,作为Android开发程序员就更应该使用git了,知道为什么?因为git是伟大的Linux创始人linus设计的!Android的爷爷的大大,怎么能不重视呢~
      https://git-scm.com/book/zh/v1        git官方工具指南中文版,git原理及其相关命令的解析这里面都有!
    1 Subversion  vs  Git
        Subversion 曾在实验室做java web项目时使用过,用小乌龟tortoise工具进行commit到远端服务器,从服务器上讲项目拷贝下来等,记得当时师兄是自己架设的服务器,三个人进行协同工作,由于功能十分的明确(是我们功能简单且主力为师兄),从来也没有发生什么conflict等冲突事件,感觉就是有个云端备份,后来知道这货叫做集中式管理,而git恰恰更倾向于分布式管理,两者在具体的文件组织和方式等存在着差异,比如说 git 使用.git 文件来管理所有的元数据等,最重要的区别可能就是git可以在不联网的情况下也可以进行commit,在你本地会有一个版本的记录,从而方便程序员自己对自己的工程代码进行控制管理,而Subversion的提交操作必须是联网状态。
      具体的两者区别,可以查阅学术版:https://git.wiki.kernel.org/index.php/GitSvnComparison
     2 git 初识
     而git的一个总体的组织管理方式主要分为三部分,远端仓库<Remote>,本地仓库<Repository>,工作区域<workspace>
     
       图片摘自网上一篇博客,很抱歉已经忘记出处,向原作者致敬,我一直想画出这么 优雅的图来,一直不晓得工具!

上面的图不仅介绍了git的框架组织,同时还列出了常用的命令,作为一个新手,其使用git的具体步骤一般为下面几条命令:
         git init 
         git clone ssh://XXXX.git  -b branchName        // 可以 拉取远端具体分支上的内容
         // start to your work happily 
         git status                                                            //查看一下现在的状态,一般会列出你更改的内容
         git checkout   -- XX.file                                     // 将某个文件恢复版本之前
         git add .      git add  XX.file                               // 将全部文件或者单个文件增加到你的index库里
         git commit -m "message"                                 // 提交到你本地仓库中,并添加必要的信息
          git diff                                                              // 可以查看你修改的内容,确认是这些信息
          git push origin  master                                     // 提交到远程的master分支上
          git log --oneline                                               // 显示历史的提交信息,注意到每条commit信息前面index标识
          git show 标识号                                                 / / 查看此次commit信息中的内容 
          甚至你可以下载到txt文件里面,再用notepad++打开,效果杠杠的!
          其具体命令如下:    
                            git show 418ac1e
                            git format-patch -k -1 418ac1e
           git pull                                                                
          // 从远程分支拉下内容,一般会有三种情况进行处理        
           A  产生冲突,丢弃本地分支,希望远端内容完全覆盖<刚上手小白,当然以远端为主喽>
               git reset --hard origin/master
          B  我本地内容还是有价值的,看看发生了什么     
       第一种:将本地改动进行保存,然后先保持本地和远端仓库的一致,再进行更改,这里可以用BeyondCompare工具,将你保存的文件和工作区域的文件进行对比,然后再进行git add git commit  git push;
            第二种:将你的修改提交到本地仓库,然后git pull 之后,就会产生相应的冲突, 打开冲突的内容,进行修改,>>>>head>>> ==== 类似的标示进行删除,然后再进行git add , git commit, 这个时候使用git log 命令,你会发现有两条commit log,一条是你自己刚刚添加的commit,还有一条是Merge信息,这个时候再进行git push,将这两天commit一起同步到远端,不过有的时候不希望在远端会有 Merge这类的commit信息,想要去掉这条commit信息也是有很多方法的,比如将两条commit信息合成一条的方法,还有可以reset到其中的一个较前面的标识点,再进行git status的查看,在此标识点的基础上进行commit之类的,就可以不将此Merge信息提交到远端。
           C 好乱,还是重新整理一下吧,回到合并之前吧
               git reset --hard HEAD             
           // 还有两条关于撤销命令的使用,在一些时候很有用           
              git reset  标识号
                会将你index区域回复到标识号此时的状态,git status 之后,会看到你当前工作区域和标识号时的一些文件差异,你可以重新修改进行git push 
                git reset --hard 标识号
                将你的工作区域恢复到标识号的状态,注意此时未提交的信息将全部没有,你可以重新git pull ,让当前的工作区域和本地区域 与 远端仓库保持一致  。
          上面这些命令已经可以hold住作为开发人员之一非主力人员的程序员进行日常工作了,是的,就是我。。。╮(╯▽╰)╭, 其实就只需要管理好 你自己的本地分支和远程分支的同步情况即可。
       2.2 进阶命令            
       
    作为主管级人物,当然要一揽全局,有更复杂的需求,如当项目行进到一定程度的时候,肯定会遇到需要修改一个功能,但是此功能需要时间验证和维护,最好不要影响到当前的版本的稳定,这个时候,就需要分支了,也是git中比较重要且复杂的内容,因为有了分支就需要进行合并,而合并过程就会产生一些冲突,如何进行解决,就非常的显示水平了,必然是在非常清楚地了解git的工作原理和整个分支的结构才能做得到的。<写得不好不要打我>
      以下内容,是对《Android内涵剖析》一书中的git使用章节的理解,推荐大家去看这本书上的此章节,有图分析,写得很不错。
          git checkout -b branchname  =  git branch branchname   git checkout branchname  // 新建分支
          git merge                 
          git checkout master  git merger branchname1         
         // 将 此branchname1分支上的内容合并到当前分支(假设为master分支),master分支会对branchname1上的分支内容进行合并,并产生一个新的结点,branchname1分支没有任何变化,依然存在,master上拥有了branchname1的功能,常常用来作为两个重大功能的合并。
          // 若出现冲突,同样的进行解冲突,只需要解冲突一次,再git commit 就好
         git rebase   
         git checkout branch1    git rebase master                  
        // 这个命令是改变基点的意思,
        常常是master分支有了一个新的改动,测试分支上要根据当前的新基点进行工作,这个时候执行这个命令,使得测试分支上每一次的提交都要跟master上的新节点进行一次合并,因此这样以来,可能测试分支上有多少个提交,你就有可能解几次冲突,rebase之后,master分支还是原来的master分支,测试分支上的每个结点都是新的一个节点。
          当然还有其他的一些进阶命令,如git cherry-pick , 据说源自金融术语,选择最好的樱桃,可是实在没有用过且理解的不好,就不在这里班门弄斧了,希望自已以后如果有机会成为主管级人物能够所有分支进行运筹帷幄时,可以使用并将心得进行增加好了。    
     2.3 git 配置
         .gitignore,在进行github 的使用时,因为一开始没有设置此文件,导致每次git status,都会有很多 build中的文件出现,那个时候我意识到我将此文件给忽略了,是的,就跟它的名字一样。。。半途增加这个文件需要进行一下额外的操作,如下,好像是清理一下缓存:
         git rm --cached .                // 清除暂存区的  gir rm -r --cached .
          git add .
          git  commit -m "gitignore is working now"
        最后的最后,说一下用命令行和工具都可以进行git操作,用命令行还是很有成就感的,啪啪打命令,但是工具却又很好的图形化界面,让你进行快速的管理,比如SourceTree ,SmartGit ,好像都很不错,只不过我还没有完全用熟,个人觉得图形化工具和命令行结合起来一起用,或许会对git的工作原理 会有更快的理解。
0 0
原创粉丝点击