zoukankan      html  css  js  c++  java
  • GitHub教程(三) 本地仓库托管到GitHub

    本文开头先特别声明一下:由于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原理却是不利的。

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

  • 相关阅读:
    Atitit fms Strait (海峡) lst 数据列表目录1. 4大洋 12. 著名的海大约40个,总共约55个海 13. 海区列表 23.1. 、波利尼西亚(Polynesia,
    Atitit trave islands list 旅游资源列表岛屿目录1. 东南亚著名的旅游岛屿 21.1. Cjkv 日韩 冲绳 琉球 济州岛 北海道 21.2. 中国 涠洲岛 南澳
    Atitit Major island groups and archipelagos 主要的岛群和群岛目录资料目录1. 岛群 波利尼西亚(Polynesia, 美拉尼西亚(Melanesia,
    Atitit glb 3tie city lst 三线城市列表 数据目录1. 全球范围内约90个城市 三线 12. 世界性三线城市全球共
    Atitit glb 1tie 2tie city lst 一二线城市列表数据约50个一线城市Alpha ++ 阿尔法++,,London 伦敦,,New York 纽约,,Alpha +
    Attit 现代编程语言重要特性目录第一章 类型系统 基本三大类型 2第一节 字符串 数字 bool 2第二节 推断局部变量 2第三节 动态类型 2第二章 可读性与开发效率 简单性 2
    Atitit 未来数据库新特性展望目录1. 统一的翻页 21.1. 2 Easy Top-N
    使用Chrome DevTools(console ande elements panel)进行xpath/css/js定位
    chrome -console妙用之定位xpath/js/css
    表达式树之构建Lambda表达式
  • 原文地址:https://www.cnblogs.com/forget406/p/6045499.html
Copyright © 2011-2022 走看看