目的

自己以前使用过3,4个月的SVN,因为公司使用的是git,git gui.所以打算自学git gui,并记录一下学习心得.^_^

原因

为什么不是学命令行而是用git gui呢.我觉得首先因为公司用这个........另外GUI操作起来确实比命令行简单直观.我觉得有时间去记命令行,不如把时间花到学其他东西上面.并且git不是很重要.我只要会简单实用即可.所以没必要一开始就学习命令行(其实是因为我比较懒 0.0 ).

因为重来没有使用过git.所以可能文章会有一些错误,望谅解.

其他废话.......

另外这篇文章不是教程,只是记录我学习心得.

我不太喜欢严肃的教程,并且大家学习的时候并不总是一次就成功吧.

所以更喜欢记录我的学习过程.....和一些奇妙的探索研究过程(坑爹过程)...

创建本地仓库

我在F:\git-test\test1下创建了一个test1.txt,并在里面输入了文字first test!

我想把这个test1文件夹下的所有东西进行版本控制,只要在test1文件夹下右键点击git gui here.

然后在弹出的窗口中选择创建新的版本库.

此时会弹出一个窗口

我一开始以为是询问我要把test1文件夹的版本控制仓库设置在哪里.

我随便选择了一个文件夹以后发现并没有对test1文件夹进行版本控制.而是对我选择的那个文件夹进行了版本控制.........Σ( ° △ °|||)︴

所以此时我选择目录为test1文件夹.

我选择test1这个文件夹做为仓库.然后点击新建按钮.

然后发现test1文件夹下多了一个.git文件夹(是隐藏的),我觉得这里是储存了一些git版本控制文件吧.

此时git gui画面变化了

这里git gui显示当前分支是master.我想是因为还没有创建其他分支,所以默认应该就是master分支吧.

到这里仓库就创建好啦 ^_^.

提交

创建好仓库之后我已经等不及想要提交前面第一次修改的txt文档啦.

因为git gui已经列出了未缓存的改动.所以我们不用点击"重新扫描"按钮.如果以后更新了文件,这里就需要用git gui重新扫描了.

然后应该点击"缓存改动"按钮,把文件放到临时的缓存区里.

再点签名并完成提交描述并提交就OK啦.

其实这里我想插一句,这个环节git和SVN貌似有点区别,点缓存改动的时候文件被放到了缓存区里,这时是可以再把文件从缓存区里删除的.如果把文件放到缓存区里以后再更新文件再缓存的话会覆盖缓存区里的东西.也就是说我觉得缓存区里并没有版本控制.就是简单的覆盖.只有把缓存区里的东西提交到仓库才能版本控制...但是SVN好像就没有缓存区(SVN我用的时间也不多..一直没发现有缓存区)..点提交就直接上传到SVN的仓库里去了...这里有点区别...至于为什么要多设计一个缓存区呢....我也不明白...我觉得一般人点了缓存改动以后肯定会再写描述并提交吧....好像没什么人会把文件缓存了不放到仓库里就结束了.... 0.0

另外因为版本库里的更新是从缓存区里来的,所以如果缓存文件以后再更新文件,不缓存直接提交的话那版本库里的文件和最新的文件不一样的.还是因为这个道理,所以可以选择缓存部分文件并提交.

好处在于我本地的配置环境和服务器的环境可能不一样.我可以只把程序更新到版本库,不把配置文件更新上去...

上传

虽然git是分布式的....但是大家还是会选择一个中央仓来储存文件(坑爹啊这是)...

虽然github很火...但是我还是喜欢国内速度更快的oschina作为仓库.(其实是因为他能免费创建私有项目...虽然github我也通过了学生认证..但是过半年后可能就要作废了...)

我在oschina上创建了一个私有项目.我准备进行上传...

oschina提示我们有SSH和HTTPS两种上传方式...其他教程我看都是SSH的方式...要添加公钥什么的...所以我就采用HTTPS吧....(我就是要作死....)

此时点击git gui上面菜单的remote远程..我好像没有添加过远程服务器地址....git gui肯定不知道我要传到oschina上...所以我凭借着我的直觉应该选择"Add"按钮.

不明白名字这里应该写什么.....further action又是啥东西捏 ?_?

虽然我觉得这里further action应该选择第2个选项...但是我就是要作死...看看有发生什么...(笑)

然后就没有然后了................设置完成了...我应该点击"上传"按钮,在"提交"按钮的下方.....

然后就出现了一个我看不懂的界面=.=

经过0.1秒思考后我果断点了"上传"按钮........

然后输入账号密码(oschina的)....

竟然上传成功了!!!!!!!!!!!!!!!!!!!

我好兴奋....又修改了几次文件并上传了多次....

然后我发现每次上传竟然都需要提供账号密码

难道HTTPS每次都需要账号密码吗.....我去试试SSH吧.....git gui的帮助菜单里有show SSH key....

经过2小时的研究....终于得出结论........那就是.......我TM就是SB.....

我整整试了2小时!!!!!!!!!!!!!!!!!.....最后发现SSH提交确实不需要输入账号密码....然后我想说的是经过这2小时的研究大家一定要注意的一个问题.....

那就是要好好看说明.......

部署公钥不是SSH公钥...添加了的话只能用只读方式访问项目!!!!!!!!!!!!!!!

添加SSH公钥应该在SSH公钥里添加!!!!!!!!!!!!!!!

我的2小时就浪费在这上面了!!!!!!!!!!

添加完SSH以后就能方便的提交啦!

从服务器获取更新

现在我来试试如何从浏览器获取更新的文件...首先我去oschina通过网页修改了txt文件....

打开git gui点击重新扫描,发现没有任何变化...果然是还没从服务器获取更新的原因所致.

点击远程remote,从..获取(fetch).....然后git gui显示获取成功啦!!!!!!!!!!^_^

不要吐槽我把远程服务器设置名为hello2.....-_-|||

然后点击重新扫描发现还是没反应,查看历史也没发现有最近版本的迹象.

然后我点击合并(merge),本地合并.

系统提示合并到master分支.我想是因为我当前就在master分支的原因吧....下面要合并的版本里有很多选项,默认选择的是追踪分支....我也不知道那是什么意思....先不管他吧...我点"合并"按钮.

提示成功了...

然后我打开文件发现txt的文字确实是变化啦!

看来我能做到在家里和在学校同步git啦....可以和SVN说拜拜啦...哈哈哈哈哈!

小问题

不过我到现在还没明白从服务器获取更新以后怎么看哪些文件变化了呢? 服务器获取更新以后更新文件又是储存在了哪里呢?

--后来研究了会我发现在本地合并里有个图示按钮,点击可以查看合并的具体细节,比如哪个文件要合并,合并前后文字分别是怎样的..

仓库搬家

本来我仓库和工作区是在test1目录下...我想把它删掉,放到test2文件夹下怎么办呢.....

经过我尝试发现貌似有2种办法...

第一种就是clone.....把项目从oschina上完整克隆到test2文件夹下就可以啦..然后删除test1就行...但是这样比较慢...

第二种我目前还没发现什么问题...很简单粗暴...直接把test1下所有文件(千万记得.git)复制到test2目录下就OK啦!!....这样速度绝对最快....不过有没有什么后遗症我目前还没发现...貌似是可以使用的...毕竟整个git都搬过去啦...

分支

呃.....其实我SVN也没用过分支....自己只写过一点小玩意儿....一直没尝试过分支....现在来尝试一下git的分支....看看git的分支是怎么玩的呢 o(≧v≦)o~~

新建分支

在git gui点击分支,新建,然后我输入了一个新的分支名字:newbranch1.

点击新建以后就新建了这个分支并且切换到这个分支的页面了.然后我点"上传"就在oschina自动创建了这个newbranch1分支!

我在newbranch1里新建了一个文件newbranch1.txt...然后正常提交上传(前面的步骤差不多),oschina上的newbranch1就多了newbranch1.txt.

在oschina查看master分支后发现文件没有变化.

切换分支

现在test1文件夹下是newbranch1的状态...我想尝试下切换到master的状态..

点击git gui"分支"菜单....发现并没有切换分支类似的选项...好神奇.............那怎么办呢?(其实checkout就是)

我还是点了"新建"按钮..

发现本地分支里多了newbranch1....我想根据字面意思这里大概就是列出了所有本地分支吧...那我在"名字"那一栏什么都不输入....然后再本地分支选择"master"再点新建试试.

结果提示错误....

那我选择"匹配跟踪分支名字"选项,再点"本地分支","master",再点新建试试.

依旧是提示错误,提示"请选择某个追踪分支".

我看到追踪分支选项里列出的都是服务器上的分支....看来这样操作的话只能从服务器上克隆一个分支的文件并在本地新建一个分支...这并不是我想要的结果...所以新建选项不对...

那就试试checkout吧...

仔细研究后我发现了,是点击分支菜单里的"checkout"选项,然后在本地分支里选择"master"就可以切换到master分支啦!

分支合并

假如我现在的master分支就一个master.txt这么一个文件。。。

然后我去创建一个新的分支,叫做bug好了。。。

创建bug.txt增加一行文字,再为master.txt增加一行文字。。然后提交。。

再切换回master修改master.txt并提交

现在我想把bug分支合并到master上!

点击git gui菜单上的合并-本地合并

点击合并(merge)

然后git gui会提示合并有冲突。。。这是意料之中的。。因为master.txt中的文字在2个分支里是不一样的,git也不知道怎么帮我们合并。。所以只能靠我们自己来解决这冲突

在冲突正文(就是显示具体哪些文字冲突那里)那里右键可以选择是使用远程版本还是本地版本再或者使用更基础的版本(就是冲突的内容全删了)。。这样就把冲突解决了。。就可以提交啦。

然后我们来看看文件变化

嗯。确实是合并成功啦!

哈哈哈哈。。git gui还是很好用的!

git gui 学习的更多相关文章

  1. Git学习总结(7)——Git GUI学习教程

    前言 之前一直想一篇这样的东西,因为最初接触时,我也认真看了廖雪峰的教程,但是似乎我觉得讲得有点多,而且还是会给我带来很多多余且重复的操作负担,所以我希望能压缩一下它在我工作中的成本,但是搜索了一下并 ...

  2. Git 学习笔记之(一) 使用 git gui 从github上下载代码

    背景: 目前一些开源代码均在 GitHub上管理的,包括自己写的代码也可以放在上面进行管理.但问题是,当你换一台电脑,想要将你自己放在 GitHub 上的代码工程下载下来的时候,会遇到各种问题,目前可 ...

  3. 如何通过Git GUI将自己本地的项目上传至Github

    最近在学习node.js和react,顺便复习了下AngluarJS相关的东西,写了些小demo想放在GitHub上,之前仅限于只申请了GitHub账号从没用过,今天花半天时间查资料认真学习Githu ...

  4. Git GUI下载远程源代码简单使用介绍

    学习编程,适当的时候弄些开源项目的源代码来学习实践,对技术是很有帮助的.如果学习.NET.C#的话,codeplex上面有许多不错的源代码,推荐一个ASP.ENT的:HoverTree http:// ...

  5. 图解Windows下 GIT GUI 使用教程

    https://jingyan.baidu.com/article/19020a0a7ae6af529c284248.html 本篇经验将和大家介绍Windows下 GIT GUI 使用教程,希望对大 ...

  6. 如何通过Git GUI将自己本地的项目上传至Github(转)

    githud是一个程序员以后成长都会使用到的,先不说很多优秀的开源框架都在这上面发布,光是用来管理自己的demo都已经让人感到很方便,用得也很顺畅.而真正让我下定决心使用github的原因是因为两次误 ...

  7. Git基本命令学习

    Git是一个由林纳斯·托瓦兹为了更好地管理linux内核开发而创立的分布式版本控制/软件配置管理软件,如今已经超越CVS.SVN称为主流的版本控制器.许多著名的开源项目都用Git管理,比较火的托管服务 ...

  8. shell重温---基础篇(shell变量&字符串以及git GUI运行shell脚本方式)

    既然是基础篇那肯定是需要对shell的各种需要注意的基本点进行说明了.接下来就是show time...    shell呢,是一个用C语言编写的应用程序,是用户使用linux的桥梁.所以呢,他既是一 ...

  9. Git可视化极简易教程 — Git GUI使用方法

    Git可视化极简易教程 — Git GUI使用方法 学习了:http://www.runoob.com/w3cnote/git-gui-window.html

随机推荐

  1. HTML 5 的自定义 data-* 属性和jquery的data()方法的使用

    人们总喜欢往HTML标签上添加自定义属性来存储和操作数据.但这样做的问题是,你不知道将来会不会有其它脚本把你的自定义属性给重置掉,此外,你这样做也会导致html语法上不符合Html规范,以及一些其它副 ...

  2. linux中位置参数变量和预定义变量

    位置参数变量   预定义变量

  3. Windows10 会不会成为微软的新起点?

    Because if you change the way you see the world, you can change the world you see. 如果你改变看世界的方式,你就能改变 ...

  4. Linux下5种IO模型的小结

    概述 接触网络编程,我们时常会与各种与IO相关的概念打交道:同步(Synchronous).异步(ASynchronous).阻塞(blocking)和非阻塞(non-blocking).关于概念的区 ...

  5. Java基础知识笔记(三:文件与数据流)

    一.输入流与输出流 输入流将数据从文件.标准输入或其他外部输入设备中加载到内存.输出流的作用则刚好相反,即将在内存中的数据保存到文件中,或传输给输出设备.输入流在Java语言中对应于抽象类java.i ...

  6. 《InsideUE4》-10-GamePlay架构(九)GameInstance

    一人之下,万人之上 引言 上篇我们讲到了UE在World之上,继续抽象出了Player的概念,包含了本地的ULocalPlayer和网络的UNetConnection,并以此创建出了World中的Pl ...

  7. HDU 1848 Fibonacci again and again【SG函数】

    对于Nim博弈,任何奇异局势(a,b,c)都有a^b^c=0. 延伸: 任何奇异局势(a1, a2,… an)都满足 a1^a2^…^an=0 首先定义mex(minimal excludant)运算 ...

  8. Python版本共存之道:virtualenv和virtualenvwrapper

    以前觉得根本用不着这个,但是写不同项目的时候就遇到了问题,不可能把之前的全部删掉从新安装,于是就想到了这个,终于还是要学它, 现在做一个命令的总结,方便自己和大家查询 #以下以对 test 为名的虚拟 ...

  9. Python函数作用域的查找顺序

    函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...

  10. [MVC]如何删除文章内容中的图片

    1.实现代码 if (!string.IsNullOrWhiteSpace(entity.Content)) { var immgList = TextHelper.GetImgUrlList(ent ...