版本控制工具——Git

「这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战」。

1、什么是版本控制

版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了已录下来。每一次文件的改变,文件的版本号都将增加。除了记录版本变更外,版本控制的另一个重要功能是并行开发。软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。并行开发中最常见的不同版本软件的错误(Bug)修正问题也可以通过版本控制中分支与合并的方法有效地解决。

2、版本控制工具有哪些?

版本控制工具就是实现版本控制这一思想的结果。

集中式版本控制工具

SVN、CVS、VSS……

分布式版本控制工具:

Git、Mercurial、Bazaar、Darcs……

3、版本控制工具应该有哪些功能?

  • 协同修改

多人并行不悖的修改服务器端的同一个文件。

  • 数据备份

不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。

  • 版本管理

在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空

间,提高运行效率。这方面 SVN采用的是增量式管理的方式,而 Git采取了文

件系统快照的方式。

  • 权限控制

对团队中参与开发的人员进行权限控制。

对团队外开发者贡献的代码进行审核——Git独有。

  • 历史记录

查看修改人、修改时间、修改内容、日志信息。

将本地文件恢复到某一个历史状态。

  • 分支管理

允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效

4、Git 与 SVN 区别

  • 1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。

  • 2、Git 把内容按元数据方式存储,而 SVN 是按文件: 所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。

  • 3、Git 分支和 SVN 的分支不同: 分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。

  • 4、Git 没有一个全局的版本号,而 SVN 有: 目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。

  • 5、Git 的内容完整性要优于 SVN: Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

5、Git介绍

  • Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。官网地址:git-scm.com/

  • Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

  • Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

  • GIT优点有:

      (1)大部分操作在本地完成,不需要联网
    
      (2)完整性保证
    
      (3)尽可能添加数据而不是删除或修改数据
    
      (4)分支操作非常快捷流畅
    
      (5)与 Linux命令全面兼容
    复制代码

6、Git结构

·工作区: 就是你在电脑里能看到的目录(写的代码存在工作区)。

 暂存区: 英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。(计划要提交的文件

 版本库:(本地库) 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

image.png

7、Git常用命令

7.1 git init

git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。

在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变(不像 SVN 会在每个子目录生成 .svn 目录,Git 只在仓库的根目录生成 .git 目录)。

补充命令:

ll –A    -a/A  表示查看隐藏文件

image.png

ll .git/     表示查看 . git 下的文件列表显示*

image.png

注意: . git目录是存放本地库相关的目录和文件,不要对其进行修改和操作。

7.2 git config

git config,签名命令,用于标识不同的开发人员

  • 项目级别(仓库) :仅在当前本地库范围有效
 git config user.name username
 git config user.email [email protected]
复制代码
  • 系统级别: 登录当前操作系统的用户范围有效

 git config –global user.name username

  git config –global user.email [email protected]

级别优先级:

  就近原则:项目级别优先级大于系统(用户)级别签名

注意: 签名级别必须要设置。如果都不设置,GIT可能会导致命令出错,无法辨别。

7.3 Git status

git status命令用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到。git status不显示已经commit到项目历史中去的信息。看项目历史的信息要使用git log

7.4 Git add

命令将文件内容添加到索引(将修改添加到暂存区)。也就是将要提交的文件的信息添加到索引库中。(将工作区写入暂存区)

7.5 Git rm

git rm命令用于从工作区和索引中删除文件。(用于将暂存区的文件恢复到工作区)*

7.6 Git commit

git commit命令用于将更改记录(提交)到存储库。将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中。(用于将暂存区的文件提交到本地仓库)*

另: git commit -m “备注信息” 文件名    //快速加入备注描述

7.7 Git checkout

git checkout命令用于切换分支或恢复工作树文件。git checkout是git最常用的命令之一,同时也是一个很危险的命令,因为这条命令会重写工作区。

7.8 Git log

git log命令用于显示提交日志信息。

查看日志简洁明了格式:

git log –-pretty=oneline

Git log --oneline*

7.9 Git reflog/reset

git reset命令用于将当前HEAD复位到指定状态。一般用于撤消之前的一些操作(如:git add,git commit等)。

通过git reset --hard [局部索引值] //跳到指定版本

7.10 Git diff

git diff命令用于显示提交和工作树等之间的更改。此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。 (默认是和暂存区文件进行比较)

(1)gid diff 将工作区中的文件和暂存区进行比较

vim git.txt    (修改内容)

git diff git.txt
复制代码

 (2)gid diff HEAD暂存区中的文件和本地库进行比较

 比较:git diff HEAD git.txt   //HEAD代表本地库** 最新版本指针

7.11 Git branch

git branch命令用于列出,创建或删除分支。

总结

image.png

猜你喜欢

转载自juejin.im/post/7035058079511085064