GitHub详细教程.docx
- 文档编号:9817753
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:30
- 大小:28.01KB
GitHub详细教程.docx
《GitHub详细教程.docx》由会员分享,可在线阅读,更多相关《GitHub详细教程.docx(30页珍藏版)》请在冰豆网上搜索。
GitHub详细教程
GitHub详细教程
TableofContents
∙1Git详细教程
o1.1Git简介
▪1.1.1Git是何方神圣?
▪1.1.2重要的术语
▪1.1.3索引
o1.2Git安装
o1.3Git配置
▪1.3.1用户信息
▪1.3.2高亮显示
▪1.3.3忽略特定的文件
▪1.3.4使用.gitkeep来追踪空的文件夹
o1.4开始操作Git
▪1.4.1创建内容
▪1.4.2创建仓库、添加文件和提交更改
▪1.4.3diff命令与commit更改
▪1.4.4Status,Diff和CommitLog
▪1.4.5更正提交的信息-gitamend
▪1.4.6删除文件
o1.5远端仓库(remoterepositories)
▪1.5.1设置一个远端的Git仓库
▪1.5.2推送更改到其他的仓库
▪1.5.3添加远端仓库
▪1.5.4显示已有的远端仓库
▪1.5.5克隆仓库
▪1.5.6拉取(Pull)更改
▪1.5.7还原更改
▪1.5.8标记
o1.6分支、合并
▪1.6.1分支
▪1.6.2合并
▪1.6.3删除分支
▪1.6.4推送(push)一个分支到远端仓库
o1.7解决合并冲突
o1.8变基(Rebase)
▪1.8.1在同一分支中应用RebaseCommit
▪1.8.2Rebasing多个分支
▪1.8.3Rebase最佳实践
▪1.8.4创建和应用补丁
o1.9定义同名命令
o1.10放弃跟踪文件
o1.11其他有用的命令
o1.12安装Git服务
o1.13在线的远端仓库
▪1.13.1克隆远端仓库
▪1.13.2添加远端仓库
▪1.13.3通过http和代理服务器进行远端操作
o1.14Git服务提供商
▪1.14.1GitHub
▪1.14.2Bitbucket
o1.15Git的图形接口
o1.16Kindle版本教程
o1.17问题与讨论
o1.18链接和文章
1 Git详细教程
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术语
术语
定义
仓库
一个仓库包括了所有的版本信息、所有的分支和标记信息.
Repository
在Git中仓库的每份拷贝都是完整的。
仓库让你可以从中
取得你的工作副本。
一个分支意味着一个独立的、拥有自己历史信息的代码线
分支
(codeline)。
你可以从已有的代码中生成一个新的分支
Branches
,这个分支与剩余的分支完全独立。
默认的分支往往是叫
master。
用户可以选择一个分支,选择一个分支叫做
checkout.
标记
一个标记指的是某个分支某个特定时间点的状态。
通过标
Tags
记,可以很方便的切换到标记时的状态,例如2009年1月25
号在testing分支上的代码状态
提交
提交代码后,仓库会创建一个新的版本。
这个版本可以在
Commit
后续被重新获得。
每次提交都包括作者和提交者,作者和
提交者可以是不同的人
URL
URl用来标识一个仓库的位置
用来表示代码的一个版本状态。
Git通过用SHA1hash算法
修订
表示的id来标识不同的版本。
每一个SHA1id都是160位长
Revision
16进制标识的字符串.最新的版本可以通过HEAD来获取.
之前的版本可以通过"HEAD~1"来获取,以此类推。
1.1.3 索引
Git需要将代码的变化显示的与下一次提交进行关联。
举个例子,如果你对一个文件继续了修改,然后想将这些修改提交到下一次提交中,你必须将这个文件提交到索引中,通过gitaddfile命令。
这样索引可以保存所有变化的快照。
新增的文件总是要显示的添加到索引中来。
对于那些之前已经提交过的文件,可以在commit命令中使用-a选项达到提交到索引的目的。
1.2 Git安装
在Ubuntu上,你可以通过apt来安装git命令行工具
sudoapt-getinstallgit-core
对于其他的Linux版本,请查看相关的软件包安装工具使用方法。
msysgit项目提供了Windows版本的Git,地址是
1.3 Git配置
你可以在.gitconfig文件中防止git的全局配置。
文件位于用户的home目录。
上述已经提到每次提交都会保存作者和提交者的信息,这些信息都可以保存在全局配置中。
后续将会介绍配置用户信息、高亮显示和忽略特定的文件。
1.3.1 用户信息
通过如下命令来配置用户名和Email
gitconfig--globaluser.name"ExampleSurname"
gitconfig--globaluser.email"your.email@"
#Setdefaultsothatallchangesarealwayspushedtotherepository
gitconfig--globalpush.default"matching"
获取Git配置信息,执行以下命令:
gitconfig--list
1.3.2 高亮显示
以下命令会为终端配置高亮
gitconfig--globalcolor.statusauto
gitconfig--globalcolor.branchauto
1.3.3 忽略特定的文件
可以配置Git忽略特定的文件或者是文件夹。
这些配置都放在.gitignore文件中。
这个文件可以存在于不同的文件夹中,可以包含不同的文件匹配模式。
为了让Git忽略bin文件夹,在主目录下放置.gitignore文件,其中内容为bin。
同时Git也提供了全局的配置,core.excludesfile。
1.3.4 使用.gitkeep来追踪空的文件夹
Git会忽略空的文件夹。
如果你想版本控制包括空文件夹,根据惯例会在空文件夹下放置.gitkeep文件。
其实对文件名没有特定的要求。
一旦一个空文件夹下有文件后,这个文件夹就会在版本控制范围内。
1.4 开始操作Git
后续将通过一个典型的Git工作流来学习。
在这个过程中,你会创建一些文件、创建一个本地的Git仓库、提交你的文件到这个仓库中。
这之后,你会克隆一个仓库、在仓库之间通过pull和push操作来交换代码的修改。
注释(以#开头)解释了命令的具体含义,让我们打开命令行开始操作吧。
1.4.1 创建内容
下面创建一些文件,它们会被放到版本控制之中
#Switchtohome
cd~/
#Createadirectory
mkdir~/repo01
#Switchintoit
cdrepo01
#Createanewdirectory
mkdirdatafiles
#Createafewfiles
touchtest01
touchtest02
touchtest03
touchdatafiles/data.txt
#Putalittletextintothefirstfile
ls>test01
1.4.2 创建仓库、添加文件和提交更改
每个Git仓库都是放置在.git文件夹下.这个目录包含了仓库的所有历史记录,.git/config文件包含了仓库的本地配置。
以下将会创建一个Git仓库,添加文件倒仓库的索引中,提交更改。
#InitializethelocalGitrepository
gitinit
#Addall(filesanddirectories)totheGitrepository
gitadd.
#Makeacommitofyourfiletothelocalrepository
gitcommit-m"Initialcommit"
#Showthelogfile
gitlog
1.4.3 diff命令与commit更改
通过gitdiff命令,用户可以查看更改。
通过改变一个文件的内容,看看gitdiff命令输出什么,然后提交这个更改到仓库中
#Makesomechangestothefile
echo"Thisisachange">test01
echo"andthisisanotherchange">test02
#Checkthechangesviathediffcommand
gitdiff
#Committhechanges,-awillcommitchangesformodifiedfiles
#butwillnotaddautomaticallynewfiles
gitcommit-a-m"Thesearenewchanges"
1.4.4 Status,Diff和CommitLog
下面会向你展示仓库现有的状态以及过往的提交历史
#Makesomechangesinthefile
echo"Thisisanewchange">test01
echo"andthisisanothernewchange">test02
#Seethecurrentstatusofyourrepository
#(whichfilesarechanged/new/deleted)
gitstatus
#Showthedifferencesbetweentheuncommittedfiles
#andthelastcommitinthecurrentbranch
gitdiff
#Addthechangestotheindexandcommit
gitadd.&&gitcommit-m"Morechaanges-typointhecommitmessage"
#Showthehistoryofcommitsinthecurrentbranch
gitlog
#Thisstartsanicegraphicalviewofthechanges
gitk--all
1.4.5 更正提交的信息-gitamend
通过gitamend命令,我们可以修改最后提交的的信息。
上述的提交信息中存在错误,下面会修改这个错误。
gitcommit--amend-m"Morechanges-nowcorrect"
1.4.6 删除文件
如果你删除了一个在版本控制之下的文件,那么使用gitadd.不会在索引中删除这个文件。
需要通过带-a选项的gitcommit命令和-A选项的gitadd命令来完成
#Createafileandputitunderversioncontrol
touchnonsense.txt
gitadd.&&gitcommit-m"anewfilehasbeencreated"
#Removethefile
rmnonsense.txt
#Trystandardwayofcommitting->willnotwork
gitadd.&&gitcommit-m"anewfilehasbeencreated"
#Nowcommitwiththe-aflag
gitcommit-a-m"Filenonsense.txtisnowremoved"
#Alternativelyyoucouldadddeletedfilestothestagingindexvia
gitadd-A.
gitcommit-m"Filenonsense.txtisnowremoved"
1.5 远端仓库(remoterepositories)
1.5.1 设置一个远端的Git仓库
我们将创建一个远端的Git仓库。
这个仓库可以存储在本地或者是网络上。
远端Git仓库和标准的Git仓库有如下差别:
一个标准的Git仓库包括了源代码和历史信息记录。
我们可以直接在这个基础上修改代码,因为它已经包含了一个工作副本。
但是远端仓库没有包括工作副本,只包括了历史信息。
可以使用–bare选项来创建一个这样的仓库。
为了方便起见,示例中的仓库创建在本地文件系统上
#Switchtothefirstrepository
cd~/repo01
#
gitclone--bare.../remote-repository.git
#Checkthecontent,itisidenticaltothe.gitdirectoryinrepo01
ls~/remote-repository.git
1.5.2 推送更改到其他的仓库
做一些更改,然后将这些更改从你的第一个仓库推送到一个远端仓库
cd~/repo01
echo"Hello,hello.Turnyourradioon">test01echo"Bye,bye.Turnyourradiooff">test02
gitcommit-a-m"Somechanges"
gitpush../remote-repository.git
1.5.3 添加远端仓库
除了通过完整的URL来访问Git仓库外,还可以通过gitremoteadd命令为仓库添加一个短名称。
当你克隆了一个仓库以后,origin表示所克隆的原始仓库。
即使我们从零开始,这个名称也存在。
#Add../remote-repository.gitwiththenameorigin
gitremoteaddorigin../remote-repository.git
#Againsomechanges
echo"Iaddedaremoterepo">test02
#Commit
gitcommit-a-m"Thisisatestforthenewremoteorigin"
#Ifyoudonotlabelarepositoryitwillpushtoorigin
gitpushorigin
1.5.4 显示已有的远端仓库
通过以下命令查看已经存在的远端仓库
#Showtheexistingdefinedremoterepositories
gitremote
1.5.5 克隆仓库
通过以下命令在新的目录下创建一个新的仓库
#Switchtohome
cd~
#Makenewdirectory
mkdirrepo02
#Switchtonewdirectory
cd~/repo02
#Clone
gitclone../remote-repository.git.
1.5.6 拉取(Pull)更改
通过拉取,可以从其他的仓库中获取最新的更改。
在第二个仓库中,做一些更改,然后将更改推送到远端的仓库中。
然后第一个仓库拉取这些更改
#Switchtohome
cd~
#Switchtoseconddirectory
cd~/repo02
#Makechanges
echo"Achange">test01
#Commit
gitcommit-a-m"Achange"
#Pushchangestoremoterepository
#Originisautomaticallymaintainedasweclonedfromthisrepository
gitpushorigin
#Switchtothefirstrepositoryandpullinthechanges
cd~/repo01
gitpull../remote-repository.git/
#Checkthechanges
lesstest01
1.5.7 还原更改
如果在你的工作副本中,你创建了不想被提交的文件,你可以丢弃它。
#Createanewfilewithcontent
touchtest04
echo"thisistrash">test04
#Makeadry-runtoseewhatwouldhappen
#-nisthesameas--dry-run
gitclean-n
#Nowdelete
gitclean-f
你可以提取老版本的代码,通过提交的ID。
gitlog命令可以查看提交ID
#Switchtohome
cd~/repo01
#Getthelog
gitlog
#Copyoneoftheoldercommitsandcheckouttheolderrevisionvia译者注:
checkout后加commitid就是把commit的内容复制到index和工作副本中
gitcheckoutcommit_name
如果你还未把更改加入到索引中,你也可以直接还原所有的更改
#Somenonsensechange
echo"nonsensechange">test01
#Notaddedtothestagingindex.Thereforewecan
#justcheckouttheoldversion
#译者注:
checkout后如果没有commitid号,就是从index中拷贝数据到工作副本,不涉及commit部分的改变
gitcheckouttest01
#Checktheresult
cattest01
#Anothernonsensechange
echo"anothernonsensechange">test01
#Weaddthefiletothestagingindex
gitaddtest01
#Restorethefileinthestagingindex
#译者注:
复制HEAD所指commit的test01文件到index中
gitresetHEADtest01
#Gettheoldversionfromthestagingindex
#译者注:
复制index中test01到工作副本中
gitcheckouttest01
#译者注,以上两条命令可以合并为gitcheckoutHEADtest01
也可以通过revert命令进行还原操作
#Revertacommit
gitrevertcommit_name
即使你删除了一个未添加到索引和提交的文件,你也可以还原出这个文件
#Deleteafile
rmtest01
#Revertthedeletion
gitcheckouttest01
如果你已经添加一个文件到索引中,但是未提交。
可以通过gitresetfile命令将这个文件从索引中删除
//Createafile
touchincorrect.txt
//Accidentlyaddittotheindex
gitadd.
//Removeitfromtheindex
gitresetincorrect.txt
//Deletethefile
rmincorrect.txt
如果你删除了文件夹且尚未提交,可以通过以下命令来恢复这个文件夹。
译者注:
即使已经提交,也可以还原
gitcheckoutHEAD--your_dir_to_restore
译者注:
checkout和reset这两个命令的含义是不同的,可以参阅这篇文章
1.5.8 标记
Git可以使用对历史记录中的任一版本进行标记。
这样在后续的版本中就能轻松的找到。
一般来说,被用来标记某个发行的版本。
可以通过gittag命令列出所有的标记,通过如下命令来创建一个标记和恢复到一个标记
gittagversion1.6-m'version1.6'
gitcheckout
1.6 分支、合并
1.6.1 分支
通过分支,可以创造独立的代码副本。
默认的分支叫master。
Git消耗很少的资源就能创建分支。
Git鼓励开发人员多使用分支
下面的命令列出了所有的本地分支,当前所在的分支前带有*号
git
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GitHub 详细 教程