@IntelliJ IDEA第八部分(视频讲解):Git和Github专讲

发表于 2013 年 9 月 16 日 by Judas.n

IntelliJ IDEA第八部分(视频讲解):Git和Github专讲


录制人 :Judas.n http://www.YouMeek.com
录制时间:2013年9月
录制工具:屏幕录像专家V2012
录制格式:exe(您可以通过“屏幕录像专家V2012”转换成AVI等视频格式)
录制内容:Git和Github的介绍、基本使用,IntelliJ IDEA 中使用git和github


2013-12-09更新:
@IntelliJ IDEA13下Github协同合作全流程(视频教程)


声明:
本视频主要面向写代码而又不会用版本控制的人,如果你也是写代码(不区分任何狗屁语言),那就必须会版本控制,从你一开始学代码的时候就要学这个,任何年龄段,任何性别都要学,初期只学最简单的那部分。(在这里再骂那些大学的教育,草泥马,学写代码之前,请先教版本控制,知道吗?)


目前我手里的资料有:
①两个PDF,《Pro Git中文版》《Git everyone》,后者是台湾一个很良苦用心的童鞋对前者的致敬所做的一个笔记,做得很好,很强大。(台湾有很多愿意静下来整理东西的人,有很多很用心的人,在IT这块。)(《Pro Git》作者官网博客=点击我o(∩_∩)o

②国内这个博客的博主我很欣赏,也是属于我欣赏的用录制视频方式做教学的那类类型,而且很干练,是最近才发现的,真心太感谢了。与之比起来,我还是太弱爆了。目标!所以在这里推荐那些想深入git和使用github,还有linux,rails可以去关注他,这种博主才是好博主,才是一个用心帮助国内技术的人。他的git视频系列不错(看完我这节讲的还要深入git的,优先去他这里观看他的视频)其中关于pull request,我个人感觉他讲的是最好的:
http://happycasts.net/episodes?tag_id=2
http://happycasts.net/episodes/37
http://happycasts.net/episodes/60

③国内还有有一个专讲git的视频系列和一本书《Git权威指南》(书作者博客:=点击我o(∩_∩)o),前者的视频是一个前辈录的,虽然书这本书不是他写的,但是它感觉不错就给这本书录制了视频。虽然我不是很明白他视频里面思维跳跃,可能是因为他是照着书章节说的,而不是实际使用git的角度说,但是还是在此感谢了(录制者官网:=点击我o(∩_∩)o)。

如上面提到的两本书,后者我没看过,前者《Pro Git中文版》是我很很很很喜欢的一个本,重点不是因为书内容有多么NB,也不是作者有多NB(当然了作者很NB),而是因为作者是一个会写书、会教技术的人。他明白新手最开始喜欢读哪些,git哪些基础应该先介绍,然后哪些知识点应该放后面,为什么要放后面,他都会提,很贴心,所以我就要说了,泥马,这才是老师,这才是好老师,这才是一个好的前辈,这才是一个会为人类做贡献的人。(无数个好都无法让我表示对这个作者的欣赏。当然了,我这个人还是很垃圾的,我电脑里面破解软件成堆成片,这些软件易用性所帮我养成的某些偷懒习惯也是我舍不得windows的缘故。在此,向那些完全开源的人表示敬意、)


视频主要内容:
①这个视频主要是面向版本控制的新手(git老手直接看《Pro Git》和Google,我不想浪费你的时间。),不单单是为了讲git这个版本控制。所以会先讲我眼里为什么要版本控制这东西。
②只讲windows下的使用(环境是win8 64位,但是必须提下,git最好的温床是linux。)
③讲最简单的git命令,以后一概用IntelliJ IDEA操作git和使用最基本的github。

视频提纲:
①区分开git和github
首先:github不是技术和软件,github你可以理解成某个公司或是某个公司开发出来的产品。git是一种工具。那这家公司跟git有什么关系了?这个我一直觉得不容易表达,所以容我bug地说,github是个空间商,卖部分虚拟空间服务,虚拟空间肯定是用来存放计算机文件的,而这些计算机文件的存放方式用了git这种技术(工具)来存放的。前面提到了是卖部分虚拟空间,主要是因为github有部分空间是收费的,部分是免费的,免费的空间都是公开的,任何人都可以看得到,收费的一些私人空间,又或是一些公司定制的空间。也因为这些免费的空间,让很多开源的项目迁移到这里来(当然了,我个人感觉迁移过来最重要的原因还是因为它们是用git存放的。)(注:hub有仓库的意思。github的维基百科:=点击我o(∩_∩)o,git的wiki:=点击我o(∩_∩)o)(国内现在比较有名类github的虚拟空间商有:Git@OSC=点击我o(∩_∩)o,CSDN的code:=点击我o(∩_∩)o)(附:git官网=点击我o(∩_∩)o

②为什么要版本控制(一个文件的角度,一个软件的角度)
好了,理解完git和github的关系之后,我们可以抛弃github,来说说git了。git,它是一个分布式+版本+控制+工具,其中分布式这词对新手来说暂时性是没有意义,最重要两个字是“版本”。也许你菜到连“版本”都不理解,不怕,继续听我扯。版本的另一个意思,你可以理解成“历史”。讲历史,这里需要用到两个辅助软件来直观解释:有道云笔记,爱同步,他们就有历史记录功能(这里演示给大家看看)。你现在可以生动地理解这些功能为“时光机”,穿越时空用的。然后我们再来直接看下有使用git的文件的历史版本是怎样子的。(演示IntelliJ IDEA里面的文件hisotry)。从这你会很明显地看到一个文件的版本控制就是这样的思路,然而一个软件或是一个软件项目就是由这类上千个文件组成,他们的版本控制又要怎样了?

对于软件或是程序来说,他们的历史(history)一般正统来讲,叫版本,生活中最常见的就是软件的版本号,比如QQ2012,QQ2013beta2,这是两个版本,名字都是几个数字在变,但是实际上是软件里面的代码在变可能就不少了,代码是一直再增删改中的(看两者官网就知道增加或是减少了很多功能)。那这里有模拟一个场景,假如未来QQ2014出来了,我们下载下来发现很多功能变得很垃圾,很难用,我们十几亿人集体讨伐腾讯,腾讯不想死只有一种办法,再把代码还原到QQ2013版本的状态下,请问,如果没有版本控制这时候要怎么还原了?唯一的一种,在开发QQ2014之前复制一份出来,然后在旧的那份上继续增删改代码。这里的复制,我们可以称做“我们创建了一个新分支,这个分支保持旧代码原样不变,防止出现意外好还原回来”。所以这就是前面说的历史,只会了回到过去。所以版本控制生动地理解成“代码时光机”应该是没有问题的。然后为什么会有这么多不同软件的版本控制呢?比如大家看版本控制的历史中就有CVS,SVN,Git,现在只是比较流行SVN和git。其中以我那愚笨的眼光看,git应该会在后面统治大部分天下,git不管是企业开发和个人学习都很适合,所以这也是我推荐的原因,特别是对个人开发者来说特别好用、高效。在git的WIKI上有这样一句话,很关键:Git和其他版本控制系统(如CVS)有不少的差别,Git本身关心檔案的整体性是否有改變,但多數的CVS,或Subversion系统則在乎檔案内容的差异。因此Git更像一個檔案系统,直接在本機上取得資料,不必連線到host端取資料回来。

回到上面那个QQ2014的问题,现在十几亿人不喜欢这个版本,那只能先把复制那个再重新小改动下,再发一个全新的QQ2014。因为程序员都是懒汉,这样的事情在开发中其实是很多很多的,大到一个软件大版本的迭代,小到一个文件的迭代,他们就开始不爽了,觉得效率太低,这复制时间长,损耗硬盘等等缺点,所以他们就开始思考了,怎样解决这个备份、还原问题。然后我们现在就来演示下git的分支功能的NB地方。(目前版本控制软件中,就git可以把分支做得这样轻松,所以也是它流行起来的一个原因之一。)(IntelliJ IDEA中,建议合并的时候,每次都切换到master分支,然后选择要合并的其他分支,然后合并,这个相当于,master是本地数据,新分支是服务器新数据,然后要把新数据更新到master这个旧数据上,这是我个人习惯。)

③git的实际安装部署和IntelliJ IDEA中的操作(IntelliJ IDEA旗舰版默认自带了git和github环境/插件)
我完整讲从git的环境安装,配置,最简单的命令行操作,IntelliJ IDEA的常用功能操作。(卸载掉就的git,安装最新git环境http://git-scm.com/)

专讲git命令的英文材料:(很不错)
https://www.kernel.org/pub/software/scm/git/docs/

有个git图文安装教程:(很感谢这个有心的作者)
http://www.open-open.com/doc/view/a5b007eb017d49a79f38317ac68b2d10

在涉及到github之前,需要先介绍下蒋鑫老师的这篇目录文章:=点击我o(∩_∩)o,其中在介绍github里面有一段话很重要,=点击我o(∩_∩)o,图1-3那块,这是一段比较生动讲Pull request的解释。


开始配置:
下载环境=点击我o(∩_∩)o(可能需要穿越)
①设置ssh-keygen
(主要是给github这类网络上的用, OSC上面是这样解释为什么需要SSH的:使用SSH公钥可以让你在你的电脑和Git@OSC通讯的时候使用安全连接(git的remote要使用SSH地址) )。
命令$ ssh-keygen -t rsa -C “我的邮箱帐号” 回车,eg:

1
ssh-keygen -t rsa -C "jn3.141592654@gmail.com"

②根据提示输入密码,输入确认密码,回车。打开everything,搜索“.ssh”文件夹,备份的你key。
③登陆github——Account Settings(地址:=点击我o(∩_∩)o)——左侧“SSH Keys”(地址:=点击我o(∩_∩)o)——“Add SSH key”,打开生成id_rsa.pub,复制里面内容。

附:现在我们要把本地的项目提交到github上面,需要先在github上面创建一个新项目,然后在本地上,把那些代码提交上去(15880时间段)

④在本地设置Git两个全局配置信息:
$ git config –-global user.name “我的用户名”,$ git config –-global user.email “我的邮箱”(这里邮箱建议都统一用github帐号一致的),eg:

1
2
git config –-global user.name "judasn"
git config –-global user.email "jn3.141592654@gmail.com"

⑤用命令行初始化仓库和提交代码

1
2
3
4
5
6
7
8
mkdir youmeek-navigation       //不必须命令
cd youmeek-navigation          //不必须命令
git init                       //必须命令
touch README                   //不必须命令
git add README                 //必须命令,用*代表全部
git commit -m "first commit"   //必须命令
git remote add origin git@github.com:judasn/judasn_git_test.git   //不必须命令
git push -u origin master      //不必须命令

输入密码,回车看看github,几个常用按钮:Watch(关注)、Star(加星)、Fork(复制一份)、删除仓库

完整地演示一遍IntelliJ IDEA中初始化一个项目,提交,修改,还原,分支。完整地演示从github上面fork项目,克隆到IntelliJ IDEA并修改代码的整个过程,小例子:
http://fgnass.github.io/spin.js/


好习惯:
不要直接在 master 上写代码, master 主要是用来跟踪上游 master 的。(用IntelliJ IDEA还必须有一个好习惯,用task)


Github常用按钮:
Watch:关注该项目,作者有更新的时候,会在你的Github页面有通知消息。
Star:收藏该项目,在你的头像上有一个“Your stars”链接,可以看到你的收藏列表。
Fork:复制一份项目到的Github空间上,你可以自己开发自己的这个地址项目,然后 Pull Request给项目原主人。


下载视频下载(如果链接被屏蔽,请加我百度云账号:judasn) || Git-1.8.3-preview20130601下载



文章分类: IntelliJ IDEA专讲, 软件/系统   标签: , ,   链接地址: http://www.youmeek.com/intellij-idea-part-viii-git-and-github/
  1. 支持+1,关于视频最后那里,点击那按钮不进行比较,原因是,那个按钮是拿当前文件和历史文件进行比较,但是你把当前文件进行了提交,也就是历史文件也就是当前文件,所以不会出现比较的信息,点击changes可以进行比较。

    • 哦哦,我想起来了,我确实是提交了,然后再傻不拉唧地去比较。。。可能连续讲了一个多钟头脑袋有点晕了!!o(∩_∩)o 哈哈 ,这个视频应该对那些纯新手也没问题吧?我感觉我讲的很通俗了、

    • 做教程只求不误人子弟,只求别人也会独立思考,不要被我左右思想,会自己取舍我的内容。也希望看过的人也会在后面的生活去分享自己喜欢的东西,传播给更多的人!

  2. 正在看博主的视频,非常不错,很实用,自己也是才从eclipse里面转过来的,在说到setting配置的时候我发现有一个特点,除了IDE Settings配置是通用的,而Project Settings其实也可以不依赖与Project进行一些通用的配置,当新建Project时可以默认继承过来。方法就是先配置在打开IDEA时先不直接进入项目,然后重新打开IDEA,可以选择“Configure”选项,然后再选择“Settings”选项,这个时候就能看到左边最上面原来的“Project Settings”配置会变成“Template Project settings“,这样就可以配置一些通用的Project配置,并可以直接导出配置。这样就算换了project空间也比较方便了

  3. 博主:请教你一个问题,如果项目上只是用ssh文件来做项目同步。这个ssh文件应该放在那边进行项目同步呢?

      • 是密钥文件,类似于github上面生成的密钥文件。唯一的区别我们在一台服务器上面部署了git仓库。我们是在那台机子上面做同步的。之前一直用的是eclipse git插件来做同步的。现在转用idea 这一块搞不定。

        • 我现在还没有与自己架设git服务器进行操作过,所以这个暂时没办法给一个肯定问题。但是密钥文件按github经验来讲,本地密钥就是安装git的时候可以生成,然后存放在C盘,这个应该都是一样的。而至于服务器,github或是osc这类,都是登陆到对应后台,创建密钥并存放。所以问题会不会出现在服务器上某个地方需要更改呢?或许你可以再研究下eclipse的经历,然后来推断下IntelliJ IDEA。目前我只能帮到这里了。

          • 服务器这一块是技术总监搞的,我只是觉得IDEA 更加好用一些现在转到IDEA上面来。还是很感谢你的。我再看看吧。根据ssh文件应该和你视频上面一致。但是后面怎么操作还是要考虑考虑

  4. 您好,看了您的视频后对git有了一个新的感受。但是现在遇到了一个问题。版本控制器使用git,但是其中需要加一个gerrit作为review的代码审核器。这样似乎就没有办法在Intellij中做push操作,做push操作就会导致以下错误:Push failed: error: failed to push some refs to ‘gerrit:projectname’。 Intellij官网中有一个Gerrit的插件,但是装上后,还是不好使用。而且也Push不了,这样就不能把开发操作连续起来都在Intellj中完成,这样的感觉很是不好。请问您有遇到过相同的问题吗?或者请问这个问题怎么解决。实在是找不到办法了。

    • 这本书的名字叫《寫給大家的Git 教學》,下载地址:http://oolab.csie.ncu.edu.tw/wiki/images/e/e7/Giteveryone-101022053442-phpapp02.pdf不过这个好像不是最新版,作者的 Blog 上有最新版:http://littleb.tc/slides/2012/everyone/git.html