第五章:文件管理与索引

1】Git会在工作目录和版本库之间加设一层索引,用来暂存(stage)、收藏或者修改。

2】在工作目录下编辑,在索引中积累修改,然后把索引中积累的修改作为一次性变更进行提交。

3】Git的索引就是一组预期的修改,只有提交后才会在版本库中实现变更。

4】除了移动和删除文件,其他的暂存和提交可以合成一步完成。

1、关于索引的一切

  1】Git 索引不包含任何文件内容,它仅仅追踪想要提交的的那些内容。

     git  commit  命令,Git通过索引找到而不是工作目录找提交的内容。

  2】Git的 "porcelain" (高层)命令对你隐藏的索引的细节,但也了解索引和它的状态。

  3】git  status命令可以查看索引的状态, git  ls-file : 底层命令,查看Git的内部状态。

  4】git  diff命令查看,仍留在工作目录中且未暂存的变更。 git  diff  --cached显示已经暂存的变更。

2、Git中的文件分类

  1】Git将文件分为3类: 已追踪、被忽略的以及未追踪的。

  

  2】编辑器和构建环境会在源码周围遗留一些临时文件。这些文件应该被忽略。

`     a】在根目录下创建  .gitignore文件(不带后缀),在文件里添加忽略文件的名称。

   

   

    

3、使用git  add

  1】git  add命令,暂存文件,同时将未追踪文件转化成已追踪文件。

  2】git  add  目录名。 暂存该目录下的所有文件。

  3】git  hash-object  file命令,直接计算当前目录中的文件的SHA1值。

  

  4】文件存储在对象库中,索引只是指向它而已。

  5】git  add 或者 commit 命令, --interactive选项   +  路径。操作路径下的文件进行暂存或者提交。

  

   

4、使用git  commit  的一些注意事项

  1】git  commit  -a 命令会自动暂存所有已知的修改的文件。新文件除外(索引中没有的)

  2】不通过命令行直接提供日志消息,Git会启动编辑器

  

  

5、使用git  rm

  1】git  rm命令会在版本库和工作目录中同时删除文件.

  2】删除文件比添加文件问题要多,Git对移除文件更多关注。

  3】Git  可以从索引或者同时从索引和工作目录中删除文件,但不会只从工作目录中删除文件。

  4】git  rm   是对索引进行操作的命令,所以这个命令对没有添加到版本库或索引中的文件无效。

  5】git  rm  --cached会删除索引中的文件,工作目录中还在。 git  rm 命令将文件从索引和工作目录都删除。

  6】Git删除文件前,会先进行检查:工作目录下该文件的版本与当前分支中的最新版本一致。

  7】git checkout  --file :  用版本库或者暂存区里的版本替换工作区的版本。

6、使用git  mv

  1】Git会在索引中删除stuff路径名,并添加newstuff的路径名。

     stuff的原始内容仍保存在对象库中,将对象库中的内容与newstuff重新关联。

  2】git  log  newfile 查看修改过名字的文件,只能查看到新名字文件的历史记录。

       查看文件的全部历史记录添加   --follow选项。

7、追踪重命名注解

  1】SVN对文件重命名和移动做了很多追踪工作。因为它只追踪文件之间的差异。

  2】SVN只是做重命名,也需要再次传输和存储文件的全部内容。

  3】SVN显式的追踪每一次重命名,缓解上面的情况。注意: mv有效。 rm  +   add不会显式。

  4】Git不追踪重命名,文件的移动只会影响树对象。

  

8、.gitignore文件

  1】将要忽略的文件的路径写入 .gitignore文件内,就能忽略该文件。

  2】Git支持丰富的忽略写法。

  如何解决,之忽略根目录下的  1.txt文件而不忽略1/1.txt文件

  

  3】Git允许每一个目录下都有 .gitignore文件,每个文件都只影响该目录及其子目录。

  4】.gitignore文件的规则是级联的。可覆盖高层规则。

  5】Git对忽略文件设置的优先顺序:   从高到低。

  

  6】当忽略文件适用于所有版本库时,才会写入.gitignore文件内。

  7】当忽略文件只适用于自己的版本库时,要写入 .git/info/exclude文件内。

  

  

  

  8】.gitignore只能忽略没有被track(追踪)的文件,已经纳入版本管理中的文件,修改.gitignore是无效的。

 9、Git中对象模型和文件的详细视图

  1】从工作目录、索引、版本库三个角度理解Git操作。

  2】图1, 工作目录包含两个文件,内容分别是"foo"  和  "bar"。

  

                 (图 1)

   3】图2、工作目录中修改file1内容"foo"为 "quux"。工作目录是脏的(脏:是指工作目录和版本库不同)

  

                 (图 2)

   4】图3、file1在工作目录修改后,进行  git  add  file1操作。

  

              (图 3)

  5】图4、 git  add  file1操作后,进行git  commit 操作。发生的变化。

  

                (图 4)

原文地址:https://www.cnblogs.com/changdasheng/p/13214190.html