Git版本管理工具对比(GitBash、EGit、SourceTree)
Git管理工具对比(GitBash、EGit、SourceTree)
GitBash是采用命令行的方式对版本进行管理,功能最为灵活强大,但是由于需要手动输入希望修改的文件名,所以相对繁琐。
EGit是Eclipse的Git插件,最为纠结的一个软件,因为开发时直操作很方便,尤其是有svn开发情节的人更热衷于这样,不过EGit中有很多bug和不人性化的东西,让人吐血,所以
一句话EGit并不能解决所有Git问题,开发时必须部分依赖于其他Git管理工具。一会一一列举。
SourceTree是最近应用的一个软件,一句话概括,既有GitBash的命令行,又有EGit的图形化管理,用户界面很人性化,Eclipse+GitBash完全可以应付版本管理。
那么下面我结合项目中开发遇到的问题一一讲解一下:
<一>EGit之我见:
EGit最大的好处是集成在eclipse里面,对于代码修改后提交很方便,其中我最常使用的部分是:
(1)简单的Commit,pull,push。
(2)Git repository(看资源库视图)(包括新建分支,切分支,合并分支)
(3)工程reset hard(强制覆盖本地版本),一些特殊情况会有问题。
(4)工程checkout到某一个分支,可以看当时的文件。
(5)工程show in history (查看工程变更历史),没有时分秒,很不爽。
其他的功能我用的不多,因为EGit确实有很多bug,犯过血淋淋的错误。
这里解释一下,为什么第一条我要加上”简单的”,因为很多时候没有pull下来,或者没有push上去,提示的信息很粗,有时候甚至误以为提交,发现过很多问题,所以如果确定现在没人和你同时改同一个文件,用EGit还是很爽的。
<二>GitBash之我见:
一般我主要通过命令行进行pull push 还有 status的操作,这个详见我前一篇文章
《Git Bash+EGit在项目中配合使用最常用方法总结》,命令行用好了很是很不错的,除了那种需要手写文件名的时候,比较不爽,一两个还可以,多了就吐血了。
<三>SourceTree之我见:
这个是我最近才发现了一个很好的工具SourceTree,可以说SourceTree是EGit和GitBash的合体,既有图形化界面又有git命令行。
(1)基本的commit、pull、push都拥有,而且一旦发生错误的时候提示很准确。
(2)基本的分支管理业有,最挫的Egit删除远程分支是假删除,SourceTree完美解决了这个问题。
(3)拥有EGit中的reset(重置)和checkout(签出)两大功能,而且更加稳定。最令我怀疑的EGit的reset hard也有报错的时候,哎。SourceTree还是很稳定的。
(4) 那么最近用SourceTree,发现了一个很强大的功能,就是“丢弃”这个功能,和checkout其实原理是一样的。不过图形化界面肯定比较方便了。这里具体解释一下这个功能:
换句话说,你改了一批文件,如果想提交一部分,保留一部分,无疑命令行最麻烦。
然后你不满足,其中有几个文件你还想回滚,不想改了。那么SourceTree最容易。
这里需要注意一下命令行中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的分支存的是一个工程,所以每签出一个分支实际上都是签出一个工程。
而Git的分支存的是修改的记录,所以每签出一个分支,实际上都是对原工程的一次覆盖。
B.在开发过程中大家可能会遇到这样一个问题:Pull之后,会出现很多别人提交的代码需要你本地再重新提交一次,那么这个原因是这样的,当然这个是我个人的理解:Git会把每一次pull结果做两个处理:
B1.如果pull之后,本地没有任何问题,那么不需要再次提交别人修改的东西了,只需要继续你的修改,push就可以了(正常情况下一版都是这样)。
B2.如果pull之后,本地有问题,大部分情况是冲突的情况,那么Git会把本次当做一次不成功的pull(那么通俗的来讲,git会认为,你认为不成功,那么你把这次版本按照你的想法改一下,再提交吧),所以你做完删减之后,需要把刚才别人的东西再提一次作为一个新的commit。
(6) 对于checkout某一次提交,SourceTree也很人性化,会给出很人性化的提示。注意checkout之后,你的工程当前不属于任何分支,不过可以基于此重新创建一个分支,很方便。
Git工程迁移方法总结
Git最近准备迁移一下位置,这里采用命令行的方式,做如下操作。
1. git remote set-url origin 资源库地址
这里主要是将本地库与远程的资源库挂钩。
用一个图表示:
2.接下来面对两种情况,也就是git位置2是否是空地址。
a) 如果是空地址,ok很简单。
用这个命令:git push ,如果不好使可以使用强推 git push -f
当然这是把目前的工程推送到远程默认分支(master)
扩展:如果想把本地包括master在内的所有分支一起推送出去,可以使用以下方法:
(1)git push --all -f (理论可以的)
(2)保险一点采用如下命令:(一定是可以的)
git checkout 分支名
git push origin test(本地分支):test(远程分支)
如果不好用,确定是要覆盖的话,可以加一个-f
git push -f origin test(本地分支):test(远程分支)
b) 如果不是空地址,ok也很简单,先将该地址清空,再push。
这里我采用的清空方式是这样。
首先,在本地创建一个文件夹,然后使用:
git clone 地址
将本地与远程库挂钩,然后使用清除命令。
git rm .
或者git rm -r 文件件名(删除文件夹)
然后再push,这样远程仓库就被清空了。然后再执行a)
Git版本管理工具对比(GitBash、EGit、SourceTree)的更多相关文章
- Git管理工具对比(GitBash、EGit、SourceTree)
Git管理工具对比(GitBash.EGit.SourceTree) GitBash是采用命令行的方式对版本进行管理,功能最为灵活强大,但是由于需要手动输入希望修改的文件名,所以相对繁琐. EGit是 ...
- Git管理工具对比(GitBash、EGit、SourceTree)(转载)
Git管理工具对比(GitBash.EGit.SourceTree) GitBash是采用命令行的方式对版本进行管理,功能最为灵活强大,但是由于需要手动输入希望修改的文件名,所以相对繁琐. EGit是 ...
- GitBash、EGit、SourceTree三个Git管理工具对比
Git管理工具对比(GitBash.EGit.SourceTree) GitBash是采用命令行的方式对版本进行管理,功能最为灵活强大,但是由于需要手动输入希望修改的文件名,所以相对繁琐. EGit是 ...
- GIT版本管理工具
原文:http://blog.csdn.net/ithomer/article/details/7527877 Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介 ...
- Git——版本管理工具(一)
Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git —— The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背 ...
- Git 版本管理工具(一)
转自:http://blog.csdn.net/ithomer/article/details/7527877 Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介 ...
- GIT版本管理工具教程
目录 GIT版本管理工具教程 一 Git初始化 二 简单指令使用 基本操作 简单总结 三 Git进阶 Git三大区域 Git回滚 Git分支 Git工作流 四 Github代码管理仓库 第一步:注册G ...
- 开启我的python之路,第一节,git版本管理工具
git版本管理工具 一.git功能与结构 1.Git是分布式管理系统,服务端和客户端都有版本控制功能,都能进行代码的提交,合并 2.git分为工作区,暂存区,本地仓库和远程仓库 二.git安装与查看 ...
- 可视化Git版本管理工具SourceTree的使用
最近去了新公司,发现公司使用的团队版本管理工具是SourceTree,本人一直是SVN的热衷粉,很少使用git,所以从头学习git及可视化客户端SourceTree的使用,本贴只针对新手,大牛可以无视 ...
随机推荐
- 列表选择Spinner
1.只用XML配置来显示列表 在res\values中添加一个arrays.xml 1 <?xml version="1.0" encoding="utf-8&qu ...
- http请求与传参
这并不算是文章,暂时只做粗略地记录,以免忘记,因此会显得杂乱无章,随便抓了几个包和对postman截图,日后有空再完善 1.get方式 只有一种方式,那就是在url后面跟参数 2.post方式 1)表 ...
- win、mac系统配置本地电脑ip为域名教程
win系统: 如何修改hosts文件 主机文件原内容如下: #Copyright(c)1993-2009 Microsoft Corp. # #这是Windows的Microsoft TCP / IP ...
- luoguP2735 电网 Electric Fences
一道校内模拟赛遇见的题 ** 不会正解就真的很麻烦的 数学题 ** 有一种东西叫 皮克定理 发现的千古神犇: 姓名:George Alexander Pick(所以叫皮克定理呀 国籍:奥地利(蛤!竟然 ...
- 洛谷P1455搭配购买
传送门啦 这是强连通分量与背包的例题 需要注意的就是价值和价格两个数组不要打反了.. 另外 这是双向图!!! #include <iostream> #include <cstdio ...
- GeoHash核心原理解析 - OPEN 开发经验库
阅读目录 引子 一.感性认识GeoHash 二.GeoHash算法的步骤 三.GeoHash Base32编码长度与精度 三.GeoHash算法 四.使用注意点 引子 机机是个好动又好学的孩子,平日里 ...
- python 统计MySQL大于100万的表
一.需求分析 线上的MySQL服务器,最近有很多慢查询.需要统计出行数大于100万的表,进行统一优化. 需要筛选出符合条件的表,统计到excel中,格式如下: 库名 表名 行数 db1 users 1 ...
- Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件
前言: 忙完了结婚乐APP的开发,终于可以花一定的时间放在博客上了.好了,废话不多说,今天我们要带来的效果是苹果版本的QQ下拉刷新.首先看一下目标效果以及demo效果: 因为此效果实现的步骤 ...
- Spring+Dubbo集成Redis的两种解决方案
当下我们的系统数据库压力都非常大,解决数据库的瓶颈问题势在必行,为了解决数据库的压力等需求,我们常用的是各种缓存,比如redis,本文就来简单讲解一下如何集成redis缓存存储,附github源码. ...
- USACO 5.1 Starry Night
Starry NightIOI 98 High up in the night sky, the shining stars appear in clusters of various shapes. ...