Git和Github详细教程

一  概述

说到Git和Github,前几天我们知道微软以75亿美元收购全球最大的代码托管和写作平台GitHub,而GitHub是全球最大的代码仓库,很多开发人员都将代码存放在Github,许多开发者因为担心微软无法让 GitHub 在运营上保持开放和独立,将无数项目迁移到了 GitLab上,博主也担心微软是否会让GitHub按照以前一样运营,不管那么多,下面正式开始讲解Git:

说到Git,很多人会想到svn,svn是集中式的版本控制工具,相比Git,博主认为Git更强大,Git出自linux之父林纳斯之手,而Git又全面兼容linux,这对编程开发人员来说是非常爽的,下面我们看看版本控制工具应该具备的功能 :

1 协同修改,多人并行不悖的修改服务器端的同一个文件,数据备份。

2 不仅保存目录和文件的当前状态, 还能够保存每一个提交过的历史状态。

3 版本管理

4 在保存每一个版本的文件信息的时候要做到不保存重复数据, 以节约存储空间, 提高运行效率。 这方面 SVN 采用       的是增量式管理的方式, 而 Git 采取了文件系统快照的方式。

5 权限控制

6 对团队中参与开发的人员进行权限控制。

7 对团队外开发者贡献的代码进行审核——Git 独有。

8 历史记录

9 查看修改人、 修改时间、 修改内容、 日志信息。

10 将本地文件恢复到某一个历史状态。

11 分支管理

12 允许开发团队在工作过程中多条生产线同时推进任务, 进一步提高效率。

二  版本控制介绍

2.1 版本控制简介

工程设计领域中使用版本控制管理工程蓝图的设计过程。 在 IT 开发过程中也可以

使用版本控制思想管理代码的版本迭代.

2.2 版本控制工具

1.集中式版本控制工具:CVS、 SVN、 VSS  and so  on

集中式版本控制工具的模式主要是将代码专门放在一个服务器,如下:

2. 分布式版本控制工具:Git、 Mercurial、 Bazaar、 Darcs and so on

分布式版本控制工具像Git支持分支管理,如下:

三  Git历史

3.1 Git发展史

3.2 Git官网

Git官网地址:https://git-scm.com/

3.3 Git优势

1  大部分操作在本地完成,不需要联网

2  完整性保证

3  尽可能添加数据而不是删除或修改数据

4  分支操作非常快捷流畅

5  与 Linux 命令全面兼容

3.4 Git的安装

这是我的百度网盘链接,里面有32位和64位安装包

链接:https://pan.baidu.com/s/16LHA-qajOw5h_EfP25LD7g 密码:jsfb

安装很简单,跟着提示点击过来就好了,有问题可以联系博主。

3.5 Git的结构

3.6 Git和代码托管中心

局域网环境:   GitLab服务器

外网环境下: GitHub 码云

3.6 本地库和远程库

本地库是存在在个人本地的,而Github中创建的是远程库,本地库push/pull从远程库中上传代码或者拉取代码,而其他开发者可以直接clone到本地库,当然还有夸团队协作,其实差不多,fork一下就好了。

四  Git操作

4.1 本地库初始化

首先我在自己的工作区创建一个目录gitDev,专门用来存放gitDev这个项目,将gitDev比作我将要开发的项目。

mkdir gitDev,进入创建好的目录,pwd看下我的位置

ls -la 可以看到我现在只有2个隐藏的目录

下面我开始初始化: (git init)

ls -la查看,多了.git的隐藏文件,说明已经初始化成功了

4.2 设置签名

1 项目级别/仓库级别:仅在当前本地库范围内有效

git config user.name xxxx

git config user.email xxxx

这是设置当前库范围有效的

2  系统用户级别:登录当前操作系统的用户范围

git config --global user.name xxxx

git config --global user.eamil xxxx

3  级别优先级

就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名

如果只有系统用户级别的签名,就以系统用户级别的签名为准

二者都没有不允许

4.3 查看状态

查看工作区、暂存区状态

4.4 添加至缓存区

首先我建立一个文件,写入test内容

查看内容

这个时候git status查看下状态

这个时候提示我们使用git add命令添加到暂存区

再git status一下

提示我们 git rm 用来删除,我们git commit提交一下

再看看git status,发现没有需要提交的内容了

4.5 查看历史记录

刚刚我们提交了信息,加入想看到我提交的内容的话

1.git log: 很清楚的看到我刚刚提交的信息,master代码主分区

2.git log --pretty=oneline可以更清楚的看到我的提交记录

3.git reflog 也能查看日志记录

4.6 前进和后退(git reset --hard [局部索引值] )

我先多提交几次,让记录更加多

现在可以看到我的日志记录,我提交了4次,每次新加的内容就是后面的消息,现在这个版本的内容如下:

现在我要回到cc37538这个版本的记录的话:

可以看到,给我们的提示是Head已经在cc37538了,cat test.txt一下

可以看到回到了以前的状态。

现在可以看到HEAD指向cc37538了

当然还有其他方法进行回退,博主推荐大家使用这种方式。

只要提交到本地库的文件,都可以在历史版本中找回原来的信息

4.7 分支管理

1.分支可以理解多个功能同时推进,最后再合并

2.好处

同时并行推进多个功能开发,提高开发效率

各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

3.创建分支(git branch [分支名])

首先我创建修复bug的分支hot_fix,git branch -v 查看下分支

git checkout hot_fix来切换分支

git branch -v 查看下分支,现在就切换到hot_fix分支了

在hot_fix分支,输入ll,在查看下之前的内容

其实hot_fix复制了一份master分支的内容

4.合并分支(git merge [ 有新内容分支名 ])

第一步:切换到接受修改的分支(被合并,增加新内容)上 gitcheckout [被合并分支名]

第二步:执行 merge 命令   git merge [有新内容分支名]

首先,我在hot_fix上修改test.txt文件,添加了new content内容

git commit到本地库

git checkout 到master分支

git merge hot_fix : 合并hot_fix 分支的内容

再查看下test.txt中的内容,已经将new content中的内容合并到mster中

5.解决冲突

团队开发的时候很有可能会发生冲突,如何解决冲突,如下:

首先查看下我在master分支

我修改了第4行的内容: edit by master

将内容保存到本地库中

切换到hot_fix分支

查看

同样修改test.txt中的第4行内容

提交到本地库中

现在我想把hot_fix分支的内容合并到master分支中

切换分支:

合并got_fix分支修改的内容

查看状态

打开test.txt文件后

修改内容后,如下,保存退出

添加到暂存区

查看状态

提交

查看合并后的内容

冲突的解决:

第一步:编辑文件,删除特殊符号

第二步:把文件修改到满意的程度,保存退出

第三步:git add [文件名]

第四步:git commit -m "日志信息"

注意:此时 commit 一定不能带具体文件名

五 Github

1.github

GitHub 首页就是注册页面:https://github.com/

2.在github中创建远程库

3.为远程库地址创建别名

git remote -v 查看当前所有远程地址别名

git remoteadd [别名] [远程地址]

4.将本地库内容推送到github中(git push origin master)

这个时候会弹出登陆框,输入账号密码

成功之后,会有如下提示信息:

5. 刷新github,可以看到提交上去的信息

进入test.txt文件,这个时候信息成功被push到github上了

6. 团队协同开发

我重新创建了一个目录zhangsan,假如团队中的zhangsan协同开发的话,我就去github上面把信息clone下来

这个时候对于zhangsan的话,创建目录不用进行任何的操作,直接

git clone https://github.com/liuXinJianGithub/gitDev.git

ls -la 查看

可以发现从github上把信息给克隆下来了.

现在zhangsan修改了信息想要提交到github上面的话,可以看到新加了一条内容:my name is zhangsan

git push origin master 会弹出登录信息,我用另外一个新账号登陆

可以看到现在是拒绝让zhangsan这个账号push,因为zhangsan还没有被邀请到团队进行协同开发

登陆远程库创建者的github账号,如下

切换zhangsan的github账号,输入邀请地址https://github.com/liuXinJianGithub/gitDev/invitations

点击接受邀请即可。这个时候push到github上

可以看到已经成功上传

六 总结

关于git和github的基本使用就到这里,如果各位朋友遇到什么问题可以联系博主,大家一起讨论,希望这篇博客对大家有用,今后会继续更新新内容,希望大家多多支持。

---------------------

作者:刘信坚的博客

来源:CSDN

原文:https://blog.csdn.net/qq_38974634/article/details/80633748

版权声明:本文为博主原创文章,转载请附上博文链接!

Git_GitHub详解的更多相关文章

  1. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  2. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  3. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  4. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  5. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  6. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  7. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  8. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  9. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

随机推荐

  1. java----鲁棒性

    所谓“鲁棒性”,是指控制系统在一定(结构,大小)的参数摄动下,维持其它某些性能的特性. Java鲁棒性的特点如下: Java在编译和运行程序时都要对可能出现的问题进行检查,以防止错误的产生. Java ...

  2. The JSP specification requires that an attribute name is

    把另一个博客内容迁移到这里 七月 10, 2016 10:23:12 上午 org.apache.catalina.core.ApplicationDispatcher invoke 严重: Serv ...

  3. 看到一个想收藏的的AJAX小列子

    用户登录的验证可以使用 form 表单提交,也可以使用 ajax 技术异步提交. AJAX 即 Asynchronous Javascript And XML(异步 JavaScript 和 XML) ...

  4. DVWA v1.9 新手指南

    DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...

  5. 基于centOS7:新手篇→nginx安装

    一.首先安装编译工具和库 #安装make zlib gcc OpenSSL yum -y install make zlib zlib-devel gcc-c++ libtool openssl op ...

  6. March 11th, 2018 Week 11th Sunday

    All good things must come to an end. 好景无常. Love is when the other person's happiness is more importa ...

  7. 《Java大学教程》—第6章 类和对象

    6.2 对象:结构化编程-->数据-->封装(聚合,信息隐藏)-->对象(方法及其操作的数据都聚合在一个单元中,作为更高层的组织单元)-->类(创建对象的模板)6.3 类:*  ...

  8. 如何在linux平台上编译安装zlib软件(公司部分线上机器缺少zlib不能安装supervisor)

    文章在Centos  6.5 linux平台上演示一下如何进行编译安装zlib软件,并配置相关的选项加载使用.示范从下载到安装并配置进行使用过程一系列整套讲解,希望可以给网友考虑使用,谢谢.   工具 ...

  9. C#多线程编程のSemaphore(信号量,负责协调各个线程)

    Semaphore负责协调线程,可以限制对某一资源访问的线程数量 这里对SemaphoreSlim类的用法做一个简单的例子: namespace WpfApplication6 { /// <s ...

  10. android studio 定位具体的错误原因

    编译一个数据监测APP的时候出现了报错: Error:Compilation failed; see the compiler error output for details. 在网上查到方法如下: ...