zoukankan      html  css  js  c++  java
  • Git管理工具对照(GitBash、EGit、SourceTree)

    Git管理工具对照(GitBashEGitSourceTree

    GitBash是採用命令行的方式对版本号进行管理,功能最为灵活强大,可是由于须要手动输入希望改动的文件名称,所以相对繁琐。

    EGitEclipseGit插件,最为纠结的一个软件,由于开发时直操作非常方便,尤其是有svn开发情节的人更热衷于这样,只是EGit中有非常多bug和不人性化的东西,让人吐血,所以

    一句话EGit并不能解决全部Git问题,开发时必须部分依赖于其它Git管理工具。一会一一列举。

    SourceTree是近期应用的一个软件,一句话概括,既有GitBash的命令行,又有EGit的图形化管理,用户界面非常人性化,Eclipse+GitBash全然能够应付版本号管理。

    那么以下我结合项目中开发遇到的问题一一解说一下:

    <>EGit之我见:

    EGit最大的优点是集成在eclipse里面,对于代码改动后提交非常方便,当中我最常使用的部分是:

    (1)简单的Commitpullpush

    (2)Git repository(看资源库视图)(包含新建分支,切分支,合并分支)

    (3)projectreset hard(强制覆盖本地版本号),一些特殊情况会有问题。

    (4)projectcheckout到某一个分支,能够看当时的文件。

    (5)projectshow in history (查看project变更历史),没有时分秒,非常不爽。

    其它的功能我用的不多,由于EGit确实有非常多bug,犯过血淋淋的错误。

    这里解释一下,为什么第一条我要加上”简单的”,由于非常多时候没有pull下来,或者没有push上去,提示的信息非常粗,有时候甚至误以为提交,发现过非常多问题,所以假设确定如今没人和你同一时候改同一个文件,用EGit还是非常爽的。

    <>GitBash之我见:

    一般我主要通过命令行进行pull push 还有 status的操作,这个详见我前一篇文章

    Git Bash+EGit在项目中配合使用最经常用法总结》,命令行用好了非常是非常不错的,除了那种须要手写文件名称的时候,比較不爽,一两个还能够,多了就吐血了。


    <>SourceTree之我见:

    这个是我近期才发现了一个非常好的工具SourceTree,能够说SourceTreeEGitGitBash的合体,既有图形化界面又有git命令行。

    (1)主要的commitpullpush都拥有,并且一旦错误发生的时候提示非常准确。

    (2)主要的分支管理业有,最挫的Egit删除远程分支是假删除,SourceTree完美攻克了这个问题。

    (3)拥有EGit中的reset(重置)和checkout(签出)两大功能,并且更加稳定。最令我怀疑的EGitreset hard也有报错的时候,哎。SourceTree还是非常稳定的。

    (4) 那么近期用SourceTree,发现了一个非常强大的功能,就是“丢弃”这个功能,和checkout事实上原理是一样的。只是图形化界面肯定比較方便了。这里具体解释一下这个功能:

    换句话说,你改了一批文件,假设想提交一部分,保留一部分,无疑命令行最麻烦。

    然后你不满足,当中有几个文件你还想回滚,不想改了。那么SourceTree最easy。

    这里须要注意一下命令行中checkout 是指未add的,那么能够回滚到近期的线上的commit状态。假设add之后又改动,那么会回滚到add之后的状态。

    这一个原理,在Source体现的更明显,例如以下:

    A. 首先我先将改动后的personRiskBase.jsp拖到缓存区中(1)。

    图(1

     

    B. 然后再次改动,发现以下的工作区中也有这个页面了(图2)。

    (图2

     

    C. 如今就能够对此文件进行丢弃了,假设将以下文件丢弃(checkout),那么该文件将变为缓冲区中的文件,假设将缓冲区文件丢弃,实际上回到了近期的commit版本号了(reset操作)

    这里注意,假设该文件commit了,那么checkout实际上回不到commit之前的版本号的,须要reset。以下具体介绍一下reset命令。


    (5) 对于reset功能的应用。这里先普及一下Git理念的事:

    A. 明白一点,每一次commit都是相应着一批操作而不是相应一个文件。

    这点和SVN的设计理念全然不一样。

    这也造成了一个必定的结局:SVN的分支存的是一个project,所以每签出一个分支实际上都是签出一个project。

    Git的分支存的是改动的记录,所以每签出一个分支,实际上都是对原project的一次覆盖。

    B.在开发过程中大家可能会遇到这样一个问题:Pull之后,会出现非常多别人提交的代码须要你本地再又一次提交一次,那么这个原因是这种,当然这个是我个人的理解:Git会把每一次pull结果做两个处理:

    B1.假设pull之后,本地没有不论什么问题,那么不须要再次提交别人改动的东西了,仅仅须要继续你的改动,push就能够了(正常情况下一版都是这样)。

    B2.假设pull之后,本地有问题,大部分情况是冲突的情况,那么Git会把本次当做一次不成功的pull(那么通俗的来讲,git会觉得,你觉得不成功,那么你把这次版本号依照你的想法改一下,再提交吧),所以你做完删减之后,须要把刚才别人的东西再提一次作为一个新的commit


    (6) 对于checkout某一次提交,SourceTree也非常人性化,会给出非常人性化的提示。注意checkout之后,你的project当前不属于不论什么分支,只是能够基于此又一次创建一个分支,非常方便。

    总结一下:这里仅仅列出了一些关键的问题和不同点,当然工具的选择因人而异。大家能够在工作中慢慢体会,假设有问题欢迎大家提出,给我宝贵的意见。(待续)

  • 相关阅读:
    记录:将图片数据生成 tfrecords 文件并在训练使用时读取
    记录:EM 算法估计混合高斯模型参数
    记录:Ubuntu 18.04 安装 tensorflow-gpu 版本
    记录:tf.saved_model 模块的简单使用(TensorFlow 模型存储与恢复)
    记录:TensorFlow 中的 padding 方式
    mybatis list映射
    idea使用插件mybatis-generator-plus生成mapper文件(mysql亲测可用)
    Element-UI树形表格
    Mysql5.7版本ERROR 1055问题
    为DISTINCT、GROUP BY和ORDER BY效率问题提提速
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4273919.html
Copyright © 2011-2022 走看看