都说程序员若是不知道 GitHub 就不是一个合格的程序员,其实这话说的过分了,不知道就学嘛,今天我们就来说说 Git 和 GitHub 到底是什么。

我们在开发软件的时候,常常是需要多人协作完成,这时候我们就需要对我们的代码进行控制,常见的版本控制工具有 CVS、SVN、Git ,区别就在于前两种是集中式的,而 Git 是分布式版本控制工具。

什么是版本控制呢,想像一下,我们需要修改一个文档,我们修改之前需要备份,修改之后需要和源文件进行比对,然后合并,若是多个人一同进行修改那就更麻烦了,一个不小心就将文档搞乱了。

而使用版本控制工具就可以解决这个,每一次改动都有记录,谁改动的,改的什么,我们可以清楚的看到并回到之前的版本。

那么集中式的管理工具和分布式又有什么区别呢?集中式的就是有一个中央服务器,每个人在作业的时候将代码 down 下来,写代码,然后 commit, 版本的信息都存放在服务器上。分布式就是我们每个人本地都有一个库,版本的信息都会存放在本地。

分布式的缺点是每次 down 或 commit 都需要联网,若是网络不给力,真的急死你,一个项目几百兆,坑你没话说。而在分布式中我们虽说可以轻松的控制版本,可是在多人交流以及推送的时候还是需要一个用于中间交换信息的服务器,GitHub 应运而生。

所以说 GitHub 解决了多人之间代码交互与推送的问题。我们可以将自己的代码放到 GitHub 上供他人吐槽,也可以去下载他人的代码来进行二次开发。当然,你也可以将自己的日记推送上去,如果你想的话。

Git 是一个工具,若是你不使用,这些命令很容易就遗忘,我就是这样,所以我也没有学习很多深奥的东西,只是简单的推送代码上去,拉取代码下来。使用 Git 可以用命令行也可以使用图形化界面。图形化工具据说 sourcetree 用的人挺多,今天我主要说命令。

1 安装 Git

直接到官网去下载,无脑安装即可。最后一步注意勾选,就可以在鼠标右击看到 Git 的 bash  和 GUI 的打开方式。

2 配置信息

因为 Git 是分布式的版本控制工具,所以你要告诉 Git 服务器你是谁,自报家门。配置 name 和 email .

git config --global user.name "XXX"
git config --global user.email "XXX"

PS. 附送几个命令

删除全局配置项。

git config --global --unset user.name

编辑配置文件,当然也可以覆盖配置。

git config --global --edit

查看配置是否生效

git config --list 

3 Git 创建本地仓库

pwd              // 显示当前目录
cd .. // 返回上一层
mkdir newRepo // 新建一个文件 newRepo
ll or ls // 显示文件
cd newRepo // 进入文件 newRepo
git init // 将新建的文件初始化为 Git 本地仓库
ls -a // 显示全部目录,包括隐藏的目录,会出现一个 .git 文件
echo "这里是输入到文件中的内容" >> test.txt // (新建一个 test 文件,输入内容 >> 是追加的意思)
cat test.txt // 查看文件
git add test.txt // 添加文件到 Git 暂存区
git commit -m " first commit" // 提交到仓库,并添加注释 “first commit”
git status // 查看状态,clean 表示暂存区的文件已经全部提交

上面的操作,就是在本机新建一个文件夹,并初始化为仓库,新建一个文件,设置为本地的 Git 仓库。这里涉及到几个概念、工作区、暂存区、仓库。工作区就是我们自己的本地文件夹,暂存区是工作区和仓库中间的一层缓冲。

4 本机与远程相连

下图演示如何将公开的密钥添加到 GitHub。点击头像,选择 Setting 选中 SSH key 新建一个 SSH key ,将复制的公钥贴过来即可。

5 新建远程仓库,并推送数据到远程

登录 GitHub ,点击自己的头像,Your repositories, new 一个仓库,取个名字,添加描述语,直接 create repository 即可。

在新建一个库之后就会给出可能会使用到的命令。

新建一个 README.md 文件,并将文件提交到本地仓库中。

echo "# Blockchain_First" >> README.md
git init
git add README.md
git commit -m "first commit"

这里注意,选择推送到远程的方式时,选择 SSH 加密的方式,不要使用 HTTPS 的方式,因为使用 HTTP 的方式每次推送都要输入账户和密码。

git remote add origin git@github.com:YU-JI-KUI/Blog.git

推送到远程的 master 分支上,第二次推送的时候就会默认推送到上次选择的分支,即不需要添加 -u origin master。

git push -u origin master

6 从 GitHub 上下载代码

直接找到想要下载的项目,直接下载即可,如下图

还可以使用命令,先到一个你想存放项目的目录,使用命令即可。

git clone git@github.com:YU-JI-KUI/Blog.git

好了,以上就是最最简单的 Git 和 GitHub 的应用了。

超实用 Git 使用方式介绍的更多相关文章

  1. Spark部署三种方式介绍:YARN模式、Standalone模式、HA模式

    参考自:Spark部署三种方式介绍:YARN模式.Standalone模式.HA模式http://www.aboutyun.com/forum.php?mod=viewthread&tid=7 ...

  2. C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍

    在前面一系列文章中,我们可以看到微信自定义菜单的重要性,可以说微信公众号账号中,菜单是用户的第一印象,我们要规划好这些菜单的内容,布局等信息.根据微信菜单的定义,我们可以看到,一般菜单主要分为两种,一 ...

  3. **crontab的使用方式介绍和no crontab for root 提示的处理

    crontab的使用方式介绍   定时任务参数详解如下:  crontab -l     |  crontab -e    www.2cto.com   #*/30 * * * * ntpdate 1 ...

  4. Mysql查看版本号的五种方式介绍

    Mysql查看版本号的五种方式介绍 作者: 字体:[增加 减小] 类型:转载 时间:2013-05-03   一.使用命令行模式进入mysql会看到最开始的提示符;二.命令行中使用status可以看到 ...

  5. IntelliJ IDEA 编译方式介绍

    编译方式介绍 相比较于 Eclipse 的实时自动编译,IntelliJ IDEA 的编译更加手动化,虽然 IntelliJ IDEA 也支持通过设置开启实时编译,但是不建议,因为太占资源了.Inte ...

  6. 轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

    轻量级ORM框架QX_Frame.Bantina系列讲解(开源) 一.框架简介 http://www.cnblogs.com/qixiaoyizhan/p/7417467.html 二.框架使用方式介 ...

  7. Hive四种数据导入方式介绍

    问题导读 1.从本地文件系统中通过什么命令可导入数据到Hive表? 2.什么是动态分区插入? 3.该如何实现动态分区插入? 扩展: 这里可以和Hive中的三种不同的数据导出方式介绍进行对比? Hive ...

  8. [转]Apache HTTP Server 与 Tomcat 的三种连接方式介绍

    首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接.事实上 Tomcat 本身已经提供了 HTTP 服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端 ...

  9. android 定位的几种方式介绍

    [地理位置] android 定位的几种方式介绍 开发中对于地图及地理位置的定位是我们经常要用地,地图功能的使用使得我们应用功能更加完善,下面 www.androidkaifa.com 总结了一下网络 ...

随机推荐

  1. Java入门系列(五)JVM内存模型

    概述 根据<Java 虚拟机规范>中的说法,Java 虚拟机的内存结构可以分为公有和私有两部分. 公有指的是所有线程都共享的部分,指的是 Java 堆.方法区.常量池. 私有指的是每个线程 ...

  2. 设置view controller到iPhone或者iPad模式

    在写iOS程序时,view controller的显示大小以及控件大小的调节是在是一个费力的事,尤其是对于用mac本的童鞋,更难驾驭,这时我们可以根据需要设置专门针对iphone或者ipad的view ...

  3. [整理]内存重叠之memcpy、memmove

    函数原型: void *memcpy( void *dest, const void *src, size_t count ); void *memmove( void* dest, const vo ...

  4. 选择Memcached还是Redis?

    两者相似之处 Memcached与Redis都属于内存内.键值数据存储方案.它们都从属于数据管理解决方案中的NoSQL家族,而且都基于同样的键值数据模型.双方都选择将全部数据保存在内存当中,这自然也就 ...

  5. HDU 2079 选课时间 组合题

    解题报告:最多有8种学分的课,然后每种学分的课最多有10门,问要选学分为n的课一共有多少种选法,注意学分相同的课之间没有区别. 这题暴力可过,我用了8层循环,就简单了.听说可以用母函数,但没学过,看一 ...

  6. 在mac环境下用QT使用OpenGL,glut,glfw

    只需要在新建工程中.pro文件中添加: #opengl glut LIBS+= -framework opengl -framework glut 就可以使用glut了. 继续添加: ##glfw L ...

  7. cin.get()和cin.getline()之间的区别

    cin.getline()和cin.get()都是对输入的面向行的读取,即一次读取整行而不是单个数字或字符,但是二者有一定的区别. cin.get()每次读取一整行并把由Enter键生成的换行符留在输 ...

  8. 简析CSRF

    1.简介 CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF ...

  9. jQuery选择器——(三)

    1.基本元素选择器 id选择器:$(“#id名称”); 元素选择器:$(“元素名称”); 类选择器:$(“.类名”); 通配符:* 多个选择器共用(并集) 2.层级选择器 ancestor desce ...

  10. oracle建表,设置主键,修改属性等

    --建表 create table book( book_id number(10), book_name varchar2(20), book_price number(10,2), book_au ...