使用SourceTree和GitHub共同开发

GitHub详细教程git

 

 

1 Git详细教程github

 

1.1 Git简介算法

 

1.1.1 Git是何方神圣?服务器

 

Git是用C语言开发的分布版本控制系统。版本控制系统能够保留一个文件集合的历史记录,并能回滚文件集合到另外一个状态(历史记录状态)。另外一个状态能够是不一样的文件,也能够是不一样的文件内容。举个例子,你能够将文件集合转换到两天以前的状态,或者你能够在生产代码和实验性质的代码之间进行切换。文件集合每每被称做是“源代码”。在一个分布版本控制系统中,每一个人都有一份完整的源代码(包括源代码全部的历史记录信息),并且能够对这个本地的数据进行操做。分布版本控制系统不须要一个集中式的代码仓库。网络

 

当你对本地的源代码进行了修改,你能够标注他们跟下一个版本相关(将他们加到index中),而后提交到仓库中来(commit)。Git保存了全部的版本信息,因此你能够转换你的源代码到任何的历史版本。你能够对本地的仓库进行代码的提交,而后与其余的仓库进行同步。你可使用Git来进行仓库的克隆(clone)操做,完整的复制一个已有的仓库。仓库的全部者能够经过push操做(推送变动到别处的仓库)或者Pull操做(从别处的仓库拉取变动)来同步变动。并发

 

Git支持分支功能(branch)。若是你想开发一个新的产品功能,你能够创建一个分支,对这个分支的进行修改,而不至于会影响到主支上的代码。工具

 

Git提供了命令行工具;这个教程会使用命令行。你也能够找到图形工具,譬如与Eclipse配套的EGit工具,可是这些都不会在这个教程中进行描述。学习

 

1.1.2 重要的术语优化

 

Git 术语spa

术语

定义

 

仓库

一个仓库包括了全部的版本信息、全部的分支和标记信息.

Repository

在Git中仓库的每份拷贝都是完整的。仓库让你能够从中

 

取得你的工做副本。

 

一个分支意味着一个独立的、拥有本身历史信息的代码线

分支

(code line)。你能够从已有的代码中生成一个新的分支

Branches

,这个分支与剩余的分支彻底独立。默认的分支每每是叫

 

master。用户能够选择一个分支,选择一个分支叫作

 

checkout.

标记

一个标记指的是某个分支某个特定时间点的状态。经过标

Tags

记,能够很方便的切换到标记时的状态,例如2009年1月25

 

号在testing分支上的代码状态

提交

提交代码后,仓库会建立一个新的版本。这个版本能够在

Commit

后续被从新得到。每次提交都包括做者和提交者,做者和

 

提交者能够是不一样的人

URL

URl用来标识一个仓库的位置

 

用来表示代码的一个版本状态。Git经过用SHA1 hash算法

修订

表示的id来标识不一样的版本。每个 SHA1 id都是160位长

Revision

,16进制标识的字符串.最新的版本能够经过HEAD来获取.

 

以前的版本能够经过"HEAD~1"来获取,以此类推。

 

1.1.3 索引

 

Git 须要将代码的变化显示的与下一次提交进行关联。举个例子,若是你对一个文件继续了修改,而后想将这些修改提交到下一次提交中,你必须将这个文件提交到索引中,经过git add file命令。这样索引能够保存全部变化的快照。

 

新增的文件老是要显示的添加到索引中来。对于那些以前已经提交过的文件,能够在commit命令中使用-a 选项达到提交到索引的目的。

 

1.2 Git 安装 配置

 

咱们使用SourceTree这个软件,他将Git已经配置好了,咱们只须要用就能够了。

 

1.3 开始操做Git

后续将经过一个典型的Git工做流来学习。在这个过程当中,你会使用SourceTree建立一些文件、建立一个本地的Git仓库、提交你的文件到这个仓库中。这以后,你会克隆一个仓库、在仓库之间经过pull和push操做来交换代码的修改。

1.3.1 建立仓库、添加文件和提交更改

每一个Git仓库都是放置在.git文件夹下.这个目录包含了仓库的全部历史记录,.git/config文件包含了仓库的本地配置。

如下咱们会建立一个本地Git工程仓库。

Xcode自带有Git管理,在建立工程时,勾选Source Control便可。

此工程将自带git配置,可是因为Xcode 在git管理上优化有问题,会让电脑出现卡顿,因此咱们不建议用Xcode管理git仓库。

咱们通常采用的方式是,用Xcode创建好工程以后,再运行终端,将此工程变为Git仓库,使用git init命令:

而后,咱们将此工程添加入SourceTree进行管理。

一个本地工程已经添加进来了。

点击进入TuYaPRO工程:

 

1.3.2 commit更改

下方有问号的就是咱们的工程文件,如今咱们将他们添加到Git仓库内。全选他们,点击Commit键。

Commit成功后,出现一条记录和描述。

 

 

1.4 远端仓库(remote repositories)

 

1.4.1 设置一个远端的GitHub仓库

 

咱们将建立一个远端的GitHub仓库。这个仓库能够存储在本地或者是网络上。

 

远端Git仓库和标准的Git仓库有以下差异:一个标准的Git仓库包括了源代码和历史信息记录。咱们能够直接在这个基础上修改代码,由于它已经包含了一个工做副本。可是远端仓库没有包括工做副本,只包括了历史信息。

 

1.4.2 添加远端仓库

首先咱们须要建立一个Repository;

 

填写工程信息:

 

建立完成后,Clone此工程下来,复制此工程的URL:

  

在SourceTree中Clone Repository。

将原来的工程文件拖入TuYaPRO目录中。

全选下面的工程文件,点击commit提交到本地仓库。

 

master中出现一个pull标记,同时多了一条记录:

 

1.4.3 推送更改到GitHub的仓库

在下方的Origin中,显示的是GitHub服务器上的工程,它显示的进度还在第一条Initial commit;这时咱们须要将本地master中的更改Push到GitHub服务器。

点击右上方的Push按钮。

 

提交成功后,咱们看到服务器端的进度已经和咱们本地同步了。

 

1.4.4 拉取(Pull)更改

经过拉取,能够从GitHub的仓库中获取最新的更改。

 

1.4.5 还原更改

若是你还未把更改加入到索引中,你也能够直接还原全部的更改;也能够经过revert命令进行还原操做 。

 

即便你删除了一个未添加到索引和提交的文件,你也能够还原出这个文件,点击Checkout。

若是你已经添加一个文件到索引中,可是未提交。能够经过git resetfile 命令将这个文件从索引中删除。

 

 

1.5 分支、合并

 

1.5.1 分支

经过分支,能够创造独立的代码副本。默认的分支叫master。Git消耗不多的资源就能建立分支。Git鼓励开发人员多使用分支。

点击Branch添加分支;

       

Branches列表会出现Dev分支,咱们能够在此分支开发咱们负责的部分。

 

1.5.2 合并

经过Merge咱们能够合并两个不一样分支的结果。Merge经过所谓的三路合并来完成。分别来自两个分支的最新commit和两个分支的最新公共commit。

咱们在Dev分支进行进行一些工做以后,能够看到Dev和master的进度是不同的。

这时咱们返回master分支,点击merge;

合并以后咱们发现,master已经和Dev同步了。

这时咱们发现orgin和master并不一样步,这时由于咱们的更改并无推送到在线的GitHub服务器,这时咱们能够把咱们的更改Push到Github上,点击Push。

 

这时咱们能够看到服务器和本地都同步了。

可是有时多人开发时,有可能会发生合并冲突。

一旦合并发生了冲突,Git会标志出来,开发人员须要手工的去解决这些冲突。解决冲突之后,就能够将文件添加到索引中,而后提交更改。

 

 

1.5.3 合并请求(pull Requests)一个分支到源仓库

咱们在Github上Fork的项目,当一我的完成开发后,须要提出一个合并请求,请求把本身写的部分与主项目合并。

在Github上的本身Fork的工程右边点击Pull Requests,点击New pull request。

 

这里会比较你和主项目的不一样,而后点击建立pull request。

这里写入你要合并部分的介绍,完成了什么功能等等,点击发送。

项目拥有者收到你的请求,根据你完成的功能,和你沟通后能够选择合并或者否决你的请求。

合并须要手工完成,具体请向度娘了解。

1.6 解决合并冲突

 

若是两个不一样的开发人员对同一个文件进行了修改,那么合并冲突就会发生。而Git没有智能到自动解决合并两个修改。

 

 

 

1.7 连接和文章

1.Git相关学习资源

Github  www.github.com

SourceTree出的Git教程:www.atlassian.com/git

某个台湾人写的Git教程:http://pan.baidu.com/s/1eQBUIe2

一些GitHub资料:http://pan.baidu.com/s/1qW8m5fY

吴丽和王帅帅拍的片儿:

http://pan.baidu.com/share/link?shareid=422160084&uk=2922146712

http://pan.baidu.com/s/128WT3

 

 

 

 

 

 

Author: Duger.Wang<wfyh007@gmail.com>

Date:2013年12月29日 星期日

Github:<github.com/duger>