SourceTree的基本使用

SourceTree

一、软件简介

SourceTree是拥有可视化界面的项目版本控制软件,适用于git项目管理

二、对Git工作原理的理解

2.1 Git存储目录

在这里插入图片描述

hooks 该目录用于配置 客户端执提交操作用于触发服务端的脚本配置,一般用于自动化部署使用
info 该目录用于配置一些不希望被 Git 管控的文件。
objects 该目录用于存储所有数据对象内容,这些数据内容类型有 commit、tree、blob、tag
refs 该目录用于存储 Git 本地以及远程分支的引用,当然还有一种特殊的引用标签引用
config 该文件包含项目特有的配置选项,并且该配置仅对该 Git 仓库有效
description 该文件仅供 GitWeb 程序使用
HEAD 该文件表示当前 Git 仓库处于哪个分支
index 该文件保存暂存区信息 (空仓库下该文件不会显示一旦执行 git add 操作该文件就会出现)

2.2 Git的存储方式

Git 是一个内容寻址文件系统,其核心部分是一个简单的键值对数据库(key-value data store)。 我们可以向该数据库插入任意类型的内容,它会返回一个 40 位字符串键,通过该 40 位字符串键可以在任意时刻再次检索(retrieve)该内容。

2.3 内容寻址

每次我们进行提交会通过 SHA-1 算法生成一个长度为 40 个字符的校验和(checksum hash)(也就是我们的 key)然后根据校验和去获取我们文件的内容。这种通过唯一标识的 key(也可以理解为内容的地址)去获取我们的内容的操作就是内容寻址。

2.4 Git的对象

在 Git 中有四种对象分别为:

  • blob 是具体的文件对象
  • tree 是某个时刻提交目录的内容
  • commit 执行一次 commit 就会产生一个 commit 对象
  • tag 可以理解成 commit 的别名,一个 tag 对应一个 commit

2.5 Git的引用

Git引用我可以理解成一个书签,我在阅读一本书的时候可以为我读到的部分打上标签。然后我可以通过这个书签快速找到我之前阅读的位置。在 Git 中我们 创建新的 Commit 或者创建分支都会进行一次打标签的操作。我们各个不同 commit 之间的切换或分支的切换其实就是标签的切换。

2.5.1Git 引用的三种类型
  1. HEAD 引用:用来为我们的本地仓库打上标签使用
  2. Tag 引用:用来为我们的 Git 仓库 tag 标签使用
  3. 远程引用:用来为我们的远程仓库打标签使用

HEAD 引用原理我的个人理解是一个 Head 头指针+当前分支 指向当前最新提交的 commit 对象。我们也可以通过 git reset --hard 来切换我们commit 记录,切换后的 commit 以前的 commit 记录就没有了,不过我们可以通过 git reflog 查询操作记录将以前 commit 找回。

标签引用是一个特殊的引用,它不像 HEAD 引用可以通过 git checkout 来更改引用的指针指向。标签引用不会移动它永远会指向一个 Commit 对象。

远程引用是只读的我们不能通过切换到远程引用执行 commit 将提交更新到远程仓库中。我们在本地分支执行 push 操作,Git 都会帮我们记录 push 到远程分支的最新 comit,当执行push 的时候,如果发现远程分支最新 commit 和我们本地仓库记录最后一次 push 的 commit 不同会报 Note about fast-forwards 异常。出现 Note about fast-forwards 我们需要执行 git pull 将远程最新的 commit 拉取下来 然后再执行 git push 操作 或者 直接执行 git puhs -f。这里强调一下不建议执行 git puhs -f 操作因为会强制将本地的历史记录覆盖到远程仓库的历史记录。

2.6三个区域的理解

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
在这里插入图片描述

Workspace:工作区,就是你平时存放项目代码的地方;

Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息,一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index);

Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本;

Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换;

本地的三个区域确切的说应该是git仓库中HEAD指向的版本:

**Directory:**使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。

**WorkSpace:**需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。

**.git:**存放Git管理信息的目录,初始化仓库的时候自动创建。

**Index/Stage:**暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。

Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。

2.7 分支的理解

使用分支意味着可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

如果同一个文件在合并分支时都被修改了则会引起冲突:解决的办法是我们可以修改冲突文件后重新提交,选择要保留其中一个代码。

master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

三、SourceTree的基本使用

3.1获取项目代码

在这里插入图片描述

**Clone:**克隆远程代码

**Create:**创建本地仓库

3.2 输入项目地址

http和ssh都可以

在这里插入图片描述

如果箭头指向的仓库类型表明“这不是一个标准的Git仓库”,可能是有以下原因:1)项目地址获取错误;2)没有项目访问权限。

3.3 创建分支

项目克隆完成后,左侧只有一个分支master

克隆完成后,得到的是发布后的master源码,如果想要获取最新的正在开发中的源码,需要对项目流进行初始化,点击“Git工作流”,直接点“确定”,获取develop分支源码

在这里插入图片描述

开发任务都是在develop分支上完成的

分支共有5种类型

  1. master,最终发布版本,整个项目中有且只有一个
  2. develop,项目的开发分支,原则上项目中有且只有一个
  3. feature,功能分支,用于开发一个新的功能
  4. release,预发布版本,介于develop和master之间的一个版本,主要用于测试
  5. hotfix,修复补丁,用于修复master上的bug,直接作用于master
3.3.1 feature分支下新功能的创建与使用

当开发中需要增加一个新的功能时,可新建feature分支,用于增加新功能,并且不影响开发中的develop源码,当新功能增加完成后,完成feature分支,将新功能合并到develop中,更新develop上的代码

  1. 新建feature。首先当前开发分支指向develop,点击“Git工作流”

在这里插入图片描述

  1. 选择“建立新的功能”

    在这里插入图片描述

  2. 给新功能命名

  • feature分支创建完成后,在预览中可看到,feature分支是从develop分出的,输入功能名称,点击确定,项目结构中增加feature分支,并且当前开发分支指向新建的feature分支

在这里插入图片描述

  • 在feature分支上进行文件的增删改并不会影响develop分支

  • 完成feature开发后,将feature中的源码合并到develop分支。将当前分支指向F_add_feature分支,点击“Git工作流”,选择“完成功能”

在这里插入图片描述

3.3.2 冲突的产生和解决

当多人协作开发时,可能会出现,不同人员对同一文件进行操作,从而引起合并冲突,对这种情况进行模拟,在当前新建两个feature,分别对”新功能文件“进行修改,然后分别合并

feature在新功能.txt下做如下操作

在这里插入图片描述

feature2在新功能.txt下做如下操作

在这里插入图片描述

先后合并F_feature_1和F_feature_2,会出现冲突

在这里插入图片描述

点击close,查看未提交的更改,提示新功能.txt出现冲突

打开feature_1.txt

在这里插入图片描述

出现<<<<<<< HEAD、====、>>>>>>> feature/F_feature_2,

  • HEAD和=号之间表示当前分支下的代码
  • ====号和>>>>>>> feature/F_feature_2之间表示要合并的分支下的代码,
  • >>>>>>> feature/F_feature_2表示了要合并的分支的分支名称,

根据情况区分要保留的代码,要删除的代码,最后再删除<<<<<<< HEAD、====、和>>>>>>> feature/F_feature_2

  • 完成全部的修改后,切换到master分支,将develop合并过来即可
3.3.3 新分支的创建

点击菜单栏上的分支,即可创建新分支

在这里插入图片描述

3.4 提交回滚和重置提交

3.4.1 提交回滚

假如选中6,执行“提交回滚”之后,7,8,9的历史操作还在,只是将6的操作还原了,这时候需要注意的是7、8、9的操作会引起提交回滚6的时候产生冲突

3.4.2 重置到某个版本版本

假如我选中6,执行“重置当前分支到此次提交”之后,会发现这个时候历史列表显示落后4个版本,被重置的版本也就消失

3.5 忽略文件

使用sourceTree提交代码的时候,如果不添加忽略文件,经常会有一些不必要的文件冲突,在sourceTree这个工具中设置了忽略文件以后,在提交的时候直接把.gitignore提交了以后,就不会有这样的问题了.

  • 若想忽略文件,可直接在gitignore中添加相应的忽略文件

.gitignore文件编辑:

  • 忽略指定文件:直接写文件名

  • 忽略文件夹:直接写文件夹路径,例:target或者target/ -> 忽略target下的所有文件

  • 忽略某类型的文件:使用通配符*,例:*.class -> 忽略所有.class文件

如果是第一次往仓库中提交的话,设置完这个就可以看到效果.在提交的时候,这些文件都不会显示在提交列表中.如果不是第一次提交,需要将之前仓库中需要忽略的文件删除掉,然后再提交.gitignore文件.

3.6 标签

在我们开发迭代过程中,会遇到这种情况,当前的版本是1.0.0。但需要找到版本号0.5.0的版本提交时,可能因为时间久远,不能快速定位到当时V0.5.0的提交记录,这个时候我们就需要进行标签管理了。

  • 右键点击节点后可以对每个节点设置标签

在这里插入图片描述

3.7 各个按键的作用

  • Clone就是将远程库的代码拷贝到本地
    填写远程和本地项目路径,点击“克隆“。这样就会将服务器上项目代码克隆到本地了。

  • 提交Commit和推送Push

    commit将工作空间修改提交到本地库。

    push将本地库修改提交到远程库。

  • 拉取pull和获取fetch

    pull 从远程拉取最新版本 到本地自动合并

    fetch 从远程获取最新版本到本地不会自动合并

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值