GitHub使用教程

GitHub是为开发者提供的Git仓库的托管服务,这是一个让开发者与同事共享代码的场所。
GitHub和Git的区别,GitHub和Git是完全不同的两个东西,在Git中开发者将代码存入名为Git仓库的资料库中,并加以使用而GitHub则是在网络中提上提供Git仓库的一项服务。就是说GitHub上公开的代码都由Git进行管理。
(1)让开发者之间进行远程共同开发软件,这个功能就是Pull Request(拉取请求),是指开发者在本地对源代码进行更改后,向GitHub中托管的Git仓库中
(2)用户所有用文字输入的功能都可以用GitHub Flavored Markdown,开始有越来越多的服务兼容Markdown

Github这一服务为开源世界带来了社会化编程的概念,在Github出现之前只有一小部分人拥有改变源代码的权利,这些人掌握着开发的主导权,开发者往往需要花时间去说服这个特权阶级。Github让所有人都平等拥有修改代码的权利。同时Github还有一个最大的特征是面向人,不再像之前一样只针对项目。
Github的主要功能:
(1)Git仓库
(2)Organization(优点是可以统一管理和权限)
(3)Issue(是将一个任务或问题分配给Issue进行追踪和管理,即每当进行Pull Request就会创建一个Issue)
(4)wiki(任何人都可以随时保存一篇文章进行更改并保存)
(5)Pull Request (通过该功能向其他仓库提出申请请求合并,送出后目标仓库的管理者可以查看Pull Request的内容和及其包含的代码更改)

Git的仓库管理是GitHub的核心,Git属于分散型版本的管理系统,是为了版本管理而设计的软件,起因是Linux内核开发中使用的既有版本管理系统的开发方许可证发生了变化。为了更换新的版本管理系统才开发了Git。
版本管理就是管理更新的历史记录,并且版本管理系统分为集中型和分散型。
集中型:将仓库集中存放在服务器上,所以只存在一个仓库,将所有数据集中存放在服务器中,有便于管理的优点,但是一旦开发者所处的环境不能连接服务器,就无法获取最新的源代码,开发也就无法进行。万一服务器故障导致数据消失,开发者就会见不到最新的代码。
分散型:GitHub将仓库Fork给了每一个用户,就是将某一个特定仓库复制到自己的账户下,Fork出的仓库与原仓库是两个不同的仓库开发者可以随意编辑。
双方都有优缺点但是只要规则制定的好分散型也可以向集中型那样进行管理。

以上是对于GitHub的一些简单介绍,现在从安装开始,如何进行使用。
首先是不同的操作系统,Mac与Linux都预装了也都包含了软件包提供给用户。而在windows环境中最直接的方式是从msysGit.github.io上进行下载。
在组件的选择上,由于所有必要的组件都已默认勾选。直接就可以进入下一步。在设置环境变量时可以只选择最上面的Use Git Bash Only因为会用到msysGit中附属的Git Bash命令提示符。在之后会选择换行符的处理,Git可以设置自动转换这些换行符,选择第一个就可以在换行符签出的时候自动从LF装还为CRLF。
之后进行初始设置:
首先设置姓名和邮箱:
git config --global user.name “your name”
git config --global use.email “your email“
之后可以通过git config list查看你是否完成,这些信息会在~/.gitconfig 中出现你设置的姓名和邮箱,想要修改信息也可以直接编辑这个文件,这里设置的姓名和邮箱地址会在Git的提交日志上用到。

下一步需要到GitHub的网站上申请账号,之后可以修改你的头像或者跳过这一步,进入之后的关键设置SSH key。

在创建完账户之后可以通过Follow(关注)别人,可以通过这个方法知道你关注的那个人都做了什么。
在Git Hub上连接已有仓库时的认证,是通过使用了SSH的公开密钥认证方式进行的。

现在介绍一下公开密钥和私有密钥,如果对此不感兴趣的可以跳到后面。
为解决信息公开传送和密钥管理问题,在1976年提出了新的密钥交换协议,允许在不安全的媒体上的通讯双方互换信息,安全的达成一致的密钥,这就是公开密钥系统,也就是非对称加密算法,这个算法需要两个密钥:公开密钥和私有密钥,如果公开密钥对数据进行加密,只有用对应的私有密钥才能解密,同理用私有密钥加密只有公有密钥可以解密。因为加密和解密使用的是不同的两个不同的密钥,流程是一方生成一对密钥并将其中的一个一把作为公共的密钥向其他人公开,得到密钥的人使用该密钥对机密信息进行加密后再发送。非对称加密算法的保密性非常好,他消除了在用户交换密钥的需要,但加密和解密花费时间长速度慢。

现在继续回到刚才的问题上,如何设置SSH key,在GitHub上连接已有仓库的,就是通过使用了SSH的公开密钥认证方式进行,运行下面的命令创建SSH key:
ssh-keygen -t rsa -C ”your email“
这里需要填创建账户时用的邮箱地址,之后会要求输入密码。

创建的文件id_rsa是私有密钥,id_rsa.pub是公有密钥,现在在GitHub上添加公开密钥,今后就可以用私有密钥进行认证了,在右上角点击账户设定按钮,选择SSH Keys菜单后,点击Add SSH Key,会出现Tittle和Key两个框,在Tittle中填入适当的钥匙名称,Key部分复制粘贴id_rsa.pub文件里的内容。
id_rsa.pub的内容可以用如下方法查看:
cat -/.ssh/id rsa.pub

之后根据邮箱收到的邮件进行确认。完成以上步骤就可以和GitHub进行通讯了,使用:
当出现successfully的时候说明成功。

现在之前的准备以及都做完了,可以动手直接使用了:
首先创建一个公开的仓库,点击右上的New repository,在Repository name栏中输入仓库的名称,Description栏中可以设置仓库的说明,之后可以选择Public还是Private,选择是否公开但是选择private是会被收费的。如果选择了Initialize this repository with a README 那么GitHub会自动初始化仓库并设置README,让用户可以立刻clone这个仓库,但是如果想向GitHub添加手中已有的仓库就不需要勾选直接push。
README.md在初始化时以及生成好了,该文件的内容是会自动显示在仓库的首页中的,一般在这个文件中标明本仓库所包含的软件的概要,使用流程,许可协议等信息。
Add.gitigonre 下方左侧的下拉菜单通过它可以在初始化时自动生成.gitigonre,这个设定会帮我们把不需要在Git仓库中管理的文件记录在该文件中。
Add a license 可以选择添加的许可协议文件,如果这个仓库包含的代码已经确定了许可协议,在这里选择,随后将自动生成包含许可协议内容的LICENSE文件,用来表明该仓库内容的许可协议。

在这个页面有一个URL是刚创建的这个仓库的页面

接下来将已有仓库clone到本地,使用git clone git@github,com:你的GitHub账户名/仓库名.git,之后是提交使用git add 文件名 将文件添加到暂存区,在通过git commit 命令提交。可以通过git log 来查看日志。在进行git push仓库就能进行更新。

更改当前目录到my_git目录下;初始化该文件夹

cd ~/Hello-World 
git init
  • 1
  • 2

将会提示以下信息:Initialized empty Git repository in /Users/xxxxxxxxxxx 
创建完README文件以后就需要添加并提交文件了

git add README
git commit -m "my first commit"
  • 1
  • 2

8. 本地git版本库push到github 
这样已经将要更改的文件提交到版本库中,但是呢还没有真正提交到网站上去,还需要执行下面两个命令:

git remote add origin git@github.com:xxx/xxxx.git
git remote add origin https://github.com/xxx/xx.git
  • 1
  • 2

注意上面的两个命令结果一样,只是协议不一样,第一个速度会比较快。(若是第一次提交该项目的文件或是修改项目文件名后则需要这行这个命令,以后就可不用执行该命令) 
输入下面的命令之后,会提示你输入你的帐号和密码

 git push -u origin master
  • 1

这样,我们就可以把本地的git版本库push到你的github里




现在开始对基本操作进行介绍:
(1)git init ——初始化仓库:要让Git进行版本管理,必须先进行初始化仓库
通过mkdir 文件名 来创建文件 ,之后cd 文件名 来进入文件,再进行git init 进行初始化即可,会自动生成
这个目录中的内容称为”附属于该仓库的工作树“文件的编辑在工作树中完成,然后记录到仓库中,以此管理文件的历史快照,如果想将文件恢复到原先的状态,可以从仓库中调取之前的快照。

(2)git status——查看仓库的状态:工作树和仓库在操作的过程中状态会不断发生变化,在操作过程中时常使用git status查看当前状态

(3)git add——向暂存区里添加文件:如果只是用Git仓库的工作数创建了文件,那么该文件并不会被记入Git仓库的版本管理对象中,暂存区是提交之前的一个临时区域。

(4)git commit——保存仓库的历史记录:可以将当前暂存器内的文件实际保存到仓库的历史记录里,通过历史记录可以在工作树中复原文件。

(5)git log ——查看提交日志:可以通过-- pretty = short来只显示信息的第一行。或者可以在git log后加上目录名就只会显示该目录下的日志,通过- p会查看文件的前后差别

(6)git diff——查看更改前和更改后的差别:可以查看工作树,暂存区,最新提交之间的差别。现在说一下暂存区,工作树,版本库的区别。
工作区:我们会想当然的认为,当前仓库所在目录就是我们的工作区,其实这是不完全正确的。在当前仓库中,新增,更改,删除文件这些动作,都发生在工作区里面。
暂存区:在版本库.git目录下,有一个index文件。它实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,记录了文件名、文件的状态信息(时间戳、文件长度等),文件的内容并不存储其中,而是保存在Git对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。如果当前仓库,有文件更新,并且使用git add 命令,那么这些更新就会出现在暂存区中。
版本库:当前仓库下,如果没有任何的提交,那么版本库就是对应上次提交后的内容。




现在介绍Git最关键的一个部分:分支操作,在进行多个并行作业时会用到分支,在并行开发中经常会出现同时存在多个最新代码的状态,每个分支中都拥有自己最新的代码,master分支是Git默认创建的分支。不同分支可以进行进行完全不同的作业,等该分支的作业完成后在于Master进行合并。
git branch ——显示分支一览:可以将分支名列表显示,同时可以确认当前所在分支。
git checkout -b——创建、切换分支:为当前的分支创建新的分支。也可以使用checkout进行切换。

特性分支:创建分支时不需要连接到中央仓库,所以能够相对轻松的创建分支,大部分工作流程中都用到了特性分支。是集中实现单一特性,除此之外不进行任何作业的分支。往往会创建数个特性分支,同时在此之外在保留一个随时可以发布软件的稳定分支,基于特定主题的作业在特行分支中进行,主题完成后在与master分支合并,只要保持这样一个开发流程,就能保证master分支可以随时供人查看。

git merge——合并分支:为了在历史记录上明确记录下本次分支合并,需要创建合并提交,因此时加上 --no-ff参数。
当出现进行合并的时候有可能出现冲突,不解决冲突就无法合并,在实际的软件开发中,往往需要删除其中一个

git log --graph——以图型表形式查看分支。

git reset——回溯历史版本:要让仓库的HEAD、暂存区、当前工作树回溯到指定的历史状态,需要使用git rest --hard,需要提供目标时间点的哈希值,这个哈希值可以在之前的日志中看到。但是git log命令只能查看当前状态为终点的历史日志,所以需要使用git reflog查看当前仓库的操作日志,在日志中找出回溯前的哈希值。

可以通过git commit --amend——修改提交信息:即修改上一条提交信息

之前都是针对单一本地仓库的,现在开始需要对远程仓库进行操作,第一步就是要添加远程仓库使用git remote add 来添加。
git remote add orgin git@github.com:github-xxxxxx/git-xxxx.git
用这条命令就可以将它设置为本地仓库的远程仓库。同时会自动将远程仓库的名称设置为别名。

然后使用git push——推送至远程仓库
使用git push -u orgin master:-u参数可以在推送的同时,将仓库的master分支设置为本地仓库当前的分支的上游。但是从远程仓库下clone不要与之前操作的仓库在同一个目录下。
展开阅读全文

没有更多推荐了,返回首页