Pro Git

作者: 風暴之灵 | 来源:发表于2019-11-13 14:26 被阅读0次

参考资源:https://git-scm.com/book/zh/v2

版本控制

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

版本控制的发展

本地版本控制系统

RCS

集中化的版本控制系统

CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

优点:管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。 缺点:中央服务器的单点故障。宕机时间内谁也无法提交

分布式版本控制系统

Git

Git特点:

直接记录快照,而非差异比较 

存储项目随时间改变的快照,而不是存储每个文件与初始版本的差异.

所有操作都是本地执行

在没有网络时,页几乎可以进行任何操作。

Git 保证完整性

Git 中所有数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。

实际上,Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。

Git文件三种状态

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

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

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

暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作“索引”,不过一般说法还是叫暂存区域。

Git操作

如果你打算使用 Git 来对现有的项目进行管理,你只需要进入该项目目录并输入:

$ git init

该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。 你可通过 git add 命令来实现对指定文件的跟踪,然后执行 git commit 提交:

$ git add *.c

$ git add LICENSE

$ git commit -m 'initial project version'

克隆仓库的命令格式是 git clone [url] 。比如,要克隆 Git 的可链接库 libgit2,可以用下面的命令:

$ git clone https://github.com/libgit2/libgit2

这会在当前目录下创建一个名为 “libgit2” 的目录,并在这个目录下初始化一个 .git 文件夹,从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。 如果你想自定义本地仓库的名字,你可以使用如下命令:

$ git clone https://github.com/libgit2/libgit2 mylibgit

这将执行与上一个命令相同的操作,不过在本地创建的仓库名字变为 mylibgit。

记录每次更新到本地仓库

检查当前文件状态:

$ git status

暂存当前目录下的文件:

git add

运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来

忽略文件,一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。

查看尚未暂存的文件更新了哪些部分:

$ git diff

提交更新

先用 git status 看下,是不是都已暂存起来了, 然后再运行提交命令 git commit:

$ git commit

另外,你也可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行,如下所示:

$ git commit -m "Story 182: Fix benchmarks for speed"

移除工作区文件:

git rm PROJECTS.md

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f(译注:即 force 的首字母)。 这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复。

文件改名:

$ git mv README.md README

等同于

$ mv README.md README

$ git rm README.md

$ git add README

查看提交历史

$ git log

一个常用的选项是 -p,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交:

$ git log -p -2

撤消操作

交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令尝试重新提交,例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:

$ git commit -m 'initial commit'

$ git add forgotten_file

$ git commit --amend

取消暂存的文件

git reset HEAD <file>...

撤消对文件的上一次修改

$ git checkout -- CONTRIBUTING.md

远程仓库

$ git remote                   查看远程仓库

$ git remote -v               查看远程仓库url

拉取 Paul 的仓库中有但你没有的信息,可以运行 git fetch:

$ git fetch pb

推送到远程仓库, 当你想要将 master 分支推送到 origin 服务器时:

$ git push origin master

远程仓库改名,想要将 pb 重命名为 paul:

$ git remote rename pb paul

移除一个远程仓库:

$ git remote rm paul

相关文章

网友评论

      本文标题:Pro Git

      本文链接:https://www.haomeiwen.com/subject/lpjhictx.html