【问题标题】:Git as a backup and Version Control SystemGit 作为备份和版本控制系统
【发布时间】:2010-04-04 23:03:40
【问题描述】:

我想使用 Git 来备份我的主驱动器,但我也想将它用作将存储在我的主驱动器中的项目的版本控制系统。

我该怎么做呢?我是否 .gitignore 所有项目的根文件夹并为它们创建新的存储库?

编辑:

好的,我错误地解释了我想要的东西。我想拥有对我的家庭驱动器所做的更改的历史记录,就像我可以使用 Git 一样,我也想备份它。

【问题讨论】:

  • 这不是 Git 的用途,它是一个版本控制系统。
  • 使用 git 备份驱动器是大材小用。
  • @rogeriopvl - 没有。这不是矫枉过正......这意味着其他东西......比如使用 git 对三行脚本进行版本控制。 git - 它不是工作的工具。 git 不是备份系统。
  • 您希望使用哪种存储方式进行备份?
  • 是的,对整个 fs 的定期更改进行完全可见性和精细控制,这些更改分解为原子提交和带有增量更新的日志,这是一个可怕的想法,知道一些 git 命令的成本太高了

标签: git


【解决方案1】:

我不久前wrote a blog post about this

版本控制系统(SourceSafe 可能除外)非常擅长跟踪代码。这是为什么?因为它们设计用于跟踪代码

不幸的是,一个好的 VCS 的功能与构成一个好的备份系统的功能完全不同——而且通常完全相反

文件所有权为例。一个好的 VCS 会非常正确地忽略文件所有权:当我检查其他人的代码时,我应该是这些文件的所有者 - 而不是最初创建它们的任何 uid。另一方面,一个好的备份系统会尽其所能保留文件所有权:当我从备份中恢复时,我希望 /etc/shaddow 归 root 和 /home/ 所有wolever/ 归 wolever 所有。

但是,如果您真的想要,请查看 bup - 据我所知,它确实与 git“正确”备份。

【讨论】:

  • 为了防止link rot,请在文章中添加一些sn-ps。
  • bup 看起来很棒,但它看起来也严重欠发达:/
【解决方案2】:

使用rsync 进行备份。 使用git 进行版本控制。

【讨论】:

  • @mk 解释为什么会有用。为什么不使用 'git clone' 和 'git pull' 来同步/备份?
  • 我使用 git 进行备份和版本控制,使用 .gitignore 来控制分离,备份的唯一问题是如果你的电脑在提交过程中崩溃,它可能会破坏你的 repo 并破坏备份,直到发生这种情况这是个好主意,回滚损坏的安装太容易了哈哈
【解决方案3】:

您确实想使用 rsync 来备份您的数据。 查看以下 url 以获取有关 rsync 的更多信息以及有关如何备份数据的一些示例:

http://www.sanitarium.net/golug/rsync_backups_2010.html

【讨论】:

    【解决方案4】:

    我发现 backintime-gnome(glade/python,单独的后端?)对于计划的增量备份很有用,它适用于您的每日、每周、每月等。然后是源文件的 Git 存储库或其他更改-关键数据会很好地结束它。我没有玩过 bachintime-common 后端命令,但它们似乎都是 python。

    我在 Ubuntu 中使用它,“请记住,Back In Time 只是一个 GUI。真正的魔法是由 rsync(拍摄快照并恢复)、diff(检查是否有变化)和 cp(制作硬链接)。” -http://backintime.le-web.org/documentation/

    【讨论】:

      【解决方案5】:

      有几个项目旨在解决这个问题:

      bup 似乎进步最大:https://github.com/apenwarr/bup

      但您可能还想搜索gibak 或coldstorage。

      【讨论】:

      • 我正在寻找新的备份工具已经有几个星期了。这个项目(bup)看起来不错。
      【解决方案6】:

      好主意,我实际上每天都在使用它,它非常棒直到你的电脑在提交过程中崩溃并破坏你的 repo。第一次发生这种情况时,我花了一天时间来修复所有内容并恢复备份,最终你在此过程中学到了很多关于 git 内部的知识,所以这是一个额外的好处。假设您使用的是 linux,我建议您将 .git 目录的本地副本备份到单独的驱动器或其他任何东西上,然后在您的操作系统的 / 根目录下 git init 并使用 .gitignore 来控制版本化的内容。有些文件是“特殊的”,所以你可能想默认排除它们,比如 /proc 中的东西。您可以准确地观察不同的软件对您的 fs 所做的事情,回滚损坏的安装并跟踪配置、日志等是轻而易举的事。我不知道为什么所有这些反对者都说“不要这样做”,因为我做到了,它非常实用,非常棒。就像我说的那样,唯一的缺点是在发生意外情况时损坏了 repo,但是如果您准备修复损坏的提交,只需将预先损坏的 .git 复制到损坏的 .git 上。

      【讨论】:

        【解决方案7】:

        这读起来很像我正在做的事情。我的主目录中有一个 git 存储库,但我使用它只跟踪那些我可以手动编辑的配置文件。 (这排除了由“现代”桌面环境保存的状态文件以及几乎所有存储为 XML 的内容。)其他所有内容都进入.gitignore。曾几何时,我决定我的“notes”目录和我的~/.emacs.d 应该进入它们自己的存储库,所以我在这些目录中创建了 git 存储库并让主存储库忽略它们。

        我不将此设置用于备份目的,而是在不同机器上的帐户之间同步跟踪的文件,但我认为这也可以用于备份。

        【讨论】:

        • 嗯,这是可能的,但出于同步/备份目的,rsync 会更好。
        • 没有。如果我在两个不同的帐户上编辑同一个文件,rsync 对我来说没有明智的解决方案。 (使用 rsync 算法的一致,但在其他问题上失败了。)至少,git 可以检测和合并冲突的编辑。 rsync 也没有回答“文件 X 14 天前是什么样子?”的问题
        【解决方案8】:

        在 Windows 上,git-extensions 和 gitGui 允许您克隆存储库,这将允许您在没有 .gitignore 中的所有文件的情况下进行备份。

        接下来 7zip 就完成了!

        【讨论】:

          【解决方案9】:

          对于你想要密切跟踪或进行一些回滚的项目,你可以以正常方式使用 git。

          如果您想上传包含大文件的项目,并且不想为了获取旧文件而签出之前的提交,您可以使用git lfs。如果要对大文件进行更改,这将使.git 文件夹更小:

          Git Large File Storage (LFS) 在 Git 中用文本指针替换音频样本、视频、数据集和图形等大文件,同时将文件内容存储在 GitHub.com 或 GitHub Enterprise 等远程服务器上。

          此解决方案是一种将 Git 项目作为备份的方法。甚至您可以在同一个项目中同时使用两者,仅使用您想要的文件跟踪和保留更改。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-16
            • 1970-01-01
            • 2011-01-31
            • 1970-01-01
            相关资源
            最近更新 更多