Git 维护及数据恢复.pdfVIP

  • 7
  • 0
  • 约8.74千字
  • 约 7页
  • 2018-04-30 发布于河北
  • 举报
Git 维护及数据恢复.pdf

Git 维护及数据恢复 你时不时的需要进⾏⼀些清理⼯作 ── 如减⼩⼀个仓库的⼤⼩,清理导⼊的库,或 是恢复丢失的 据。本节将描述这类使⽤场景。 维护 Git 会不定时地⾃动运⾏称为 auto gc 的命令。⼤部分情况下该命令什么都不处理。 不过要是存在太多松散对象 (loose object , 不在 packfile 中的对象) 或 packfile ,Git 会进 ⾏调⽤ git gc 命令。 gc 指垃圾收集 (garbage collect) ,此命令会做很多⼯作:收集所有 松散对象并将它们存⼊ packfile ,合并这些 packfile 进⼀个⼤的 packfile ,然后将不被 任何 commit 引⽤并且已存在⼀段时间 ( ⽉) 的对象删除。 可以⼿⼯运⾏ auto gc 命令: $ git gc --auto 再次强调,这个命令⼀般什么都不⼲。如果有 7 ,000 个左右的松散对象或是 50 个以上 的 packfile ,Git 才会真正调⽤ gc 命令。可能通过修改配置中的gc.auto 和 gc.autopacklimit 来调整这两个阈值。 gc 还会将所有引⽤ (references) 并⼊⼀个单独⽂件。假设仓库中包含以下分⽀和标 签: $ find .git/refs -type f .git/refs/heads/experiment .git/refs/heads/master .git/refs/tags/v1.0 .git/refs/tags/v1.1 这时如果运⾏ git gc , refs 下的所有⽂件都会消失。Git 会将这些⽂件挪到 .git/packed- refs ⽂件中去以提⾼效率,该⽂件是这个样⼦的: $ cat .git/packed-refs pack-refs with: peeled cac0cab 38b970a37ea1e769cbbde608743bc96d refs/heads/experiment ab1afef80fac8e342 8ff41fc1b867c702daa24b refs/heads/master cac0cab 38b970a37ea1e769cbbde608743bc96d refs/tags/v1.0 9 8 191f37f7b0fb9444f3 a9bf 0de191beadc2 refs/tags/v1.1 ^1a410efbd13 91dbc7a0 9dd cfe9 当更新⼀个引⽤时,Git 不会修改这个⽂件,⽽是在 refs/ eads 下写⼊⼀个新⽂件。当 查找⼀个引⽤的 SHA 时,Git ⾸先在 refs ⽬录下查找,如果未找到则到 packed- refs ⽂件中去查找。因此如果在 refs ⽬录下找不到⼀个引⽤,该引⽤可能存到 packed-refs ⽂件中去了。 请留意⽂件最后以 ^ 开头的那⼀⾏。这表⽰该⾏上⼀⾏的那个标签是⼀个 annotated 标 签,⽽该⾏正是那个标签所指向的 commit 。 数据恢复 在使⽤ Git 的过程中,有时会不⼩⼼丢失 commit 信息。这⼀般出现在以下情况下:强 制删除了⼀个分⽀⽽后又想重新使⽤这个分⽀, ard-reset 了⼀个分⽀从⽽丢弃了分⽀ 的部分 commit 。如果这真的发⽣了,有什么办法把丢失的 commit 找回来呢? 下⾯的⽰例演⽰了对 test 仓库主分⽀进⾏ ard-reset 到⼀个⽼版本的 commit 的操作, 然后恢复丢失的 commit 。⾸先查看⼀下当前的仓库状态: $ git log --pretty=oneline ab1afef80fac8e342 8ff41fc1b867c702daa24b modified repo a bit 484a 927 031909e19aadb7fcdf19a added repo.rb 1a410efbd13 91dbc7a0 9dd cfe9 third commit cac0cab 38b970a37ea1e769cbbde608743bc96d second commit fdf4fc3344e67ab068f836878b6c49 1e3b1 f3d first commit 接着将 m

文档评论(0)

1亿VIP精品文档

相关文档