本文开头先特别声明一下:由于GitHub教程属于Git系列教程的GitHub子篇章,因此GitHub教程中将不再详细介绍Git操作命令及其用法,我会根据实际需要穿插着回顾Git操作命令。如果读者需要学习或者回顾Git命令,可以参考Git系列教程中的Git子篇章,当然也可以参考廖雪峰Git教程,廖雪峰老师的Git教程讲得还是挺不错的,通俗易懂。

首先需要添加本地Git公钥到GitHub账户下,这样就能够将您的账户绑定到自己的GitHub账户,操作如下:

到此为止,您的本地Git已经和GitHub绑定。如何验证是否绑定成功?

ssh -T git@github.com

在本地git-bash中输入上面指令后,如果出现的是类似下图的情况,说明已经绑定成功,可以进入下一步操作啦。

Congratulation!

成功绑定github账户后,我们需要在GitHub平台上New repository。具体怎么操作不再重复叙述,可以参看GitHub教程(一) 使用指南。结果类似如下:

然后我们把GitHub上的这个远程分支(origin master,master---版本库主分支标记,origin---默认的远程版本库的名字[别名(alias),可修改]) clone 到本地目录。

$ git clone git@github.com:账户名/项目名.git   // git协议的url路径可以在 Clone or download 选项中copy 

值得注意的是,git clone "url(protocol:git)"命令能够在任意目录下使用,只要在该目录下能够打开git-bash[应该都能打开,即任意目录下均可用]。

现在进入到从远程仓库clone下来的本地Git仓库,里面有几个文件,其中.git指的是本地版本库(内部包括待命区[index]和版本库[master])。

在此目录下,我们使用 $ git log 命令查看提交历史信息,具体情况分析如下图所示

Note:关于Git版本库等内容,请参考系列教程Git系列教程(二) Git仓库目录结构,由于文章篇幅问题,此处不再展开讨论。

到此为止,您已经完成了一半任务---从GitHub上创建仓库,并拷贝到本地。

Bravo!

有些东西现在不清楚它们具体的作用也没有事,在使用过程中您就会慢慢对这些东西有更加深入的理解体会。一点一点克服不适应,才能成为专家。记得有句话说的挺好的:正因为困难,才容易成功。部分内容我已经从命令行改成了eclipse操作,这样降低了入门Git的难度,也有利于读者直观的了解Git的情况。

要通过Git传本地仓库到远程仓库,您的本地xxx/master必须得与相对远程origin/master有差异。

问题  为什么本地Git仓库和远程Git仓库之间必须有差异?

回答  这其实与Git的实现方式紧密相关。Git通过差异分析器(比如vimdiff)来比较两个版本库之间内容的差异,再提交差异的内容。同学可以想象一下,如果现在项目有100G的内容,但是差异只有1M,是不是就不需要将1G内容重新都传一遍,而只要传1M内容,速度的提高十分显著。这就是为什么Git这么流行的重要原因之一。

这儿准备上传到GitHub的项目是我帮朋友做的毕设项目---微信公众平台助手,当然项目本身不值一提,本科毕业设计的难度你懂的,就那个档次水平。

您可以暂时停一下,先把项目用maven搭建好咯,再继续看。。。

至于具体怎么构建maven project,这个问题不属于本系列教程的范畴,您可以参考其它资料(比如 Maven In Action,中文翻译成 maven实战)。

在此苦等若干分钟

提问  为什么你选择搭建maven project?

回答  这里我要解释一下。第一点,以前我也不用maven工程,但是到公司上班后才发现公司使用maven来构建工程,用完之后发现这玩意儿太爽了,妈妈再也不用担心我jar包依赖问题了,pom.xml文件轻松搞定(其实也不轻松,不过相对以前那种纯手工,来的还是稍微方便点,纯属个人感觉);第二点,貌似 github上面开源的项目都是基于maven构建的,可以看出maven就是项目构建技术的一种重要趋势(还有别的方法也在出来,可以查查),紧跟时代潮流呗。

跪着递上一副原理图,摘录自Git基本原理详解尊重版权,礼貌性地加个链接 】,主要是这种图自己再画一遍也类似,所以只是在原图基础上稍加改动。。。

现在我们要做的是将现有的maven项目代码copy到工作目录中,工作目录 (working tree) 正是我们本地maven工程应有的藏身之所。CV大法。。。

使用CV大法后,结果就是这样,当然这只是表面现象。

然后打开eclipse,将原来的maven工程删除,再将此存在的maven工程import到eclipse中。Import Existing Maven Project后,具体结果如下。

如果开发者修改本地代码,eclipse的git插件会在工程上出现">"小箭头,表示工作目录已修改,需要提交到暂存区。

由于这里只是单纯的将maven工程copy到Git仓库中,但是本地仓库却没有对这个maven工程的任一文件有跟踪监视(track)。不信的话我们用尝试着用命令看看呗,验证一下我说的到底是否正确。

好像就是这种情况捏。那么问题就来了[自古深情留不住,唯有套路得人心。哦耶!]

提问  什么时候文件会被跟踪,为什么?

回答  这玩意其实还是稍微有些复杂,我就挑“软骨头”啃啃。只有在工作目录中的文件被纳入版本库(至少是被add到版本库的index区)时才会被Git监控追踪。原因用通俗的话解释起来很简单:C语言的文件指针难道不需要赋地址值就能够操作文件吗?显然不可能。那这里也是这个道理咯。

现在问题已经搞清楚了,那么就对症下药。

$ git add <file>  // 如果填 * 则代表将工作区中的所有文件都添加到暂存区 

eclipse集成JGit后则有相应的GUI界面简化命令行操作。在工程中右键,Team → Add to Index,将工作目录修改add添加到暂存区。

本地更改提交到暂存区(index)后,git插件会提示一个"↑"小箭头,表示暂存区中有代码需要先commit到本地仓库然后再push到远程仓库。
如果仅仅是commit到本地仓库,这个小箭头还是会存在,必须push到远程仓库后才会消失。

查看一下具体的分支情况,在eclipse中操作结果如下图所示。

选择commit and push,提交更改到远程仓库

项目更新后结果如下

查看远程版本库,GitHub结果如下

"白猫黑猫,抓到老鼠就是好猫",显然上述eclipse集成JGit能够帮助我们快速完成任务。

不过必须指出,虽然使用eclipse集成JGit插件简化Git的入门难度,能帮助用户快速使用Git,但是对读者自身提高---了解Git原理却是不利的。

经过这节教程学习,或许看完的同学还是云里雾里,很多概念还没有清晰的理解把握,我认为这种情况是正常的,慢慢地总结学习吧。

GitHub教程(三) 本地仓库托管到GitHub的更多相关文章

  1. 将本地仓库托管到GitHub

    在初始化仓库之前,要确认ssh key是否正确 ssh -T git@github.com 正确的结果如下 Hi username! You've successfully authenticated ...

  2. 使用git将本地仓库同步到github远程仓库

    一.下载安装git客户端windows版本 二.建立本地仓库文件夹 三.在本地仓库里右键点击Git Bash Here 四.初始化本地仓库 [git init] 执行之后仓库中会创建隐藏的文件夹.gi ...

  3. Git本地仓库与远程github同步的时候提示fatal: remote origin already exists 错误解决办法

    Git本地仓库与远程github同步的时候提示fatal: remote origin already exists 错误解决办法 1.git在本地的电脑创建了仓库,要远程同步github的仓库.使用 ...

  4. 【Github教程】史上最全github用法:github入门到精通

    原文 http://www.eoeandroid.com/thread-274556-1-1.html [初识Github] 首先让我们大家一起喊一句"Hello Github". ...

  5. 【Github教程】史上最全github使用方法:github入门到精通

    原文 http://www.eoeandroid.com/thread-274556-1-1.html git pull 命令 git pull <remote> <branch&g ...

  6. 【Github教程】史上最全github使用方法:github入门到精通(转自eoeandroid.com)

    本文来源:http://www.eoeandroid.com/thread-274556-1-1.html 另附经典教程网址 :http://wuyuans.com/2012/05/github-si ...

  7. 使用GitHub(三):使用VSCode+GitHub进行版本控制

    使用GitHub(三):使用VSCode+GitHub进行版本控制 本文简单介绍使用VSCode+GitHub进行项目或者代码的版本控制.本文主要目的是对学习内容进行总结以及方便日后查阅. 详细教程和 ...

  8. Git详细教程之创建本地仓库和连接Github仓库

    首先要知道不只有代码,任何类型的文件都可以进行版本控制,版本控制很重要的一个特性就是你可以随时修改,比如git会记录你的任何操作,如果你想要回退到任何一个历史操作,你可以通过git轻松达到. 本地仓库 ...

  9. git学习笔记04-将本地仓库添加到GitHub远程仓库-git比svn先进的地方

    第1步:创建SSH Key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步. 如果没有,打开Shel ...

随机推荐

  1. pytorch tensor与numpy转换

    从官网拷贝过来的,就是做个学习记录.版本 0.4 tensor to numpy a = torch.ones(5) print(a) 输出 tensor([1., 1., 1., 1., 1.]) ...

  2. Unity 动画系统 Animation和Animator等常用类

  3. 2-28 if...else

  4. Mybatis学习笔记(八) —— Mybatis整合spring

    一.整合思路 1.SqlSessionFactory对象应该放到spring容器中作为单例存在. 2.传统dao的开发方式中,应该从spring容器中获得sqlsession对象. 3.Mapper代 ...

  5. 数据结构4.3_字符串模式匹配——KMP算法详解

    next数组表示字符串前后缀匹配的最大长度.是KMP算法的精髓所在.可以起到决定模式字符串右移多少长度以达到跳跃式匹配的高效模式. 以下是对next数组的解释: 如何求next数组: 相关链接:按顺序 ...

  6. P5021 赛道修建 (NOIP2018)

    传送门 考场上把暴力都打满了,结果文件输入输出写错了.... 当时时间很充裕,如果认真想想正解是可以想出来的.. 问你 长度最小的赛道长度的最大值 显然二分答案 考虑如何判断是否可行 显然对于一个节点 ...

  7. my05_mysql检查点简述

    简单描述一下mysql 检查点,对mysql数据库恢复的理解有所帮助. 数据库版本 mysql> select version(); +-----------+ | version() | +- ...

  8. sklearn——回归评估指标

    sklearn中文文档:http://sklearn.apachecn.org/#/ https://www.cnblogs.com/nolonely/p/7009001.html https://w ...

  9. getElementsByTagName 、 getElementsByName 、getElementById区别

    WEB标准下可以通过getElementById(), getElementsByName(), and getElementsByTagName()访问DOCUMENT中的任一个标签: getEle ...

  10. android Activity启动过程(四)startActivityUncheckedLocked

    final int startActivityUncheckedLocked(ActivityRecord r, ActivityRecord sourceRecord, IVoiceInteract ...