分布式版本控制工具----git
分布式版本控制工具
- 版本控制
- 版本控制的功能
- 版本控制分类
- git简介
- git优势
- git安装
- git结构
- 代码托管中心
- 代码托管模式
- git操作
- git 分支(45minutes)
- 分支操作
- git基本原理
- hash算法
- git文件管理机制
- github
- git图形化界面
- Eclipse中的git
版本控制
版本控制的功能
- 协同修改
多人并行—修改服务器同一文件 - 数据备份
保存文件的当前状态、历史状态 - 版本管理
保存每一个版本信息时,不存重复的数据,节约内存
git采用文件快照的方式,
svn采用增量式 - 权限控制
对团队中开发者进行权限控制,对团队外贡献的代码进行审核(git独有) - 历史记录
查看修改人、日志信息等;将本地文件恢复到某一历史版本 - 分支管理
团队开发中,多条生产线同时推进,提高效率
版本控制分类
集中式:svn,各个版本存于服务器,易单点故障
分布式:git,能有效解决单点故障,C语言开发
git简介
git官网
由linus使用C编写
git优势
- 大部分操作----本地完成-----不需联网
- 保证完整性
- 尽可能添加数据,而不是删除、修改数据
- 分支操作,快捷流畅
- 与linux命令全面兼容
git安装
下载地址
window
下载,安装,use git from git bash
其他默认!!使用右键–git bash herelinux
参考地址
安装当前linux版本的最新、稳定版的git
sudo apt-get install git #最新、稳定版
git --version #查看
git结构
代码托管中心
维护远程代码仓库
- 局域网
GitLab服务器 - 外网
GitHub,国外服务器,慢
码云,国内服务器,快,可以微信登录
代码托管模式
- 团队内部
- 跨团队
git操作
- 初始化本地仓库
进入项目目录,命令行执行git init,初始化一个本地仓库.git,内部的文件不能更改 - 设置签名
用户名:jack
Email:xxxx@qq.com
作用:区别不同的开发人员,与登录远程仓库的用户名无关
命令:
项目级别—当前项目
git config user.name jack
git config user.email xxxx@qq.com
签名保存在项目目录下.git/config
系统用户级别—登录操作系统的用户
git config - -global user.name jack
git config - -global user.email xxxx@qq.com
签名保存在~/.gitconfig
二者的优先级:就近原则 - 实际操作
git status #查看当前工作区、暂存区状态
sudo echo test file > a.txt#增加到暂存区
git add a.txt
#从暂存区移除
git rm --cached a.txt#暂存区提交到本地仓库
git commit a.txt #使用vim添加操作的描述
git commit -m "描述信息" a.txt#查看历史记录
git log
如下,可以看到提交的人、提交时间、提交描述、每次提交的索引hash值,HEAD是一个指针,指向当前版本。
若内容太多,需翻页:空格向下、b向上、q退出
#格式化输出版本
git log --pretty=online
git log --oneline
git reflog
- 版本切换
1)使用索引
2)使用^,后退一步
3)使用~,后退n步
#随意切换
git reflog
git reset --hard 复制的索引#后退的切换
git reset --hard HEAD^ #后退一步
git reset --hard HEAD^^ #后退两步#后退n步
git reset --hard HEAD~100 #后退100步
- hard、soft、mixed
#查看本地文档
git help reset#reset的三个参数 index file[暂存区] working tree[工作区]
#reset --soft:仅在本地仓库移动HEAD指针
#reset --mixed:本地仓库移动指针;重置暂存区;
#reset --hard:本地仓库移动指针;重置暂存区;重置工作区
#hard使用较多
- 删除文件,并找回
文件存在时的状态,需提交到本地库
#删除
sudo rm test.txt #在git管理的项目目录下
git status
#将删除操作文件,增加到暂存区
git add test.txt
git status
#删除的文件,提交本地仓库
git commit -m "测试删除" test.txt#文件删除了,但是删除记录不会丢
#只需回到上一个版本,就可以实现文件的恢复
git reset --hard 索引#如果删除的文件,只增加到暂存区,没有提交到本地库
#恢复
git reset --hard HEAD
- 比较文件
#比较工作区与暂存区
git diff test.txt
#比较工作区与当前版本
git diff HEAD test.txt
git diff HEAD^ test.txt
git diff HEAD~2 test.txt
绿色为差异部分
git 分支(45minutes)
多条生产线同时推进。
复制Master,产生分支,各个分支同时推进,完成则合并到Master。产生Bug则分支热修复。
分支作用:
1.并行推进,提高开发效率
2.其中一个分支失败,不影响其他分支
分支操作
初始化本地仓库,就只有一个Master分支
#查看分支
git branch -v
#创建分支,将主分支的仓库复制过来
git branch b1
#切换分支
git checkout b1#在b1分支,不断修改,然后合并到Master分支
git checkout master #切换到master
git branch -v
git merge b1 #在 master上合并b1分支#合并分支,产生冲突,怎么解决?
#打开文件,删除特殊符号(HEAD代表当前分支),保存
#git add filename
#git commit -m 'xxxxxx'
#最后提交没有文件名
git基本原理
hash算法
特点
- hash算法固定,输出加密结果长度固定(不管输入多少数据)
- hash算法固定,输入内容不变,加密结果不变
- hash算法固定,输入数据变化,加密结果也变化,且通常变化很大
- hash算法不可逆
git底层采用SHA-1,来校验文件
服务端的文件,计算一次hash值,下载到本地的文件计算一次hash值,对比两个值,一致则文件没有损坏。
git文件管理机制
不同版本对应多个文件(以一个文件为例)
初始化本地仓库,创建一个master分支(指针),此时HEAD指向master
创建分支,创建一个指针,可以指向所有文件的不同版本,即版本切换。
看起来像是复制了master分支
切换分支时,HEAD指向该分支指针。
切换不同的分支,只是HEAD指针的移动。
github
- 使用邮箱注册账号
- 更改头像:右上角账户下三角—your profile----点击头像
- 创建本地库
# 创建项目,并在目录下
#初始化本地库
git init
#签名
git config user.name lauf
git config user.email xxx@mail.com#编辑项目,并提交到本地库
- 创建远程库
登录github----点击右上角±—>new repository
输入一个仓库名字,创建,得到如下链接:
将该https链接保存在当前项目的git管理中
#查看保存的远程仓库链接
git remove -v
#增加远程仓库链接
git remove add name url #给url起一个名字name#本地库 推送到远程库
git push remote_name native_branch #将本地的一个分支,推送到远程库
#git是怎么识别当前用户是管理远程仓库用户的????签名
#推送远程库时的错误
##其他
echo "# lauf" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/wn15239159680/lauf.git
git push -u origin main
推送远程的错误:
另外还要保证网速!
如下输入github个人口令:
生成个人口令:右上角—点击头像-----settings----Developer settings-----Personal access tokens
输入token描述-----选择所有范围select scopes—生成----复制保存(后续看不到了)
- 猪队友克隆操作
#创建一个文件夹,并进入
git clone github_addr #远程仓库地址--code 复制
克隆的功能:
完整地将远程库-----复制到本地
在复制下来的项目中初始化本地仓库, 保存远程地址
此时该队友只能将修改----提交到本地库(需先签名)!!!,不能远程库,因为在push到远程库时,需要登录自己的github,如下:
lauf@master:~/lauf$ git push origin master
Username for 'https://github.com': 944582529@qq.com
Password for 'https://944582529@qq.com@github.com': 个人权限口令验证
Counting objects: 3, done.
Writing objects: 100% (3/3), 250 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/wn15239159680/lauf.gite623a3f..d404a43 master -> master
问题1:windows下克隆,无法解析域名!!
问题2:ubuntu下克隆,
lauf@master:~$ git clone https://github.com/wn15239159680/lauf.git
Cloning into 'lauf'...
fatal: unable to access 'https://github.com/wn15239159680/lauf.git/': gnutls_handshake() failed: The TLS connection was non-properly terminated.
lauf@master:~$ git config --global --unset http.proxy
lauf@master:~$ git config --global --unset https.proxy
lauf@master:~$ git clone https://github.com/wn15239159680/lauf.git
Cloning into 'lauf'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), done.
Checking connectivity... done.
$ git clone https://github.com/wn15239159680/lauf.git
Cloning into 'lauf'...
fatal: unable to access 'https://github.com/wn15239159680/lauf.git/': Could not resolve host: github.com$ git config --global --unset http.proxy$ git config --global --unset https.proxy$ git clone https://github.com/wn15239159680/lauf.git
Cloning into 'lauf'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
解决!!
将猪队友的github账户加入团队
远程仓库管理账户-----登录github----settings----manage access
输入队友的github账号名字
复制邀请链接-----发送队友----队友登录github----访问该链接----接受邀请—队友可以使用自己的github账号git push拉取修改的内容
git fetch origin master #将远程库拉取到本地库,并不修改工作区
#可以查看本地内容,并没有变化
#切换远程master分支
git checkout origin/master#合并到本地
git merge origin master#pull = fetch + merge
#当修改的内容不多时,可以使用pull
git pull origin master
- 团队冲突解决
若两个人同时改一个文件的同一个位置,A先提交本地并push到远程库;B再提交本地并push到远程会报错!
解决:
B先pull,然后解决冲突(删除特殊符号),git add xxx----git commit -m ‘xxxxx’----git push origin master
注意:若修改不是基于github远程库的最新版,则需要pull,有冲突则解决。
A/B各有一个github账号
- 跨团队协作
- 复制团队A的github仓库地址
登录团队B的成员的github账号,然后在地址栏后面粘贴复制的github仓库地址,可以看到对应的仓库,点击fork。
2)团队B成员,克隆,本地修改,推送远程(使用自己的github账号)
3)B成员—点击Pull requests—new pull requests—create pull requests—添加描述
4)团队A的管理员账户----Pull requests—对话、审核----merge pull request—添加日志、confirm merge
- ssh免密登录
使用https链接,每次需要输入验证口令,这里配置免密ssh方式
1)生成rsa密钥对
ssh-keygen -t rsa -C github_account_email#将公钥内容复制到github
cd ~
cd .ssh
cat id_rsa.pub #全部复制
2)登录github----settings-----SSH and GPG keys—new ssh key -----输入title&粘贴
3)到客户端操作,提交到本地库
4)本地管理远程库的ssh地址
git remote -v
git remote add origin_ssh ssh_addr
git push origin_ssh master #将本地master分支,通过ssh,推送到远程库。
此时,将本地库—推送到远程时,不再需要输入密码!!
git图形化界面
Eclipse中的git
window—preferences—team—git
分布式版本控制工具----git相关推荐
- Linux | 分布式版本控制工具Git【版本管理 + 远程仓库克隆】
文章目录 一.前言 二.有关git的相关历史介绍 三.Git版本管理 1.感性理解 -- 大学生实验报告 2.程序员与产品经理 3.张三的CEO之路 -- 版本管理工具的诞生 四.如何在Linux上使 ...
- Git分布式版本控制工具(Git命令基本操作)
1.目标 了解Git基本概念 能够概述git工作流程 熟悉Git代码托管服务 能够使用Git常用命令 能够使用idea操作git 了解Git标签 了解SSH协议传输数据 2.概述 2.1 .开发中的实 ...
- 分布式版本控制工具Git的安装
git分布式版本控制工具 本地仓库,远程仓库(github,gitee) 下载地址:https://git-scm.com/ 速度超级慢-23k/s 换成Git下载国内镜像地址 https://npm ...
- 分布式版本控制工具Git
一.Git技术简介 Git是一个分布式版本控制系统,与集中式的SVN不同. 1. 主要特点 集中式特点: 所有人的资源全部保存在中央服务器. 所有人开发前都需要从中央服务器上下载同步其他人的代码才能继 ...
- 分布式版本控制工具 Git
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 转载于:https://www.c ...
- 【尚硅谷Java笔记+踩坑】Git(分布式版本控制工具)
用于复习快速回顾 目录 1.Git 1.0.提交项目到GitHub简洁版 1.2.版本控制 1.3.版本控制工具 1.4.Git简史 1.5.Git工作机制 1.6.Git和代码托管中心 2.Git安 ...
- 分布式版本控制工具:git与Mercurial(zz)
分布式版本控制工具:git与Mercurial [收藏此页] [打印] 作者:cyfdecyf 2007-12-26 内容导航: 第1页 [IT168 技术文档] 说到版本控制工具,很多人可能 ...
- Git(分布式版本控制工具)
[标注]:该笔记是转载自黑马Git教程,里面是包含自己做的笔记,黑马笔记开放共享,不存在侵权的问题,文章最后给出了资料的网盘链接 Git的学习是不依赖我们前面学习的知识,就算没有学习java也可以学习 ...
- Git分布式版本控制工具【IDEA版】【安装和使用以及上传代码到Gitee】(一篇文章精通系列)
一.目标 了解Git基本概念 能够概述git工作流程 能够使用Git常用命令 熟悉Git代码托管服务 能够使用idea操作git 二.Git概述 1.开发中的实际场景 场景一:备份 小明负责的模块就要 ...
最新文章
- sonar jacoco 覆盖率为0_Jacoco统计代码覆盖率
- 【XStream】XStream 忽略不重要点元素
- 查看远端的端口是否通畅3个简单实用案例!
- linux 格式化磁盘数据恢复_电脑文档被格式化,怎么恢复格式化文档!
- python跟unicode一样吗_PYTHON编码处理-str与Unicode的区别
- leetcode 79. Word Search | 79. 单词搜索(回溯+DFS)
- python绘制三维曲线图_Python基于matplotlib实现绘制三维图形功能示例
- 如何成为一名合格的自动驾驶工程师
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap[转]
- 【计算机网络复习 数据链路层】3.6.5 PPP、HDLC
- php文件的作用,php入口文件的作用-PHP问题
- Javascript Number.MIN_VALUE
- 索引添加后,ACCESS数据库表查询运行速度的区别
- mybatis执行sql脚本
- 如何把Eclipse改成中文版
- 计算机需要无线网卡进行网络连,usb无线网卡怎么用详细步骤
- 字符串的基本使用规则、推导式和常用的几种模块的应用(代码及简单解释)
- 18、关于oracle 认证的几个问题
- 第16套题目 doc.计算机,计算机二级ms实操题excel难点汇总.doc
- CSS——制作三角形