来源:
秦时明月NightTiger
Git和Github的学习
作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主。有不正确的地方,欢迎批评指正。
本文学习视频是:https://www.bilibili.com/video/av24736323
Git和Github的学习
关于Git和Github的相关知识综述
1、版本控制
2、Git简介
3、Git命令行操作
4、Git图形化界面操作
5、Gitlab服务器环境搭建
1、 版本控制工具应该具备哪些功能
1.1、协同修改:多人并行不悖的修改服务器端的同一个文件。
1.2、数据备份:不仅保存目录和文件的当前状态,还能够保存每一个人提交过的历史状态。
1.3、版本管理:再保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,调高运行效率,这方面SVN采用的是增量式管理的方式,而Git采取了文件系统快照的 方式。
1.4、权限控制:对团队中参与开发的人员进行权限控制。对团队开发者贡献的代码进行审核——Git独有。
1.5、历史记录:查看修改人、修改时间、修改内存、日志信息。将本地文件恢复到某一个历史状态。
1.6、分支管理:循序开发团队在工作过程中多条生产线同事推进任务,进一步提高效率。
2、版本控制介绍
2.1、版本控制
工程设计领域中使用 版本控制管理工程蓝图的设计过程。在IT开发过程中也可以使用版本控制思想管理代码的版本迭代。
2.2版本控制工具
思想:版本控制
实现:版本控制工具
集中式版本控制工具:CVS、SVN、VSS...
分布式版本控制工具:Git、Mercurial、Bazaar、Darcs(避免单点故障)
3、Git简史
3.1Git发展历程(略)
3.2Git官网:https://git-scm.com
3.3Git的优势:
1)大部分操作在本地完成,不需要联网
2)完整性保证
3)尽可能添加数据额而不是删除或者修改数据
4)分值操作非常快捷流畅
5)与Linux命令全面兼容
3.4Git的安装过程(略)
3.5Git的结构
3.6Git和代码托管中心
代码托管中心的任务:维护远程库
1)局域网环境下:Gitlab服务
2)外网环境下:Github 码云
3.7本地库与远程库
团队内部协作
跨团队协作
4 Git 命令操作
4.1本地库初始化
补充:在开始操作之前
Linux的操作命令:
ll 查看当前目录
ls -la 查看当前目录,带隐藏资源的
ls -l|less 分屏查看
cd Git/ 进入到某一目录
mkdir WeChat 建立一个目录叫做WeChat
git init git初始化命令
pwd 是print working directory 命令显示整个路径名
ll .git/ 显示此目录中 .git目录下的文件有哪些 查看.git的目录
cd ~ 家目录
1)命令: git add
2)效果:
3)注意:.git目录中存放的是本地库相关的子目录和文件,不要删除,也不要随意修改。
4.2 设置签名
1)形式
用户名:
Email地址:goodMorning@qq.com
2)作用:区分不同开发人员的身份
3)辨析:这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系
4)命令
项目级别/仓库级别:仅仅在当前本地库范围内有效
git config user.name tom_pro
git config user.email goodMorning@qq.com
信息保存位置: ./.git/config 文件
系统用户级别:登录当前操作系统的用户范围
git config --global user.name tom_glb
git config --global user.email goodMorning_glb@qq.com
信息保存位置: ~/.gitconfig 文件
级别优先级:
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名
如果只有系统用户级别的签名,就以系统用户级别的签名为准
二者都没有不允许
4.3 Git版本控制的操作
本节详细内容:https://www.bilibili.com/video/av24736323/?p=12
git status
vim good.txt 新建一个txt文件
:wq 关闭文件
git add good.txt 将good.txt加入到暂存区
git rm --cached good.txt 将good.txt从暂存区里面移除
git commit good.txt 将good.txt提交
:set nu 显示行号
i 进入编辑模式
cat good.txt 显示good.txt的内容
git reset HEAD good.txt 将good.txt改正没有暂存
git commit -m "My second" good.txt 常用的 不用进入vim编辑器
基本操作总结:
状态查看 gitstatus 查看工作区、暂存区转台
添加操作 git add [file name] 将工作区的“新建/修改”添加到暂存区
提交操作 git commit -m "commit message" [file name] 将暂存区内容提交到本地库
再次回顾
查看历史记录
git log 最全内容
多屏显示控制方式:
空格向下翻页
b向上翻页
q退出
git log --pretty=oneline
git log --oneline
git reflog
HEAD@{移动到当前版本需要多少步}
前进后退历史版本操作
基于索引值操作[推荐]
git reset --hard 索引值
使用^符号:只能后退到之前存在的版本
git reset --hard HEAD^ 一个^表示后退一步,n个表示后退n步
使用~符号:只能后退到之前的版本
git reset --hard~3 表示后退3步
reset命令三个参数对比
--soft 仅仅在本地库移动HEAD指针
--mixid 在本地库移动HEAD指针 重置暂存区
--hard 在本地库移动HEAD指针 重置暂存区 重置工作区
永久删除文件后怎么恢复
rm aaa.txt 删除文件
前提:删除前,文件存在时的状态提交到了本地库
操作:git reset --hard [指针位置]
删除操作已经提交到本地库:指针位置指向历史记录
删除操作尚未提交到本地库:指针位置使用HEAD
比较文件差异
git diff [文件名] git diff aaa.txt 将工作区中的文件和暂存区进行比较
git diff[本地库中历史版本][文件名] git diff HEAD aaa.txt
git diff HEAD^ aaa.txt将工作区中的文件和本地库历史记录比较
不带文件名比较多个文件
4.4分支管理
什么是分支?
在版本控制过程中,使用多条线同时推进多个任务。
分支的好处:
同时并行推进多个功能开发,提高 开发效率
各个分支开发过程中,如果一个分支开发失败,不会对其他分支有任何影响,失败的分支删除重新开始即可。
分支操作:
创建分支 git branch [分支名]
查看分支 git branch -v
切换分支 git checkout [分支名]
合并分支 第一步:切换到 接受修改的分支(被合并,增加新内容)上,git checkout [分支名]
第二步:执行命令 git merge [有新内容的分支]
分支冲突
冲突表现
冲突解决
第一步:编辑文件,删除特殊符号
第二步:把文件修改到满意的程度,保存退出
第三步:git add [文件名]
第四步:git commit -m "日志信息"
注意:此时commit一定不能带具体文件
5、Git基本原理
5.1哈希
哈希是一个系列的加密算法,各个不同的哈希散发虽然加密强度不同,但是有以下几个共同点:
1)不敢输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。
2)哈希算法确定,输入数据确定,输出数据能够保证不变
3)哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大
4)哈希算法不可以
Git底层采用的是 SHA-1 算法。
5.2Git保存版本的机制
集中式版本控制工具的文件保存管理机制
Git的文件管理机制
Git文件管理机制细节
Git的“提交对象”
提交对象及其父对象形成的链条
5.3Git分支管理机制
分支的创建
创建分支 git branch [分支名]
git branch hot_fix 新建一个分支
分支的切换
git checkout [分支名]
6 GitHub
6.1 账号信息
GitHub 首页就是注册页面 https://github.com/
cd .. 上一级目录
git remote -v
git remote add origin https://github.com/xzzxqinlihui/huashan.git 给远程地址起别名
git push origin master 推送 别名 分支
克隆:
git clone https://github.com/xzzxqinlihui/huashan.git 克隆
git origin [远程地址]
完整的把远程库下载到本地
创建origin远程地址别名
初始化本地库
加入团队的操作:https://www.bilibili.com/video/av24736323/?p=38
拉取
pull就是fetch + merge
git fetch [远程库的别名][远程分支名]
git merge [远程库地址别名/远程分支名]
git pull origin master
git fetch origin master 从远程库中抓取
解决冲突
第一步:如果不是基于Github远程库最先版本所做的修改,不能推送,必须先拉取。
第二步 :拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可。
跨团队协作:https://www.bilibili.com/video/av24736323/?p=41
本地修改,然后推送到远程
pull request
对话
审核代码
合并代码
将远程库 拉取到 本地库
SSH登录:https://www.bilibili.com/video/av24736323/?p=42
7.Eclipse操作
eclipse中的git插件
7.1工程初始化为本地库
操作流程: 工程=>右键=>Team=>Share Project=>Git=>Next
勾选对话框
会出现如下图所示对话框
Finish
7.2Eclipse中忽略文件
概念:Eclipse待定文件
这些都是Eclipse为了管理我们创建的工程而维护的文件,和我们开发的代码没有直接关系,最好不要在Git中进行追踪,也就是把它们忽略。
.classpath文件
.project文件
.settings目录下所有文件
为什么要忽略Eclipse特定文件呢?
同一个团队中很难保证大家来使用相同的IDE工具,而IDE工具不同时,相关工程待定文件就有可能不同。如果这些文件加入版本控制,那么开发时很可能需要为了这些文件解决冲突。
7.4 Oxygen Eclipse 克隆工程操作
import...导入
8.Git工作流
8.1概念
在项目开发过程中使用Git的方式
8.2分类
集中式工作流
像SVN一样,集中式工作流以中央仓库为项目所有修改的单点实体。所有修改都是提交到Master这个分支上。
这种方式与SVN的主要区别就是开发人员有本地库,Git很多特性并没有用到。
GitFlow工作流
GitFlow工作流通过为功能开发,发布准备和维护设立独立的分支,让发布迭代过程更流畅。严格的分支模型也为大型项目提供了非常必要的结构。
Forking工作流
Forking工作流是在GitFlow基础上,充分利用了Git的Fork和pull request的功能已达到代码审核的目的,更适合安全可靠的管理大团队的开发者,而且能接受不信任贡献者的提交。
8.3GitFlow工作流详解
分支种类
Git工作流:https://www.bilibili.com/video/av24736323/?p=54
实战
具体操作
创建分支
命名
切换分支
远程的分支
点击
检出远程的新分支
切换回master
合并分支
选择分支
合并结果
推送到远程
合并成功后,将master推送到远程
9 Gitlab服务器搭建过程
详细过程: https://www.bilibili.com/video/av24736323/?p=57