IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 浅析git及可视化工具sourcetree的使用方式 -> 正文阅读

[开发工具]浅析git及可视化工具sourcetree的使用方式

小谈git

前言

上家公司使用的是git来管理代码,由于最近的工作变动,新公司大部分代码都是使用svn管理代码,对于git的使用还不是很普遍,于是将我之前学的一些git使用技巧及我所理解的原理来做一次整理并且分享。希望大家看这篇文章的都能有所收获。

svn和git的区别

svn和git都是版本控制系统,只不过是svn是集中式版本控制,而git是分布式版本控制,而且是当今世界上最大的分布式版本控制。那集中式版本控制和分布式版本控制的区别在哪里呢,那先看看下面俩张图。
在这里插入图片描述集中式管理的工作流程
在这里插入图片描述分布式管理的工作流程

从图一就可以知道SVN他有一个中央服务器,每个人可以从一定程度上看到项目中其他人干了啥,管理员也可以轻松的掌握每个开发者的权限。然而有利有弊,就是这个中央服务器的单点故障时,就是如果是宕机一小时,那么在这一小时内,谁都无法提交更新、还原、对比等,如果磁盘发生故障,没有做备份或者备份的不够,还有可能造成丢失数据。以下是找到的svn的特点。
SVN的特点

  • 每个版本库有唯一的URL(官方地址),每个用户都从这个地址获取代码和数据;
  • 获取代码的更新,也只能连接到这个唯一的版本库,同步以取得最新数据;
  • 提交必须有网络连接(非本地版本库);
  • 提交需要授权,如果没有写权限,提交会失败;
  • 提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类;
  • 冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。

从图二就可以看出,git他没有一个中央服务器,准确的来说每一个人的本地都相当于一个中央服务器,他只有一个远端,一个公共服务器。所以呢,普通git的话所有人相当于拥有查看所有代码权限,之后就有些git管理仓库的产生,为开发团队提供存储,分享,发布和合作开发项目的中心化存储的场所,来便于权限控制。比如Gitlab和Github。而我所知道的在Gitlab和Github在组中一般是有五中权限:Guest、Reporter、Developer、Master、Owner

  1. Guest:一般没人用这个客人权限。可以创建issue(问题)、发表评论,可是不能读写版本库。
  2. Reporter:QA、PM赋予这个权限,可以克隆代码,不能提交。
  3. Developer:普通开发者的权限,可以克隆代码、开发、提交、push。
  4. Master:核心RD负责人可以赋予这个权限。可以创建项目、添加tag、保护分支、添加项目成员、编辑项目。
  5. Owner:开发组leader可以赋予这个权限,可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员。

对于正常项目的多人开发,一般开发俩种权限就够了,developer和master。
从developer的开发者角度来看,git的以下功能。

  1. 从服务器上克隆完整的Git仓库(包括代码和版本信息)到本地上。
  2. 在自己的机器上根据不同的开发目的,创建分支,修改代码。
  3. 在本地上自己创建的分支上提交代码。
  4. 本地上合并分支。
  5. 把远端服务器上最新版的代码fetch下来,然后跟自己的分支合并。
  6. 上步操作可能出现的情况是改了同份文件的同样位置的代码,这时候就产生了冲突。解决一下产生的冲突(合作解决冲突)。
  7. 之后生成补丁(patch),把补丁推送到远端服务器。

以上就是git管理工具的最最最基础的使用方法了。后面还会有打标签,不同分支不同作用。

分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库.

git的使用

git工作流程

git有这么一个概念,就是四个区域,分别是

  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库

工作区:你在拉取远程分支所在的地方,几乎就是你在拉到代码之后所处的本地环境就俗称工作区,在该区域,就是平时开发的地方。

暂存区:顾名思义就是暂存的地方,就是.git目录下面的index文件,暂存区会通过git add来添加文件的相关信息,他是不保存文件实体的,是通过id来指向每个文件实体。也可以使用git status来查看暂存区的状态。暂存区是标记了你当前的工作区,哪些内容是被git所管理的。但很重要的就是在完成某个需求之后第一步就应该是使用git add来提交到暂存区,让git去管理。

本地仓库:在从远端拉取过来之后就有的仓库,在一次次git commit后同步index目录树到本地仓库,最后使用git push来同步本地仓库和远程仓库

远程仓库:远程仓库的内容可能被分布在多个地点的处于协作关系的本地仓库修改,因此它可能与本地仓库同步,也可能不同步,但是它的内容是最旧的。

下面我从网上找了一张图比较直观的阐述了这区域之间的关系

在这里插入图片描述

git常用命令

第一步先理解一下head,head是他始终是在当前分支最新提交点上,在你所处的分支发生改变了,或者你的分支自己提交了或者别人提交了,head都会发生变化。如下图可视化工具能够很明确的看出来。
在这里插入图片描述

add

对于add也很简单,就是为了让git管理,将你工作区的修改内容提交到暂存区。主要也就是

  • git add .
  • git add 【dir】
  • git add 【file1】
    这时候大家就注意了,命令行工具是不是很简单,可是呢如果是不想要add的部分东西呢,那还得输入【git reset 文件名】撤销对于git的add操作,但是如果使用可视化工具咋样,如下面俩张图所示
    在这里插入图片描述
    在这里插入图片描述
    点击提交,那+和-号不是很明显吗

commit

commit的相关命令也很简单。他的主要操作也就是将暂存区的内容提交到本地仓库,并使当前分支的head向后移动一个提交点
命令如下:

  • git commit -m 【message】
  • git commit 【file1】 -m 【message】

是不是很简单,来看看可视化工具如何操作。
在这里插入图片描述
我的天呐,来来来 继续 分支更能体会到可视化工具的好处了

branch

涉及到协作,git里面一个最重要的就是分支了,命令行操作大概有这四种
查看分支、切换分支、创建分支、删除分支这四大操作

  • git branch
  • git branch -r
  • git branch -a
  • git branch 【branch-name】
  • git checkout -b 【branch-name】
  • git branch --track【branch】【remote-branch】
  • git checkout【branch-name】
  • git branch -d 【branch-name】
  • git push origin --delete 【branch-name】

记住这些操作吧,这只是普通的操作。
可视化工具如何实现呢,先看看下面的图
在这里插入图片描述
一顿操作猛如虎,可以了,分支之类的操作都完成了。

merge

也到了团队合作里面最重要的一步了,那就是合并,同样先看命令行

  • git fetch 【remote】
  • git merge 【branch】

一般合并之后,如果出现修改了同一个文件的同一个地方发生了变更,那只能手动解决冲突。那么问题来了!!!但是使用命令行工具的话,对于新手很容易找不到方向,那就看看可视化工具。
我来将test02合并到test上面。
首先要切换到test上面,如何将test02合并进去,那就可以了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

rebase

衍合是合并的其他一种解决就是,这是我网上找的,就很清晰。
在这里插入图片描述
这用的不是很多,有需求再来说吧

revert

git revert用一个新提交来消除一个历史提交所做的任何修改。

  • git reset是直接删除指定的commit,git revert是用一次新的commit来回滚之前的commit。
  • 从效果上面看是一样的,但是时间长了就会有区别,因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,减少冲突。但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入,产生很多冲突。git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

push

上传本地仓库到远程仓库

  • git push 【remote】【branch】
  • git push 【remote】–force
  • git push 【remote】–all

可视化工具会简单不少。好嘞,就暂时这样吧,git的基础操作大概这些。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 18:03:22  更:2022-04-18 18:05:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 3:05:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码