Git和Github详细教程

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

         集中式版本控制工具的模式主要是将代码专门放在一个服务器,如下:
image
       2\. 分布式版本控制工具:Git、 Mercurial、 Bazaar、 Darcs and so on

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

         ![image](http://upload-images.jianshu.io/upload_images/9159664-702f53ab80ce6b06.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

三 Git历史

3.1 Git发展史

image

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 ](https://pan.baidu.com/s/16LHA-qajOw5h_EfP25LD7g)

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

3.5 Git的结构

                      ![image](http://upload-images.jianshu.io/upload_images/9159664-ea275d8bc234fd2f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

3.6 Git和代码托管中心

局域网环境 GitLab服务器

外网环境下 GitHub 码云

3.6 本地库和远程库

image

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

四 Git操作

4.1 本地库初始化

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

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

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

image

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

image

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

image

4.2 设置签名

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

image
image

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 查看状态


image

查看工作区、暂存区状态

4.4 添加至缓存区

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

image
image

查看内容

image

这个时候git status查看下状态

image

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

image

再git status一下

image

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

image

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

image

4.5 查看历史记录

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

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

image

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

image

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

image

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

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

image

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

image
image

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

image

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

image

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

image

现在可以看到HEAD指向cc37538了

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

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

4.7 分支管理

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

                ![image](http://upload-images.jianshu.io/upload_images/9159664-14dc30981969a318.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2.好处

     同时并行推进多个功能开发,提高开发效率
     各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

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

  ![image](http://upload-images.jianshu.io/upload_images/9159664-3ca3173163f109ae.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

image

git checkout hot_fix来切换分支

image

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

image

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

image
image

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

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

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

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

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

image

git commit到本地库

image

git checkout 到master分支

image

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

image

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

image

5.解决冲突

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

首先查看下我在master分支

image

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

![image](http://upload-images.jianshu.io/upload_images/9159664-28f8c6021399d78a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

将内容保存到本地库中

image

切换到hot_fix分支

image

查看

image

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

image

提交到本地库中

image

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

切换分支:

image

合并got_fix分支修改的内容

image

查看状态

image

打开test.txt文件后

image

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

image

添加到暂存区

image

查看状态

image

提交

image

查看合并后的内容

image

冲突的解决:

第一步:编辑文件,删除特殊符号
第二步:把文件修改到满意的程度,保存退出
第三步:git add [文件名]
第四步:git commit -m "日志信息"
注意:此时 commit 一定不能带具体文件名

五 Github

   1.github

               GitHub 首页就是注册页面:https://github.com/
image
   2.在github中创建远程库
image
image
   3.为远程库地址创建别名
image

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

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

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

  ![image](http://upload-images.jianshu.io/upload_images/9159664-a3e2feea63a255c5.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

    ![image](http://upload-images.jianshu.io/upload_images/9159664-7cdd12c90c41b88f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

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

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

image
  6\. 团队协同开发   

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

image

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

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

image

ls -la 查看

image
image
image

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

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

image

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

image
        ![image](http://upload-images.jianshu.io/upload_images/9159664-4b2fc8f6d3507924.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

image

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

image
image
image

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

image

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

image

可以看到已经成功上传

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,880评论 5 147
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,915评论 0 11
  • 看平如和美棠的照片,平如眉清目秀相貌堂堂美棠人如其名花容月貌。为什么不说男才女貌,正如美棠对他说的最多的一句话是:...
    桃酥1618阅读 14,060评论 0 4
  • 玛依拉,在夜晚失眠的孩子, 许多星辰从午夜高悬到黎明, 只有你深知它们的寓意。 直到白昼来临,叶尔羌河涛声远逝, ...
    三水林枫阅读 425评论 17 29
  • 四海春雷骤雨狂,乾坤涤荡净八荒。 穷途浊浪一朝尽,滚滚清流谱华章。
    霙愔阅读 386评论 2 5