Git小白 -- GitHub的使用

1. 简介

At the heart of GitHub is an open source version control system (VCS) called Git. Git is responsible for everything GitHub-related that happens locally on your computer.

If you're not comfortable using the command line right now, GitHub lets you complete many Git-related actions without using the command line.

要说GitHub,就得先说说Git。

Git是一个分布式版本控制系统。

版本控制可以记录代码变更情况,进行协同工作。比如我自己写点小程序,弄个svn,每天的代码传上去,加点备注,还可以和原来的某个版本进行比较,以此回顾当时编码的一些情况。如果多个人开发一个项目,同一个工程,各自在自己的电脑上编码,完了代码总要合并吧,手工合并?遇到冲突怎么办?所以交给版本控制器吧。

像上面提到的svn,还有.NET系的TFS(当然,版本控制只是TFS的一个子功能),还有挺多的,这些都是集中式的,即有一个中央服务器存放完整的代码版本,每个开发人员开发前先从服务器往本地更新同步最新的版本,在此基础上开发,开发完成并通过本地测试后(避免本地的半成品代码影响他人的开发),再提交到服务器。

产品的出新总是应需求而生。我接触的最早的版本控制器是vss,每次改代码需要check out,把自己要改的文件锁起来,别人要改就乖乖等你改完再说,经常会听到喊“那个谁,xx文件改好了没?快提一下!”。后来我们就改用了cvs,改文件不加锁了,碰到两个人改同一个文件,不是一个块内容能自动给你合并,是一块内容的就给你显示冲突,太好了!后来自然而然又迁到了svn。虽然已经很好用了,但还是有些情况不好处理,比如:

  • 这边开发新功能呢,那边发现个bug,这写了一半的代码怎么办?
  • 为了代码备份,写了一半的代码就往上提,别人更新下来怎么运行?
  • 为了提交完整的功能,等都写完了测试好了再提,第二天电脑开不起来了。。。

不管用什么工具,这些问题总是可以解决的,就是时间成本问题。考虑到这儿,Git可以上场了,Git强大的分支功能可以很好地处理这些问题。

那么Git的分布式体现在哪里呢?每个开发者都可在本地创建完整的代码仓库,进行各种版本控制操作,当需要与他人协同工作时,可将代码推送到对方的代码仓库。

而GitHub呢,可以看作基于Git的远程代码仓库,这样就不用自己建Git服务器了。GitHub上已经托管了大量的开源项目,私人项目都可以放上去,如果不想开源那就请做付费用户。GitHub不仅仅是代码仓库,不仅仅是一个代码开源的地方,它还使得普通开发者能极为方便地参与到开源项目中,为开源项目做贡献。甚至可以把它看作一个社交平台:

One of the great features on GitHub is the ability to see what other people are working on and who they are connecting with.

2. 实战

如果是讲Git,那么将有一堆shell等着你,小白会头晕的哦,幸好咱们现在讲的是GitHub,而GitHub有windows客户端,可以轻松使用不需要写命令行。来这里 https://windows.github.com/ 下载吧,按照向导安装就行。

2.1 个人的单打独斗

我们先从使用GitHub托管自己创建的小工程着手。

2.1.1 创建仓库

然后点击右侧的 Clone in Desktop ,就可以把仓库同步到本地:

  • 如果需要在本地已有的工程目录上创建仓库,就在客户端上操作,点击左上角的新建图标,选择Add,定位到本地工程目录,这样客户端就有了这个新仓库,但你也看到了它在Other分类下,表明它还只是本地仓库,需要publish到GitHub远程仓库:

2.1.2 变更操作

本地仓库中的文件有了变化,比如新增了文件,修改了文件内容,在客户端可以看到 Uncommitted changes,选择确定要提交的文件(默认是全选的),写上修改备注,提交:

这时可以看到多了一条 Unsynced changes,而在GitHub上是看不到这个变更的,因为还没同步。我们点击客户端右上角的Sync,选择自己的账号,Publish,再去GitHub看看,有了吧:

如果发现改错了要回退呢?点击 Revert ,再Sync即可:

Revert了也还能再Revert,强大吧。

本地的提交并不需要每次都去同步,可以按需要比如确定当前的功能开发已经完成了再同步。

2.1.3 分支

直接输入名称,以当前的分支为基础创建新的分支:

要想把新分支的内容合并入原分支,点击上面分支弹出层右上角的Manage,用鼠标左键将待合并的分支拖到底部Merge区域的第一个[drag branch here]框处,把要合并到的分支拖到Merge区域的第二个[drag branch here]框处,点击旁边的Marge就成功了:

既然已经合并,那边新分支就没有作用了,可以在Manage界面上删除。

合并时可能出现冲突:

点击Cancel,然后用你的编辑器打开冲突的文件进行修改,然后提交:

注意:
如果待合并的分支是远程分支,必须把本地的修改同步上去之后,才可以合并,否则是没有效果的哦。

2.1.4 删除仓库

在客户端的仓库列表上右键Remove,只是[移除],不再在此管理,本地代码和服务器上的代码都不会有影响,通过Add还能再加入管理。

如果确定要删除仓库,在GitHub上此仓库的Setting -> Options 的最底端 Delete this repository,删除时要求输入仓库名以避免误删。

2.2 体验团队的力量

A账号创建的仓库,其他账号是不能向其中push代码的。

  • 同一个团队的成员共同开发:增加Collaborators

这样Xerrys用户将xjsylhl/test2克隆到本地,修改提交后可以同步了:

  • 外部开发者贡献代码:使用Fork


然后在客户端上Clone下来,就可以修改了,最好建个自己的分支。

确定可以提交代码时,点击右上角的 Create Pull Request,选择目标分支,写上注释信息,提交后,目标分支的管理员会收到Pull Request,可以选择合并或者拒绝,提交者则会收到相应的处理邮件。

基础常用的功能就差不多了,其它功能如有需要以后再补充了。

原文地址:https://www.cnblogs.com/qhlinhl/p/4517228.html