本文开头先特别声明一下:由于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. WebForm与MVC混用 (转)

    http://blog.csdn.net/leftfist/article/details/11591231

  2. CodeForces-Zuhair and Strings(思维+枚举)

    Given a string ss of length nn and integer kk (1≤k≤n1≤k≤n). The string ss has a level xx, if xx is l ...

  3. TCP的粘包问题

    什么是粘包 粘包指的是数据与数据之间没有明确的分界线,导致不能正确读取 应用程序无法直接操作硬件,应用程序想要发送数据则必须将数据交给操作系统,而操作系统需要同时为所有应用程序提供数据传输服务,也就意 ...

  4. haproxy安装:

    haproxy安装: tar zxf haproxy-1.4.24.tar.gz            ##解压 yum install rpm-build -y                   ...

  5. C语言指针收藏

    指针是什么 >>每一个内存单元只能同时存储一个数据,如何保证内存单元同时只能存储一个数据,可以使用编号的方式实现内存单元标记,此编号就是指针. >>指针是一个变量,指针是存放着 ...

  6. 2048小游戏(Java)(swing实现)(一)

    自己写的2048小游戏,仅支持鼠标操作 主要是我不知道怎么添加键盘监听 import javax.swing.*; import java.awt.*; import java.awt.event.* ...

  7. SQL SERVER数据库 三种 恢复模式

    SQL SERVER 2005 以后三种恢复模式: 简单(Sample),完全(Full),大批量(Bulk_Logged) 完全备份模型 完全备份模式是指在出现数据文件毁坏时丢失数据的风险最小.如果 ...

  8. 转 OGG-01224 TCP/IP error 111 (Connection refused); retries exceeded.

    https://blog.csdn.net/yabingshi_tech/article/details/40620351 在源端启动goldengate pump进程,状态起初是running,后来 ...

  9. Oracle 12c DG备库Alert报错ORA-01110

    环境是12.2.0.1 version, Oracle Data Guard备库近段时间一直报错,但是备库主库同步一致,数据一致. 2019-03-06T23:42:22.184048+08:00 E ...

  10. c++ 多线程 0

    1.1 何谓并发 最简单和最基本的并发,是指两个或更多独立的活动同时发生.  (注意区别于计算机中的并发情况!!!!!!!!!!见下面) 1.1.1 计算机系统中的并发:是指在单个系统里同时执行多个独 ...