开发工具篇:Git和Github
环境篇:Git和Github

Git是什么?
Git是目前世界上最先进的分布式版本控制系统。工作原理 / 流程:

- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库 (一般公司内网选择GitLab,外网可以选择GitHub或者码云)
如果没有Git!
- 不能多人并行修改服务器的同一个文件。
- 不能对文件的每一次提交的历史记录进行查阅,回退。
- 不能对团队中的人进行权限控制
- 不能使用分支去进行多线作战
SVN与Git的最主要的区别?
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器那里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。最主要的问题是,如果服务器挂了,那么子节点上的内容只是当前状态,这种单点故障,想恢复以前的内容就很难了。
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。而且每个人的机器就是一整套版本库,可以直接去恢复服务器的故障。
1 下载安装
1.1 window傻瓜安装
安装完成后可以在开始菜单或者鼠标右键中看见Git logo,点击Git Bash会出现命令窗口,则说明成功。


1.2 linux(Centos)傻瓜安装
yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum -y install git-core

2 基本使用篇
2.1 自报家门(全局标识)
因为Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识。
注意:git config --global 参数,有了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置。当然你也可以对某个仓库指定的不同的用户名和邮箱。(针对某个项目不带--global参数)
git config --global user.name Heaton
git config --global user.email tzy70416450@163.com
#查询当前配置信息
git config --list
#通过文件查看全局配置信息
cat ~/.gitconfig

2.2 初始化版本库与局部标识
什么是版本库?版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”。简单的理解,就是让我们的项目交给Git大管家来帮我们管理,需要让Git知道是哪个项目。
- 创建一个版本库也非常简单,选择一个文件夹目录,例如:D:\testgit。
- 通过命令 git init 把这个目录变成git可以管理的仓库。
- 这时候你当前testgit目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了。

而我们的标识信息就在config文件下。
没有局部标识就会使用全局标识,一般情况下(推荐),使用全局标识就好了。
局部标识优先级大于全局标识。
cat .git/config
git config user.name Heaton_1
git config user.email tzy70416450@163.com_1

2.3 基础操作

2.3.1 工作区->暂存区->本地库基础操作





- 使用git restore撤销工作区修改

- 使用git add然后使用git commit将文件添加到本地库

- 使用git commit -a 将文件添加到本地库

2.3.2 日志分析

2.3.3 版本跳跃

- 使用git reset --hard 版本号,跳跃到该版本

- 使用git reset --hard HEAD^ ,跳跃到之前的版本 (一个就是一个版本,^两个就是两个版本)
- 使用git reset --hard HEAD~1 ,跳跃到之前的版本 (数字就是要回退的版本数)
- 以上两个命令只能后退版本号

- --soft --mixed -- hard 参数对比
- --soft (软回退)仅仅在本地库移动HEAD指针

- --mixed (混合回退)在本地库移动HEAD指针,重置暂存区

- --hard (硬回退)在本地库移动HEAD指针,重置暂存区,重置工作区

2.3.4 删除文件找回

2.3.5 比较文件改动

3 分支使用篇:多人协作
3.1 分支操作流程

在实际开发中,我们常常会有很多开发分支,每个小伙伴在自己的开发分支上做完了事情,就会将代码提交到测试分支上面,由测试同学去测试,修改问题后会将代码合并到主分支上发布。
当然有些公司还会有预发布分支,修改bug分支,原理是一样的,根据规范和喜好来咯。
3.2 分支操作
- 查看分支:git branch -v
- 创建分支:git branch [分支名]
- 切换分支:git checkout [分支名]
- 合并分支:git merge [分支名]
3.2.1基础分支操作

3.2.2没有冲突的合并操作


3.2.3有冲突的合并操作


4 远程仓库操作
github是其中一种远程仓库,注册账号,创建仓库就可以使用了。
还有码云,gitlab等等远程仓库产品。

4.1 创建



4.2 保存远程仓库地址
- git remote -v 查看远程仓库
- git remote add [远程仓库别名] [远程仓库地址]

4.3 推送远程仓库
- git push [远程仓库地址] [分支名]



4.4克隆
- git clone [远程仓库地址]


4.5 ssh免密操作
- 创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果有的话,直接跳过此如下命令,如果没有的话,打开命令行,
输入如下命令(三次回车):- ssh-keygen

- 登录github,用户头像下打开” settings”中的SSH Keys页面,然后点击“Add SSH Key”,填上任意title,在Key文本框里黏贴id_rsa.pub文件的内容。


4.6 邀请其他开发者

4.7 拉取操作
- git fetch [远程库地址] [分支名]
- git merge [分支名]
- git pull -->(git fetch 和 git merge 两步操作)
4.7.1 用户1修改文件推送到远程库



4.7.2 用户2拉取远程库改动(2步)

4.7.3 用户2拉取远程库改动(1步)
重复4.7.1操作


4.8 多人协作冲突解决
用户1改变文件


用户2改变文件


修改冲突的文件


4.9 远程协作
如果未加入团队,不是开发者,想提交一些代码怎么办呢。github有远程协作功能。
- 使用另一个账户,访问项目地址,Fork,克隆一个项目下来



- 修改文件内容,提交远程仓库

- pull request



- 主账号登陆在pull request中就可以看见该次请求了,审核代码,发现主库被修改了。



5 idea中操作git
- 添加账号密码->添加修改提交推送(所有的git操作都可以在idea中进行哦)





6 github插件
chrome --> Octotree

idea --> ignore

完
开发工具篇:Git和Github的更多相关文章
- 开发工具篇:JAVA和IntelliJ IDEA相恋
开发工具篇:JAVA和IntelliJ IDEA相恋 idea是什么? IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之 ...
- 常用工具说明--Git和GitHub简明教程
一.Git的主要功能:版本控制 版本:想想你平时用的软件,在软件升级之后,你用的就是新版本的软件.你应该见过这样的版本号:v2.0 或者 1511(表示发布时为15年11月),如下图:那么如果你修改并 ...
- C# 基础知识系列- 16 开发工具篇
0. 前言 这是C# 基础知识系列的最后一个内容讲解篇,下一篇是基础知识-实战篇.这一篇主要讲解一下C#程序的结构和主要编程工具. 1. 工具 工欲善其事必先利其器,在实际动手之前我们先来看看想要编写 ...
- 【技术博客】基于vue的前端快速开发(工具篇)
一.Vue教程 vue.js是一套构建用户界面的渐进式框架.vue采用自底向上增量开发的设计.vue的核心库只关心视图层,非常容易学习,非常容易与其它库和已有项目整合.vue完全有能力驱动采用单文件组 ...
- iOS开发工具篇-AppStore统计工具 (转载)
随着iOS开发的流行,针对iOS开发涉及的方方面面,早有一些公司提供了专门的解决方案或工具.这些解决方案或工具包括:用户行为统计工具(友盟,Flurry,Google Analytics等), App ...
- iOS开发工具篇-AppStore统计工具
本文转载至 http://mobile.51cto.com/hot-418183.htm 随着iOS开发的流行,针对iOS开发涉及的方方面面,早有一些公司提供了专门的解决方案或工具.这些解决方案或工具 ...
- 开发工具之Git(二)
目录 四.Git安装与配置 (一)安装 (二)配置 (三)创建仓库 五.Git基本命令 六.Git分支 上一篇讲了Git的基本原理,建议没看过的同学先看看,然后这次我们来讲Git的具体操作和指令. 四 ...
- 开发工具之Git(一)
目录 一.什么是Git 二.Git基本原理 三.Git用户交互 一.什么是Git 答:Git是一个分布式版本控制软件.另外提一句,它的开发者就是大名鼎鼎的Linux之父Linus. 版本控制,顾名思义 ...
- React Native 开发工具篇
正文 概述:开发RN的工具有很多,选择性也比较多,比如Facebook专门为React开发的IDE:Nuclide,还有做前端比较熟悉的WebStorm.Sublime Text 3.VS Code等 ...
随机推荐
- 【31.93%】【codeforces 670E】Correct Bracket Sequence Editor
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 前端——CSS选择器
目录 前端CSS CSS三种引入方式 CSS标签选择器 基本选择器 1.元素选择器 2.类选择器 3.id选择器 4.通用选择器 组合选择器 1.后代选择器 空格 2.儿子选择器 > 3.毗邻选 ...
- 图解Go里面的sync.Map了解编程语言核心实现源码
基础筑基 在大多数语言中原始map都不是一个线程安全的数据结构,那如果要在多个线程或者goroutine中对线程进行更改就需要加锁,除了加1个大锁,不同的语言还有不同的优化方式, 像在java和go这 ...
- 通过9个Linux-0.11实验学习操作系统
简介 2019年秋,我自学了一下哈工大的操作系统课程,感觉其设计的教程和实验作为操作系统入门是个不错的选择(虽然是基于较老的Linux-0.11写的).实验大致覆盖了操作系统中的核心概念,例如启动.中 ...
- JAVA优化篇 如何找到运行缓慢的线程
引入 JAVA提供了一些分析DUMP的工具,比如jmap,visualvm 等 JAVA还有寻找线程状态的工具,jstack等 数据库也有检查连接数,连接状态的命令,status,processlis ...
- leetcode.1266访问所有点的最小时间
平面上有 n 个点,点的位置用整数坐标表示 points[i] = [xi, yi].请你计算访问所有这些点需要的最小时间(以秒为单位). 你可以按照下面的规则在平面上移动: 每一秒沿水平或者竖直方向 ...
- 洛谷$P2572\ [SCOI2010]$ 序列操作 线段树/珂朵莉树
正解:线段树/珂朵莉树 解题报告: 传送门$w$ 本来是想写线段树的,,,然后神仙$tt$跟我港可以用珂朵莉所以决定顺便学下珂朵莉趴$QwQ$ 还是先写线段树做法$QwQ$? 操作一二三四都很$eas ...
- 【C++】自加、自减(补充)
// // main.cpp // [记录]自加.自减(补充) // // Created by T.P on 2018/3/7. // Copyright © 2018年 T.P. All righ ...
- Intellij IDEA 导入eclipse 项目
HoJe一个会rep的程序猿 . 感谢2019 时间匆匆,一转眼2019要跟我们说再见了.我们怀有太多的期望就难免遭遇失望和挫折.我们遇到了困难,往往不是想办法去解决,而是抱怨这个命运的不公.如果生活 ...
- cesium加载WFS服务(GeoServer发布)
需求: 为了便于前端渲染数据,自定义图层渲染. 思路: 获取地图服务中的要素进行渲染. 工具: GeoServer 2.6.4,cesium, 思路有了就开始找资料写代码,cesium有接口可以加载W ...