github_1

来源:互联网 发布:淘宝商家互刷群 编辑:程序博客网 时间:2024/06/05 19:30

What is GitHub?

如果你是一个程序员,那么你一定对GitHub不陌生。从名字上就可以看出来——GitHub就是git的hub,即托管git库的平台,所以,如果要从头讲起,需要先说说git。

我们知道,为了减少开发风险、同时提高工作效率,这个世界上产生了各种各样的版本管理工具。比较有名的有:vss、cvs、svn、git,现在比较常用的是后两者,可以通过比较来加深大家的理解。(并不是比较两者的好坏,因为svn和git是不同的东西)

    首先说一下svn,因为svn逻辑和模型都比较简单。svn是更为集中式的版本管理系统,参与项目的所有成员共享一份代码,而且这份代码保存在统一的服务器上(代码仓库中),可以认为每个人手里实际上是没有任何代码的,因为每个人本地保存的那份代码文件其实只是服务器代码的一个拷贝,必须保持同步。所以你会发现,svn的所有操作,例如update/add/commit/delete等等,必须在与服务器保持连接的情况下才能进行。也就是说,如果想使用版本管理服务,必须有网!

我们会想,万一堵车的时候无聊想修改代码怎么办?如果用svn,修改好的代码无法提交,修改过程中也没法新建分支或者退回之前的版本,实际上与正常操作文件没有任何区别,版本管理的功能全没了。而如果用git就能解决这一问题。

git与svn最重大的区别是,git非常强调离散化,也就说git类似于分布式系统,每一个人的电脑上都保存有一个功能完整的git仓库,每个人在本地就可以在版本管理的控制下,上传/下载/删除/添加/修改文件。此时的修改,仅限于这个人的本地的git库(但是因为版本库是完整的,所以可以享受完整的版本管理服务)。git比svn多提供一对提交/获取函数,叫push/pull,也就是说,原来svn通过commit就完成代码提交工作了,但是git还不够,git commit之后只是修改了本地库,还需要通过git push才能把修改提交到远程remote库(就是在GitHub上的啦),完成一次修改。

而且git中所谓的服务器的角色被弱化了,现在的Server只是一个与其他人一样的用户,只不过他对于手中的代码有绝对的权限,叫master。别人提交给他的代码,需要由他审核后,才能添加到他的代码库中,其他人没有权限直接修改他的代码库。但是我们知道,因为每个人手中都有一份完整的git库,所以这个master不是绝对的,例如,User2向User1提交他对代码的修改时,User1就成了master,因为User2希望修改User1的代码库,反之亦然。

 

多人开发同一个项目的示意图见下方。可以看出,git下面每个人的工作都更加独立。当你fork出一条新分支后,你就是这条分支的master,你也可以在之后把他人继续修改的代码merge到自己的分支上,也可以提交自己分支上的修改给他人,让别人merge过去。

总结一下。git是一种版本管理工具,与另一种简单的版本工具svn相比,git可以保证在每台机子上都有一个完整的代码库,并可以在本机上享受版本管理服务功能。git需要两步才能完成一次代码修改的提交工作,分别是git commit(修改提交给本地库)和git push(修改提交到远程库)。GitHub就是网上一个托管git库的平台。

现在,不妨访问一下GitHub官网,注册一个GitHub账号。

 Why to choose GitHub?

GitHub上面有很多十分十分优秀的资源。包括Facebook、Twitter、Microsoft等企业都在上面托管自己的项目。我们可以围观一下GitHub上最受欢迎的项目:

https://github.com/popular/starred

Twitter的bootstrap永远是第一,其他大名鼎鼎的项目例如node.js、jquery、ruby-on-rails、three.js和Linux,没错,Linux也在GitHub上,谁让git也是Linus Torvalds做的呢。

       GitHub现在也逐渐成为研究组织展示成果的平台。一个比较有名的例子就是UC Berkeley下面的AMP Lab,他们做的Spark、Mesos还有最近刚出的逆天玩意Tachyon,都托管在GitHub上,所有人都可以自由下载源码,贡献自己的修改。我们当然也可以用这个平台来学习。

         GitHub也可以算是一个社交平台,只不过参与社交的都是程序猿,有句话说:“代码是程序员最好的交流方式”。我们可以关注感兴趣的项目,就能及时获取更新的信息,同时也可以把自己的成果发布,展示给感兴趣的人。也可以接收他人的修改,一起进步等等。

How to use GitHub?

现在GitHub已经十分强大,而且git操作十分自由,所以并没有特别一致的操作指南,一般都是根据需求输入相应命令。

首先要了解一些简单的概念:

  • Repository : 简称为repo,库,是GitHub管理的基本单位。新建项目时,我们都是新建一个repo。
  •  Fork : 如果接触过与进程相关的知识,就应该很熟悉这个跟叉子扯不清关系的操作了,fork可以“复制”出一个与父进程一模一样的子进程,同样,在GitHub中,当你fork了别人的repo时,GitHub会把别人repo的内容完完整整“复制”一份给你,而且你就是那个新生成的repo的主人。(会保留一个fork与被fork的关系)
  • Pull Request : 这是GitHub的“Fork-Pull模式”的另一个基础操作,Pull Request的作用是,当你fork了别人的repo,之后你进行了一定的修改,想要把修改贡献给被fork的原作者时,你可以发起一个Pull Request,此时GitHub会把你的修改发送给原作者,原作者审查觉得可以后,他会把你的修改merge到自己的代码上,这样你就对他的代码做了贡献。
  • Clone : 就是克隆,即把别人的git库直接完整地下载到本地,此时这个库的master还是原作者,所以你没有权限提交自己的修改,但如果你git clone的是自己的库,那就没什么问题了。Fork就相当于clone下来后再把master改成自己。需要提到的一点是,git库跟源代码是两个概念,源代码包含在git库中,但同时,git库还需要保存你的版本信息、提供git相关操作的支持等等,显而易见的一点是,git库多一个.git的隐藏文件。
  • Fetch : 获取库里的全部内容,需要在git库中执行(也就是说之前clone过)。
  • Merge : 合并fetch到的最新代码与本地的代码。
  • Pull : 获取最新内容并合并,相当于fetch+merge。
  • Commit : 修改提交到本地git库
  • Push : 修改提交到远程git库

 

还有一些细碎的东西。

git status  很常用,查看修改的情况。

git log     不那么常用,查看日志。

git add    把修改加到需要提交的缓冲中,每次commit前都执行一次,如”git add –A .”

git rm     删文件!(加-r是删文件夹,跟shell一样的)

git config  在本地配置一下你的用户名密码

……

         具体安装和命令可以直接看网上的资料,这里推荐两个:

很有冲击力的 :http://rogerdudler.github.io/git-guide/index.zh.html

可爱的章鱼 :    http://www.codeschool.com/courses/try-git

具体操作上,GitHub现在可以提供三种操作方式:

  • 直接在线修改:比较直白,不需多说。
  • 命令行操作:推荐,主流用法,也是之前唯一的用法。
  • PowerShell:也是GitHub上的项目,只在Windows下面,提供界面,简化操作。