标签:
关于Git
Git是用C语言开发的分布版本控制系统。版本控制系统可以保留一个文件集合的历史记录,并能回滚文件集合到另一个状态(历史记录状态)。另一个状态可以是不同的文件,也可以是不同的文件内容。举个例子,你可以将文件集合转换到两天之前的状态,或者你可以在生产代码和实验性质的代码之间进行切换。文件集合往往被称作是“源代码”。在一个分布版本控制系统中,每个人都有一份完整的源代码(包括源代码所有的历史记录信息),而且可以对这个本地的数据进行操作。分布版本控制系统不需要一个集中式的代码仓库。
当你对本地的源代码进行了修改,你可以标注他们跟下一个版本相关(将他们加到index中),然后提交到仓库中来(commit)。Git保存了所有的版本信息,所以你可以转换你的源代码到任何的历史版本。你可以对本地的仓库进行代码的提交,然后与其他的仓库进行同步。你可以使用Git来进行仓库的克隆(clone)操作,完整的复制一个已有的仓库。仓库的所有者可以通过push操作(推送变更到别处的仓库)或者Pull操作(从别处的仓库拉取变更)来同步变更。
Git支持分支功能(branch)。如果你想开发一个新的产品功能,你可以建立一个分支,对这个分支的进行修改,而不至于会影响到主支上的代码。
Git提供了命令行工具;这个教程会使用命令行。你也可以找到图形工具,譬如与Eclipse配套的EGit工具,但是这些都不会在这个教程中进行描述。
术语解释:
仓库 :一个仓库包括了所有的版本信息、所有的分支和标记信息.
Repository : 在Git中仓库的每份拷贝都是完整的。仓库让你可以从中 取得你的工作副本。
分支:一个分支意味着一个独立的、拥有自己历史信息的代码线 ,你可以从已有的代码中生成一个新的分支 Branches ,这个分支与剩余的分支完全独立。默认的分支往往是叫 master。用户可以选择一个分支,选择一个分支叫做 checkout 标记 一个标记指的是某个分支某个特定时间点的状态。通过标 记Tags,可以很方便的切换到标记时的状态,例如2009年1月25 号在testing分支上的代码状态
提交 :提交代码后,仓库会创建一个新的版本。这个版本可以在 Commit 后续被重新获得。每次提交都包括作者和提交者,作者和 提交者可以是不同的人
URL :URl用来标识一个仓库的位置 用来表示代码的一个版本状态。Git通过用SHA1 hash算法
修订 : 表示的id来标识不同的版本。每一个 SHA1 id都是160位长 Revision ,16进制标识的字符串.最新的版本可以通过HEAD来获取. 之前的版本可以通过"HEAD~1"来获取,以此类推。
索引 :Git 需要将代码的变化显示的与下一次提交进行关联。举个例子,如果你对一个文件继续了修改,然后想将这些修改提交到下一次提交中,你必须将这个文件提交到索引中,通过git add file命令。这样索引可以保存所有变化的快照。
新增的文件总是要显示的添加到索引中来。对于那些之前已经提交过的文件,可以在commit命令中使用-a 选项达到提交到索引的目的。
1.3 Git操作的相关操作
后续将通过一个典型的Git工作流来学习。在这个过程中,你会使用SourceTree创建一些文件、创建一个本地的Git仓库、提交你的文件到这个仓库中。这之后,你会克隆一个仓库、在仓库之间通过pull和push操作来交换代码的修改。
1.3.1 创建仓库、添加文件和提交更改
每个Git仓库都是放置在.git文件夹下.这个目录包含了仓库的所有历史记录,.git/config文件包含了仓库的本地配置。
以下我们会创建一个本地Git工程仓库。将工程添加入SourceTree进行管理。
一个本地工程已经添加进来了。
点击进入工程:
1.3.2 commit更改
下方有问号的就是我们的工程文件,现在我们将他们添加到Git仓库内。全选他们,点击Commit键。
Commit成功后,出现一条记录和描述。
1.4 远端仓库(remote repositories)
1.4.1 设置一个远端的GitHub仓库
我们将创建一个远端的GitHub仓库。这个仓库可以存储在本地或者是网络上。
远端Git仓库和标准的Git仓库有如下差别:一个标准的Git仓库包括了源代码和历史信息记录。我们可以直接在这个基础上修改代码,因为它已经包含了一个工作副本。但是远端仓库没有包括工作副本,只包括了历史信息。
1.4.2 添加远端仓库
首先我们需要创建一个CMS.Web的仓库;
填写工程信息:
创建完成后,Clone此工程下来,复制此工程的URL:
要将带? 号的文件先添加到索引中去,这样才能被SourceTree 跟踪。
在推送前,需要 先提交,就是保存
录屏太麻烦了,写的速度也减慢了不少,不录了 1.4.3 推送更改到GitHub的仓库 在下方的Origin中,显示的是GitHub服务器上的工程,它显示的进度还在第一条Initial commit;这时我们需要将本地master中的更改Push到GitHub服务器。 提交成功后,我们看到服务器端的进度已经和我们本地同步了。
1.4.4 拉取(Pull)更改
通过拉取,可以从GitHub的仓库中获取最新的更改。
1.4.5 还原更改
如果你还未把更改加入到索引中,你也可以直接还原所有的更改;也可以通过revert命令进行还原操作 。 即使你删除了一个未添加到索引和提交的文件,你也可以还原出这个文件,点击Checkout。 如果你已经添加一个文件到索引中,但是未提交。可以通过git resetfile 命令将这个文件从索引中删除。
1.5 分支、合并
1.5.1 分支
通过分支,可以创造独立的代码副本。默认的分支叫master。Git消耗很少的资源就能创建分支。Git鼓励开发人员多使用分支。
1.5.2 合并
通过Merge我们可以合并两个不同分支的结果。Merge通过所谓的三路合并来完成。分别来自两个分支的最新commit和两个分支的最新公共commit。 但是有时多人开发时,有可能会发生合并冲突。 一旦合并发生了冲突,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://www.bootcss.com/p/git-guide/
标签:
原文地址:http://www.cnblogs.com/wisdo/p/4193977.html