Git本地仓库详解

大纲:
一、前言
二、概述
三、在Windows上安装Git
四、创建本地仓库
五、本地仓库管理详解
六、总结

一. 前言

清晰理解Git,力求适用于所有读者阅读。

二. 概述

Git 本地仓库详解
Git与GitHub总结

三. 在Windows上安装Git
  • 下载地址:http://msysgit.github.io/ 双击安装即可
  • 开始菜单——Git Bash,出现如下界面则安装成功


  • 基本测试
    $ git config –global user.name “Your Name”
    $ git config –global user.email “email@example.com”
    注:我设置的情况如下
    $ git config –global user.name “hmqqk”
    $ git config –global user.email “2442501113@qq.com”
    P.S. Git是分布式控制系统,所以,每个客户端都必须设置:你的名字和邮箱。这样才容易区分是哪个用户提交的Git版本.git config 后面接的是–global参数,这表示你的机器上所有的Git仓库都会使用这个配置,当然你也可以对不同的仓库指定不同的用户名和邮箱。
    四. 创建本地仓库
  • 版本库又称仓库
    版本库或者是仓库,英文名Repository,可简易理解为目录且这个目录中的所以文件都被git管理,所有操作如增加、删除、修改文件等都会被记录下来,以便后来跟踪与修改相关记录,甚至被还原。
    创建一个版本库(即创建目录,避免用中文,一方带来不必要的麻烦)


  • 目录变仓库



    P.S. git init为初始化一个空目录,在该目录下生成了.git目录,git目录下即为控制和管理版本库相关文件。
  • 向本地仓库中增加文件
    版本库中只能跟踪和管理文本文件,如txt文件、js文件、php文件、java文件等所有的程序代码均可。但如视频、图片等二进制文件,虽然能由git管理,但是只能记录大小,无法跟踪具体修改。
    liuhong@liuhong-PC MINGW64 ~/hmqqk (master)
    $ vim readme.txt

    liuhong@liuhong-PC MINGW64 ~/hmqqk (master)
    $ ls
    readme.txt

    liuhong@liuhong-PC MINGW64 ~/hmqqk (master)
    $ cat readme.txt
    This is git test

    liuhong@liuhong-PC MINGW64 ~/hmqqk (master)
    $
    P.S 切记上述代码是在hmqqk目录下,否则Git无法管理

  • git status:查询文件当前状态

    liuhong@liuhong-PC MINGW64 ~/hmqqk (master)
    $ git status
    On branch master
    Initial commit
    Untracked files:
    (use “git add …” to include in what will be committed)
    readme.txt
    nothing added to commit but untracked files present (use “git add” to track)
    liuhong@liuhong-PC MINGW64 ~/hmqqk (master)

  • git add:提交文件到仓库中去
    liuhong@liuhong-PC MINGW64 ~/hmqqk (master)
    $ git add readme.txt
    warning: LF will be replaced by CRLF in readme.txt.
    The file will have its original line endings in your working directory.

    liuhong@liuhong-PC MINGW64 ~/hmqqk (master)
    $

  • git commit:提交
    liuhong@liuhong-PC MINGW64 ~/hmqqk (master)
    $ git commit -m “add readme.txt”
    [master (root-commit) 5b5157f] add readme.txt
    1 file changed, 1 insertion(+)
    create mode 100644 readme.txt

    liuhong@liuhong-PC MINGW64 ~/hmqqk (master)
    $
    P.S. -m后面输入的是本次提交的版本说明,可以输入任意内容,但需要说明的是,最好写有意义的说明,便于以后查看。

    liuhong@liuhong-PC MINGW64 ~/hmqqk (master)
    $ git status
    On branch master
    nothing to commit, working tree clean

  • 总结
  • 初始化一个Git仓库,使用git init命令
  • 添加文件到本地Git仓中,分为两步:
    • 使用git add命令,注意,可以多次使用,添加多个文件
    • 使用git commit命令,完成添加。
    • 为什么Git添加文件需要两步呢?一步add,一步commit。嘿嘿,因为commit命令可以一次提交多个文件,所以你可以多次使用add命令呢。
五.本地仓库管理详解
  • git status git diff 当文件等有所改动时可通过这2个文件进行查看
  • 版本回滚:git log git reset
  • 工作区、提交区/暂存区(stage/index)、版本库



    工作区即开发目录,如hmqqk.上面所述的hmqqk下的.git是Git的版本库。在“.git”目录中有很多文件,其中一个重要的文件index,就是我们说的提交区/暂存区(stage/index)。暂存区(stage, index)是 Git 最重要的概念之一。



    在上图中,我们可以看到部分 Git 命令是如何影响工作区和暂存区(stage/index)的。
    图中左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区(stage/index),标记为 “master” 的是 master 分支所代表的目录树。图中我们可以看出此时 “HEAD” 实际是指向 master 分支的一个“指针”。所以,图示的命令中出现 HEAD 的地方可以用 master 来替换。图中的 objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下。
    当对工作区新增或修改的文件执行 “git add” 命令时,暂存区的目录树被更新,同时工作区新增或修改的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。(如上图)
    当执行提交操作 “git commit” 时,暂存区的目录树写到版本库的对象库(objects)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。(如上图)
    当执行 “git reset HEAD” 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。 当执行 “git rm –cached “ 命令时,会直接从暂存区删除文件,工作区则不做出改变。
    当执行 “git checkout .” 或者 “git checkout – “ 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
    当执行 “git checkout HEAD .” 或者 “git checkout HEAD “ 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
  • 修改管理
    • 关于修改
      为什么Git比其它版本控制软件优秀?
      因为Git跟踪管理的是我们每一次的修改(或操作),而不是文件。比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。
  • 取消(撤消)修改
    Git会告诉你有你个文件被修改,你有两个选择,一个用 git add 提交到暂存区,另一个是用git checkout可以丢弃工作区的修改。命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
    一种是readme.txt自修改后还没有被放到暂存区,现在撤销修改就回到和版本库一模一样的状态;
    另一种是readme.txt已经添加到暂存区后,又作了修改,现在撤销修改就回到添加到暂存区后的状态。
    总之,就是让这个文件回到最近一次git commit或git add时的状态。
    P.S. git checkout – file命令中的“–”很重要,没有“–”,就变成了“创建一个新分支”的命令
    git reset HEAD file 可以把暂存区中的修改撤消掉,重新放回工作区,git reset命令既可以回退版本,也可以把工作区的某些文件替换为版本库中的文件。当我们用HEAD时,表示最新的版本。我们再用 git status 查看一下发现,现在的暂存区是干净的,工作区有修改。
  • 文件删除
    git rm 命令用于删除一个文件
    六. 总结
    Git 本地版本库的讲解
很惭愧<br><br>只做了一点微小的工作<br>谢谢大家