学习Git

最近也是产出高峰期耶~

咱的电脑是一个对于物理学学生十分够用拉跨的笔电。

在我大二下学期,平时从不耍脾气的它,硬盘坏了,咱的代码自然是未能渡劫。

image-20220512180313240

有了上次教训之后嘞,时隔3个月,好吧,半年。终于开始学一手Git,来解决一下这个问题了。

下面的内容是看的git官网下的book。


为什么学习Git

Git就是用来解决版本控制,和避免像我刚刚那样,硬盘坏了,再也回不去了。

传统的版本控制,把东西上传到一台机器上面,所有人通过SSH登取出来就好,但是可能会出现咱电脑的硬盘耍小脾气的情况。

传统的版本控制

Git是分布式的版本控制。就是说,服务器宕机了,在任何一个fork的主机上都可恢复数据。好耶~

分布式的版本控制

git的工作流程

流程官网写的实在太好了!落泪~忍不住copy

git有三种状态 已提交(committed)已修改(modified)已暂存(staged)

  • 已修改表示修改了文件,但还没保存到数据库中。
  • 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • 已提交表示数据已经安全地保存在本地数据库中。

这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。

image-20220512184737778

工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。

Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。

基本的 Git 工作流程如下:

  1. 在工作区中修改文件。
  2. 将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
  3. 提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。

如果 Git 目录中保存着特定版本的文件,就属于 已提交 状态。 如果文件已修改并放入暂存区,就属于 已暂存 状态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是 已修改 状态。

版本控制快照的创建

快照可以理解为简单的备份

有些版本是这样储存的

image-20220512183249206

Git是这样的

image-20220512183441894

不管文件改变没,都会在快照中备份,但是为了效率,如果文件没改变,git会备份一个指向源文件的指针。

全部本地化

git拉取的是全部的镜像,所以当咱想要查看某个版本的文件时,在本地查看就好啦~

校验

git会在存储数据前,对所有的文件进行sha-1的hash转换,git的索引就是这个hash值,o(1)的时间复杂度查找哦~

这个校验,也会让文件即使发生一个空格的变化,也会被记录下来。好耶~

配置git

git会记录每个用户的上传等信息,因此,需要配置信息。

正如官网所说

安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改

用户信息

git config --global user.name "zhu-jiyuan"
git config --global user.email 848433033@qq.com

–global表示的是全局配置。

咱可以用下面的命令,来看配置在哪

git config --list --show-origin

image-20220512205411242

列出全部的配置列表(包含全局和局部

git config --list 

官网中提示道:你可能会看到重复的变量名,因为 Git 会从不同的文件中读取同一个配置(例如:/etc/gitconfig~/.gitconfig)。 这种情况下,Git 会使用它找到的每一个变量的最后一个配置。

你可以通过输入 git config <key>: 来检查 Git 的某一项配置

$ git config user.name
John Doe
Note由于 Git 会从多个文件中读取同一配置变量的不同值,因此你可能会在其中看到意料之外的值而不知道为什么。 此时,你可以查询 Git 中该变量的 原始 值,它会告诉你哪一个配置文件最后设置了该值:$ git config --show-origin rerere.autoUpdate file:/home/johndoe/.gitconfig false

获取帮助

若你使用 Git 时需要获取帮助,有三种等价的方法可以找到 Git 命令的综合手册(manpage):

$ git help <verb>
$ git <verb> --help
$ man git-<verb>

例如,要想获得 git config 命令的手册,执行

$ git help config

这些命令很棒,因为你随时随地可以使用而无需联网。 如果你觉得手册或者本书的内容还不够用,你可以尝试在 Freenode IRC 服务器 https://freenode.net 上的 #git#github 频道寻求帮助。 这些频道经常有上百人在线,他们都精通 Git 并且乐于助人。

此外,如果你不需要全面的手册,只需要可用选项的快速参考,那么可以用 -h 选项获得更简明的 “help” 输出:

$ git add -h
usage: git add [<options>] [--] <pathspec>...

    -n, --dry-run         dry run
    -v, --verbose         be verbose

    -i, --interactive     interactive picking
    -p, --patch           select hunks interactively
    -e, --edit            edit current diff and apply
    -f, --force           allow adding otherwise ignored files
    -u, --update          update tracked files
    --renormalize         renormalize EOL of tracked files (implies -u)
    -N, --intent-to-add   record only the fact that the path will be added later
    -A, --all             add changes from all tracked and untracked files
    --ignore-removal      ignore paths removed in the working tree (same as --no-all)
    --refresh             don't add, only refresh the index
    --ignore-errors       just skip files which cannot be added because of errors
    --ignore-missing      check if - even missing - files are ignored in dry run
    --chmod (+|-)x        override the executable bit of the listed files

我也不想抄,可是它叫我哥哥诶写的太好了。