分布式版本控制工具

  • 版本控制
    • 版本控制的功能
    • 版本控制分类
  • git简介
    • git优势
    • git安装
    • git结构
    • 代码托管中心
    • 代码托管模式
  • git操作
  • git 分支(45minutes)
    • 分支操作
    • git基本原理
      • hash算法
      • git文件管理机制
    • github
  • git图形化界面
    • Eclipse中的git

版本控制

版本控制的功能

  1. 协同修改
    多人并行—修改服务器同一文件
  2. 数据备份
    保存文件的当前状态、历史状态
  3. 版本管理
    保存每一个版本信息时,不存重复的数据,节约内存
    git采用文件快照的方式,
    svn采用增量式
  4. 权限控制
    对团队中开发者进行权限控制,对团队外贡献的代码进行审核(git独有)
  5. 历史记录
    查看修改人、日志信息等;将本地文件恢复到某一历史版本
  6. 分支管理
    团队开发中,多条生产线同时推进,提高效率

版本控制分类

集中式:svn,各个版本存于服务器,易单点故障
分布式:git,能有效解决单点故障,C语言开发

git简介

git官网
由linus使用C编写

git优势

  1. 大部分操作----本地完成-----不需联网
  2. 保证完整性
  3. 尽可能添加数据,而不是删除、修改数据
  4. 分支操作,快捷流畅
  5. 与linux命令全面兼容

git安装

下载地址

  1. window
    下载,安装,use git from git bash



    其他默认!!使用右键–git bash here

  2. linux
    参考地址
    安装当前linux版本的最新、稳定版的git

sudo apt-get install git #最新、稳定版
git --version #查看

git结构

代码托管中心

维护远程代码仓库

  1. 局域网
    GitLab服务器
  2. 外网
    GitHub,国外服务器,慢
    码云,国内服务器,快,可以微信登录

代码托管模式

  1. 团队内部
  2. 跨团队

git操作

  1. 初始化本地仓库
    进入项目目录,命令行执行git init,初始化一个本地仓库.git,内部的文件不能更改
  2. 设置签名
    用户名: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
    二者的优先级:就近原则
  3. 实际操作
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. 版本切换
    1)使用索引
    2)使用^,后退一步
    3)使用~,后退n步
#随意切换
git reflog
git reset --hard 复制的索引#后退的切换
git reset --hard HEAD^ #后退一步
git reset --hard HEAD^^ #后退两步#后退n步
git reset --hard HEAD~100 #后退100步
  1. hard、soft、mixed
#查看本地文档
git help reset#reset的三个参数 index file[暂存区] working tree[工作区]
#reset --soft:仅在本地仓库移动HEAD指针
#reset --mixed:本地仓库移动指针;重置暂存区;
#reset --hard:本地仓库移动指针;重置暂存区;重置工作区
#hard使用较多
  1. 删除文件,并找回
    文件存在时的状态,需提交到本地库
#删除
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
  1. 比较文件
#比较工作区与暂存区
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算法

特点

  1. hash算法固定,输出加密结果长度固定(不管输入多少数据)
  2. hash算法固定,输入内容不变,加密结果不变
  3. hash算法固定,输入数据变化,加密结果也变化,且通常变化很大
  4. hash算法不可逆

git底层采用SHA-1,来校验文件
服务端的文件,计算一次hash值,下载到本地的文件计算一次hash值,对比两个值,一致则文件没有损坏。

git文件管理机制


不同版本对应多个文件(以一个文件为例)
初始化本地仓库,创建一个master分支(指针),此时HEAD指向master
创建分支,创建一个指针,可以指向所有文件的不同版本,即版本切换。
看起来像是复制了master分支
切换分支时,HEAD指向该分支指针。

切换不同的分支,只是HEAD指针的移动。

github

  1. 使用邮箱注册账号
  2. 更改头像:右上角账户下三角—your profile----点击头像
  3. 创建本地库
# 创建项目,并在目录下
#初始化本地库
git init
#签名
git config user.name lauf
git config user.email xxx@mail.com#编辑项目,并提交到本地库
  1. 创建远程库
    登录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—生成----复制保存(后续看不到了)

  1. 猪队友克隆操作
#创建一个文件夹,并进入
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.

解决!!

  1. 将猪队友的github账户加入团队
    远程仓库管理账户-----登录github----settings----manage access

    输入队友的github账号名字
    复制邀请链接-----发送队友----队友登录github----访问该链接----接受邀请—队友可以使用自己的github账号git push

  2. 拉取修改的内容

git fetch origin master  #将远程库拉取到本地库,并不修改工作区
#可以查看本地内容,并没有变化
#切换远程master分支
git checkout origin/master#合并到本地
git merge origin master#pull =  fetch + merge
#当修改的内容不多时,可以使用pull
git pull origin master
  1. 团队冲突解决
    若两个人同时改一个文件的同一个位置,A先提交本地并push到远程库;B再提交本地并push到远程会报错!
    解决:
    B先pull,然后解决冲突(删除特殊符号),git add xxx----git commit -m ‘xxxxx’----git push origin master
    注意:若修改不是基于github远程库的最新版,则需要pull,有冲突则解决。

A/B各有一个github账号

  1. 跨团队协作
  1. 复制团队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
  1. 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相关推荐

  1. Linux | 分布式版本控制工具Git【版本管理 + 远程仓库克隆】

    文章目录 一.前言 二.有关git的相关历史介绍 三.Git版本管理 1.感性理解 -- 大学生实验报告 2.程序员与产品经理 3.张三的CEO之路 -- 版本管理工具的诞生 四.如何在Linux上使 ...

  2. Git分布式版本控制工具(Git命令基本操作)

    1.目标 了解Git基本概念 能够概述git工作流程 熟悉Git代码托管服务 能够使用Git常用命令 能够使用idea操作git 了解Git标签 了解SSH协议传输数据 2.概述 2.1 .开发中的实 ...

  3. 分布式版本控制工具Git的安装

    git分布式版本控制工具 本地仓库,远程仓库(github,gitee) 下载地址:https://git-scm.com/ 速度超级慢-23k/s 换成Git下载国内镜像地址 https://npm ...

  4. 分布式版本控制工具Git

    一.Git技术简介 Git是一个分布式版本控制系统,与集中式的SVN不同. 1. 主要特点 集中式特点: 所有人的资源全部保存在中央服务器. 所有人开发前都需要从中央服务器上下载同步其他人的代码才能继 ...

  5. 分布式版本控制工具 Git

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 转载于:https://www.c ...

  6. 【尚硅谷Java笔记+踩坑】Git(分布式版本控制工具)

    用于复习快速回顾 目录 1.Git 1.0.提交项目到GitHub简洁版 1.2.版本控制 1.3.版本控制工具 1.4.Git简史 1.5.Git工作机制 1.6.Git和代码托管中心 2.Git安 ...

  7. 分布式版本控制工具:git与Mercurial(zz)

    分布式版本控制工具:git与Mercurial [收藏此页] [打印] 作者:cyfdecyf  2007-12-26 内容导航: 第1页 [IT168 技术文档]    说到版本控制工具,很多人可能 ...

  8. Git(分布式版本控制工具)

    [标注]:该笔记是转载自黑马Git教程,里面是包含自己做的笔记,黑马笔记开放共享,不存在侵权的问题,文章最后给出了资料的网盘链接 Git的学习是不依赖我们前面学习的知识,就算没有学习java也可以学习 ...

  9. Git分布式版本控制工具【IDEA版】【安装和使用以及上传代码到Gitee】(一篇文章精通系列)

    一.目标 了解Git基本概念 能够概述git工作流程 能够使用Git常用命令 熟悉Git代码托管服务 能够使用idea操作git 二.Git概述 1.开发中的实际场景 场景一:备份 小明负责的模块就要 ...

最新文章

  1. sonar jacoco 覆盖率为0_Jacoco统计代码覆盖率
  2. 【XStream】XStream 忽略不重要点元素
  3. 查看远端的端口是否通畅3个简单实用案例!
  4. linux 格式化磁盘数据恢复_电脑文档被格式化,怎么恢复格式化文档!
  5. python跟unicode一样吗_PYTHON编码处理-str与Unicode的区别
  6. leetcode 79. Word Search | 79. 单词搜索(回溯+DFS)
  7. python绘制三维曲线图_Python基于matplotlib实现绘制三维图形功能示例
  8. 如何成为一名合格的自动驾驶工程师
  9. 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap[转]
  10. 【计算机网络复习 数据链路层】3.6.5 PPP、HDLC
  11. php文件的作用,php入口文件的作用-PHP问题
  12. Javascript Number.MIN_VALUE
  13. 索引添加后,ACCESS数据库表查询运行速度的区别
  14. mybatis执行sql脚本
  15. 如何把Eclipse改成中文版
  16. 计算机需要无线网卡进行网络连,usb无线网卡怎么用详细步骤
  17. 字符串的基本使用规则、推导式和常用的几种模块的应用(代码及简单解释)
  18. 18、关于oracle 认证的几个问题
  19. 第16套题目 doc.计算机,计算机二级ms实操题excel难点汇总.doc
  20. CSS——制作三角形

热门文章

  1. 非递归后序遍历二叉树总结(2种方法)
  2. 期刊论文发表一定要有老师吗
  3. 把C++当脚本语言写
  4. JS高级 之 防抖 debounce - throttle 节流
  5. 数据结构 - 双链表的头插法和后插法
  6. 计算节点nova服务启动失败
  7. showdialog
  8. kbe之1分钟完成安装
  9. 第130篇 在 OpenSea 上创建自己的 NFT 商店(2)
  10. 安全报告:移动端木马减少 钓鱼网站增多