学习Git
最近也是产出高峰期耶~
咱的电脑是一个对于物理学学生十分够用拉跨的笔电。
在我大二下学期,平时从不耍脾气的它,硬盘坏了,咱的代码自然是未能渡劫。

有了上次教训之后嘞,时隔3个月,好吧,半年。终于开始学一手Git,来解决一下这个问题了。
下面的内容是看的git官网下的book。
为什么学习Git
Git就是用来解决版本控制,和避免像我刚刚那样,硬盘坏了,再也回不去了。
传统的版本控制,把东西上传到一台机器上面,所有人通过SSH登取出来就好,但是可能会出现咱电脑的硬盘耍小脾气的情况。

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

git的工作流程
流程官网写的实在太好了!落泪~忍不住copy
git有三种状态 已提交(committed)、已修改(modified) 和 已暂存(staged)。
- 已修改表示修改了文件,但还没保存到数据库中。
- 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
- 已提交表示数据已经安全地保存在本地数据库中。
这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。

工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。
基本的 Git 工作流程如下:
- 在工作区中修改文件。
- 将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
- 提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。
如果 Git 目录中保存着特定版本的文件,就属于 已提交 状态。 如果文件已修改并放入暂存区,就属于 已暂存 状态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是 已修改 状态。
版本控制快照的创建
快照可以理解为简单的备份
有些版本是这样储存的

Git是这样的

不管文件改变没,都会在快照中备份,但是为了效率,如果文件没改变,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
列出全部的配置列表(包含全局和局部
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我也不想抄,可是它叫我哥哥诶写的太好了。