git annex,如何添加 git-sub 目录

git annex,如何添加 git-sub 目录

我有一种情况,我正在将我的整个文件结构移动到 git-annex。

它包含我当前的项目、旧项目、媒体、个人项目等。因此,它包含许多我想出于历史原因附加的 git 存储库。

但是,git annex 会忽略已签入 git 的文件。即使我使用 --force,它也会继续忽略它们。如何在不删除 .git 文件夹的情况下添加这些文件?


我为什么要这么做?

我有一个完整的、组织良好的文件夹结构,里面存放着对我而言重要的一切。现在我将整个文件夹保存在笔记本电脑上,并在外部硬盘上备份了 2 个文件。这意味着我的硬盘空间中有很多文件,而这些文件我可能每年都需要访问一次。Git annex 可以解决这个问题,它可以跟踪那些不常用的文件,而不会让文件变得杂乱无章(因此最终会丢失),这样我就可以将它们保存在其他地方。欢迎推荐其他可能适合我需要的工具。

答案1

用户 EvanDeaubl 提出的解决方法:https://git-annex.branchable.com/forum/Git_repos_in_git_annex__63__/

我目前使用单独的 git 目录将 git 存储库存储在附件中,这样 git 就不会检测到嵌套存储库并拒绝添加它。使用 --separate-git-dir= 参数执行 git clone 或 git init 会将通常位于 .git 中的内容放入该目录中,并在其位置创建一个简单的 .git 文件,该文件引用单独的 git 目录。

当我不使用 repo 时,我会将 .git 文件移出目录,对于 git-annex 来说,所有内容看起来都像常规文件。当我想使用它时,我会将其移回原位,并且 repo 目录内的任何 git 操作都会使用内部 git repo 本身。

我曾经使用过的另一种选择是将裸存储库存储在附件中,然后从这些存储库中进行检出。

虽然这不完全是一个解决方案,但它可能是一个可行的解决方法。

答案2

既然你提到了其他工具,我想我会分享我使用普通 git 所做的事情:

我有一个外部驱动器,用于保存备份。我使用 rsync 使其与计算机上的内容保持同步。我在外部驱动器的根目录中有一个 git 存储库,并且我从不将源文件夹直接同步到根目录,而总是同步到子目录 - 这样,如果源文件夹是 git 存储库,它就不会与外部驱动器根目录中的 git 存储库冲突。由于我的计算机上的文件包含 git 存储库,因此我有一个脚本,对于我要备份的任何文件夹,该脚本都遵循以下步骤:

  1. rsync --删除 源/目标/

  2. 深度优先搜索目标目录中的所有 git 存储库(包含 .git 子目录的目录)

  3. 对于找到的每个存储库,git add dst/path/to/repo/(注意结尾的斜杠)

  4. 最后,在 dst 目录中,git add . (点)

结果就是,我拥有一个包含所有文件当前状态的 git 存储库,我可以像往常一样使用 git 历史记录回顾过去。git 存储库也已备份,但它们的状态与备份驱动器根目录中的 git 存储库是分开的。因此,我在任何 git 存储库中拥有的任何未跟踪、未提交的文件都会提交到备份驱动器根目录中的 git 存储库。

备份驱动器中的 git 存储库(例如 dst/path/to/repo/.git)只是没有元历史记录的最新副本。

相关内容