git 使用

版本控制

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

  1. 集中化的版本控制系统(SVN)
    有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

    但是这么做有一个缺点是中央服务器的单点故障,如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据。
  2. 分布式版本控制系统(GIT)
    客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

Git

自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。Git 与 Svn 的区别

优点

  • 免费的、开源的、分布式的版本控制系统
  • 版本库本地化,支持离线提交,相对独立不影响协同开发
  • 更少的“仓库污染”。git对于每个工程只会产生一个.git目录,这个工程所有的版本控制信息都在这个目录中,不会像SVN那样在每个目录下都产生.svn目录。
  • 把内容按元数据方式存储,完整克隆版本库。所有版本信息位于.git目录中,它是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签、分支、版本记录等。
  • 支持快速切换分支方便合并,比较合并性能好。在同一目录下即可切换不同的分支,方便合并,且合并文件速度比SVN快。
  • 分布式版本库,无单点故障,内容完整性好。内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

Git 基本工作原理

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

Git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方法。 概念上来区分,其它大部分系统以文件变更列表的方式存储信息。 这类系统(CVS、Subversion、Perforce、Bazaar 等等)将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。

Git 更像是把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流。相当于每一个分支就是一个小型的文件管理系统。

  • 近乎所有操作都是本地执行

在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。 如你在飞机或火车上想做些工作,你能愉快地提交,直到有网络连接时再上传。

  • Git 保证完整性

Git 中所有数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串,基于 Git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样:24b9da6552252987aa493b52f8696cd6d3b00373

  • Git 一般只添加数据

你执行的 Git 操作,几乎只往 Git 数据库中增加数据。 很难让 Git 执行任何不可逆操作,或者让它以任何方式清除数据。

  • Git 三种状态

已提交(committed)已修改(modified)已暂存(staged)

基本的 Git 工作流程如下:

  1. 在工作目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域。
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

Git 常用命令

  1. git clone 将存储库克隆到新创建的目录中,为克隆存储库中的每个分支创建远程跟踪分支并检出从克隆存储库的当前活动分支分叉的初始分支。

    1
    2
    git clone git@github.com:zeit/next.js.git [dir-name]
    # dir-name 是可选的 没有的话默认创建与远程库名称相同的文件夹
  2. git checkout <branch> 切换分支或恢复工作树文件,如果本地没有该分支会去远程拉去

  3. git branch 列出,创建或删除分支

  4. git add . 将文件内容添加到索引中

  5. git commit -am 'xxx' 记录对存储库的更改

  6. git pull 从另一个存储库或本地分支获取并与其集成 相当于 git fetch + git merge

  7. git push 使用本地引用更新远程引用,同时发送完成给定引用所必需的对象。

  8. git checkout . && git clean -xdf 删除本地变更文件

  9. git status 显示工作树状态

  10. git merge 将两个或多个开发历史记录连接在一起

  11. git rebase 重新应用提交在另一个基本提示之上,在未将变更推送到远程之前可以整理 commit 提交信息。rebase vs merge rebase vs merge(中文)

分支管理工具 Git-Flow