0

我想使用 Git 来创建一个外部备份系统。

这部分受到了什么是在外部磁盘上备份整个 git 存储库的最佳方法中的答案的启发?,建议如下:

您还可以通过在外部磁盘上启动一个新的 repo (git clone) 来获得增量备份,然后每次都提取更改 (git pull)。在 git 这样的分布式系统中,备份和工作副本之间没有太大区别。

(为方便起见,我在外部使用了一个非裸存储库。)

我的困境是:在我备份到外部的分区上,我有自己的 git repos 子目录,每个子目录在远程 repos 都有上游。

换句话说,通过 ascii 艺术:

          upstream
external ----------> partition
                         |                    upstream
                         +----- subdirectory ----------> remote

本身受版本控制的子目录在我的外部显示为空。

我希望 git 不跳过这些目录,而是拉取版本化子目录的内容。

我想知道子模块在这里是否相关,但文档很困难。(我从未找到子模块的定义 - 或示例 - 表明它可能适合我的情况。)

Git is ignoring .git 子目录中的目录,问题包括该行

Git 不允许我添加子目录 .git 文件夹。

这些反应令人沮丧,他们向我暗示 git 并非旨在包含此功能。

但我充满希望。

4

1 回答 1

2

子模块是作为gitlinks(索引中的特殊条目,模式 160000)记录在父 repo 中的 repos ,即由该子模块 repo 表示的确切 SHA1。

目标不仅仅是包含一个子存储库,而是包含该存储库的特定版本(因此使用 gitlink,以记录应该签出该子存储库的正确 SHA1)。

在您的备份脚本场景中,您应该进入每个子模块,并在外部驱动器上备份它们自己的裸仓库。

您将.gitmodules在主仓库的文件中找到这些子模块的路径。

于 2014-06-13T05:42:48.017 回答