《二》Git 基础

Git 是目前世界上最先进的分布式版本控制系统。

Git 操作流程图:

请添加图片描述

Git 基本原理:

哈希是一个系列的加密算法(例如有: MD5、SHA-1、CRC32 等),各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点:

  1. 哈希算法确定,输入数据确定,输出数据能够保证不变。
  2. 哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大。
  3. 不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。
  4. 哈希算法不可逆。
    请添加图片描述

哈希算法可以被用来验证文件,原理入下图所示:
请添加图片描述
Git 底层采用的是 SHA-1 算法,会通过 SHA-1 算法生成校验和。

git add 只是添加到了暂存区,因为它只是将文件以二进制的形式保存到了 objects 中,但此时并无法通过索引可以一一步步找到它。
只有通过 git commit 之后,才能通过索引一步步找到它。

  1. git init 初始化 Git 仓库后,会生成 .git 目录,这个就是 Git 仓库的核心,其中开发人员提交的代码存储在 objects 目录下的。
    在这里插入图片描述

    1. hooks:包含客户端或服务端的钩子脚本。
    2. info:包含一个全局性排除文件。
    3. logs:保存日志信息。
    4. objects:保存提交的代码。
    5. refs:存储指向数据的提交对象的指针(分支)。
    6. config:包含项目特有的配置选项。
    7. description:用来显示对仓库的描述信息。
    8. HEAD:指示目前被检出的分支。
    9. index:保存暂存区信息。
  2. git add .index.jsutils.js 添加到暂存区,可以看到 objects 文件夹下多了一个 1a 和 33 的文件夹,其中保存的就是刚刚添加的已经被转成了二进制数据的 index.jsutils.js 文件的内容。

    通过 git cat-file -t 【目录名+文件名头两位】 可以查看 objects 文件夹下的文件类型。
    通过 get cat-file -p 【目录名+文件名头两位】 可以查看 objects 文件夹下的文件内容。

    在这里插入图片描述

  3. git commit -m '测试' 提交代码,可以看到 objects 文件夹下多了一个 1e 和 7e 的文件夹。

    在进行 commit 提交操作时,Git 会保存一个提交对象,其中包含了作者的姓名、邮箱、提交时输入的信息、指向它父对象的指针以及指向暂存内容快照的指针。

    首次提交产生的提交对象没有父对象。普通提交产生的提交对象有一个父对象,由多个分支合并产生的提交对象有多个父对象。

    • 可以发现,commit 提交的校验和就是 1ea6 ,因此通过 commit 的校验和就可以找到 1ea6 文件。
      在这里插入图片描述

    • 可以发现, 1ea6 文件中 tree 的校验和就是 7ea6,因此通过 tree 的校验和就可以找到 7ea6 文件。
      在这里插入图片描述

    • 可以发现,通过 7ea6 文件中的 333e 和 1a15 就可以找到真正保存数据的文件。
      在这里插入图片描述

在这里插入图片描述

Git 保存版本的机制:

每次提交更新时 Git 都会对当前的全部文件制作一个快照并保存这个快照的索引(如果某个文件没有修改, Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件),所以 Git 的工作方式可以称之为快照流。需要的硬盘空间会相对大一点,但是回滚速度极快。其实,Git 团队对代码做了极致的压缩,最终需要的实际空间比 SVN 多不了太多。

请添加图片描述

集中式版本控制工具在管理项目时,采用的是增量式管理的方式,保存的是项目版本与版本之间的差异,需要的硬盘空间会相对小一点,但是回滚的速度会很慢(例如:想要回退到 Version3 的版本,需要使用 Version3 的差异 + Version2 的差异 + Version1 的原始内容)。
请添加图片描述

Git 安装:

在 Windows 上安装 Git:

  1. 在 Git 官网 https://git-scm.com/download/win 下载完安装包之后,双击 exe 安装包,按默认选项安装。

  2. 右击桌面可以看到 Git Bash Here ,就代表已经安装成功了。

    安装 Git 时,同时会默认安装 Git Bash(Git 的命令行工具)、Git CMD(其实就是 Windows 系统的命令行工具 CMD),Git GUI(Git 的图形化界面工具。)

    Git Bash 是一个 shell,是 Windows 下的 Git 命令行工具,用来执行 Linux 命令。它是基于 CMD 的,在 CMD 的基础上增添了一些新的命令与功能,使用更加方便。

请添加图片描述

在 Mac 上安装:

  1. 在 Git 官网 :https://git-scm.com/download/mac 下载安装程序,下载下来之后可以看到一个 dmg 压缩文件,双击打开可以看到里面有一个 pkg 文件, 再次双击 pkg 文件进行默认安装。

Git 初始化配置:

一般在新的系统上,都需要先配置下自己的 Git 工作环境。要配置的是个人的用户名称和电子邮件地址,这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,会随更新内容一起被永久纳入历史记录。

要删除配置信息,可以使用 git config --global --unset user.email
要查看已有的配置信息,可以使用 git config --list 命令。

git config --global user.name "damu"
git config --global user.email damu@example.com

Git 提供了一个叫做 git config 的命令来配置工作环境变量。这些变量可以存放在以下三个不同的地方:

级别优先级:就近原则,项目级别 > 系统用户级别 > 系统级别。

  1. /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。一般不会使用。

一台电脑系统中是可以有多个用户的。

  1. ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。工作中一般使用的就是这个,
  2. .git/config 文件:当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件),这里的配置仅仅针对当前项目有效。一般不会使用。

Git 忽略文件:

可以在项目根目录下创建一个名为 .gitignore 的文件,列出要忽略的文件模式,告诉 Git 哪些文件不需要添加到版本管理中。

本地仓库不会管理被忽略的文件,push 到远程仓库的时候也不会上传。

.gitignore 文件的格式规范:

  1. 所有空行或者以 # 开头的行都会被忽略。
  2. 要忽略指定模式以外的文件或目录,可以在模式前加上感叹号 ! 取反。
  3. 使用两个星号*表示匹配任意目录,例如 a/**/z 可以匹配 a/za/b/z 或者 a/b/c/z等。

常用的 Git 操作:

没有本地仓库,克隆远程仓库到本地:

git clone git@github.com:michaelliao/gitskills.git

已有本地仓库,将本地仓库与远程仓库联起来:

  1. 关联远程仓库:git remote add origin https://github.com/huadangya/test.git

    此时仅仅只是将本地仓库和远程仓库关联了起来,还不知道远程仓库中有哪些分支和内容。

  2. 拉取远程仓库 master 分支中的内容到本地仓库:git fetch origin master

    远程仓库中的分支拉取到本地仓库后,在本地仓库中的映射为 【远程仓库别名】/【分支名】

  3. 将拉取到本地仓库中的远程仓库分支的映射 origin/master 设置为为本地的 master 分支的上游分支:git branch --set-upstream-to origin/master

    之后,操作 pull、push、merge 等时,将会自动使用上游分支。

  4. 将拉取到本地仓库中的远程仓库的映射 origin/master 的内容合并到本地的 master 分支中:git merge --allow-unrelated-histories

    由于此时,master 分支和 origin/master 分支还没有共同的 base 祖先节点,因此无法合并。需要加 --allow-unrelated-histories 参数来强制合并。

  5. 如果本地分支与远程分支不同名时,还需要 git config push.default upstream,设置 push 时推动到上游分支,否则 push 时默认会去找与本地分支同名的远程分支,将会报错。

    创建远程仓库,之前会默认创建一个 master 分支,现在是 main 分支。
    给电脑中安装 Git,git init 时默认会创建一个 master 分支,但是有选项可以输入默认创建的分支名。
    因此,有可能本地分支与远程分支不同名。

推送本地仓库的内容到远程仓库:

  1. git add .
  2. git commit -m "xxx"
  3. git pull
  4. git push

从已有分支创建一个新的分支 dev,并推到远程:

  1. git checkout -b dev 从已有的分支创建新的分支,并切换到新的分支。
  2. git push 提交该分支到远程仓库。

切换到 dev 分支。如果本地没有,则会从远程 dev 分支拉取代码,在本地新建分支并切换;如果有,则会直接切换:

git checkout -b dev origin/dev,也可以简写为 git checkout dev

本来在 dev 修改内容,但是需要切换到 dev2去 修改其他一些东西:

切换分支之前先 commit 或 stash,不然的话未提交的改动会随着切换分支到另一个分支的。

commit 了很多次且尚未提交到远程,想撤回这些 commit:

  1. git reset commitId 回退到指定的 commitId,已修改的内容仍会存在。
  2. git add commit push

commit 了很多次且已经提交到远程,想撤回这些 commit:

重要警示:一定要确认这个分支只有自己操作,只有一个人操作的分支才可以这样。

  1. git reset commitId 回退到指定的 commitId,已修改的内容仍会存在。
  2. add commit
  3. git push -f

    -f-force 的缩写,意思是强制更新,将自己本地仓库的代码直接推送至远程仓库,完全以该命令提交为准,之前提交都会被覆盖。

合并分支(如 dev 分支合并到 master,则进入 master 目录):

  1. 在 dev 分支 pull add commit push
  2. git checkout master
  3. 在 master 分支 pull
  4. git merge dev
  5. 在 master 分支 push
只修改了父模块,未修改子模块,需提交到远程:
  1. 只需在父模块 git pull add commit push
既修改了父模块,也修改了子模块,需提交到远程:
  1. 在子模块的自己的开发分支 git pull add commit push
  2. 在父模块的自己的开发分支 git pull add commit push
只修改了父模块,未修改子模块,合并到 dev 分支:

此时父模块的commitId指向的是子模块公共的commitId,没有问题。

  1. 在父模块的当前分支git pull add commit push
  2. 在父模块git checkout dev
  3. 在父模块git merge 当前分支
  4. 在父模块git push
既修改了父模块,也修改了子模块,都已提交到远程,现需合并到 dev 分支:

此时父模块commitId指向的是子模块自己开发分支的commitId,有问题。

  1. 在子模块切换到dev分支git checkout dev
  2. git pull
  3. 在子模块git merge 当前分支
  4. 在子模块git push

此时父模块的commitId指向的是子模块公共的commitId,没有问题。所以需要在父模块git add commit push一次

  1. 在父模块的开发分支git add commit push //此次commit只是单纯修改了指向的子模块的commitId
  2. 在父模块切换到dev分支git checkout dev
  3. 在父模块git pull
  4. 在父模块git merge 当前分支
  5. 在父模块git push
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
旅游社交小程序功能有管理员和用户。管理员有个人中心,用户管理,每日签到管理,景点推荐管理,景点分类管理,防疫查询管理,美食推荐管理,酒店推荐管理,周边推荐管理,分享圈管理,我的收藏管理,系统管理。用户可以在微信小程序上注册登录,进行每日签到,防疫查询,可以在分享圈里面进行分享自己想要分享的内容,查看和收藏景点以及美食的推荐等操作。因而具有一定的实用性。 本站后台采用Java的SSM框架进行后台管理开发,可以在浏览器上登录进行后台数据方面的管理,MySQL作为本地数据库,微信小程序用到了微信开发者工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得旅游社交小程序管理工作系统化、规范化。 管理员可以管理用户信息,可以对用户信息添加修改删除。管理员可以对景点推荐信息进行添加修改删除操作。管理员可以对分享圈信息进行添加,修改,删除操作。管理员可以对美食推荐信息进行添加,修改,删除操作。管理员可以对酒店推荐信息进行添加,修改,删除操作。管理员可以对周边推荐信息进行添加,修改,删除操作。 小程序用户是需要注册才可以进行登录的,登录后在首页可以查看相关信息,并且下面导航可以点击到其他功能模块。在小程序里点击我的,会出现关于我的界面,在这里可以修改个人信息,以及可以点击其他功能模块。用户想要把一些信息分享到分享圈的时候,可以点击增,然后输入自己想要分享的信息就可以进行分享圈的操作。用户可以在景点推荐里面进行收藏和评论等操作。用户可以在美食推荐模块搜索和查看美食推荐的相关信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值