目的
自己以前使用过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还是很好用的!