【发布时间】:2013-05-23 12:26:00
【问题描述】:
我在新工作中继承了大约 150 个 Git 存储库,我的目标是将它们从它们当前所在的本地服务器中删除,并将所有内容迁移到 BitBucket。
唉,这些存储库中的大多数只是为了遗留目的而保留的,我真的不想为它们中的每一个都创建一个新的 BB 存储库。最终,我想创建一个名为“DeepFreeze”的新存储库,将这些旧存储库中更无用的存储在一个集中的位置,它们仍然可以访问,但实际上是不可见的。
似乎有两种主要方法可以解决这个问题:
- 子树将它们全部合并到 DeepFreeze 中。
- 将它们添加为子模块。
Subtree Merge 似乎是最明显的,但我的印象是只会将一个分支添加到新的 repo。
因此子模块似乎是更好的选择,但我担心旧项目不会有效地与我的新仓库一起存储,并且在尝试从不久的将来拉取时,克隆 DeepFreeze 然后执行“git 子模块更新”将失败-即将被重新利用的本地服务器上的-to-be-deleted bare repos。
有什么想法吗?谢谢!
【问题讨论】:
-
您为什么不想为每个 repo 创建一个存储库?脚本不是很容易为您做到这一点吗?
-
@Colin -- 更重要的是保持一切井井有条。我不想每次加载 BitBucket 时都滚动浏览 150 个过时的存储库,但它们必须去某处。
-
但是存储库的历史会去哪里呢?您想将每个回购的历史合并到一个大回购中吗?您是否需要保留历史记录(如果不需要,为什么要打扰 git?)?我现在可以告诉您,子模块不会是您寻求的解决方案,因为您仍然需要将这些 repo 放在某个地方(即 bitbucket 中的 150 个过时 repos)。
-
另外,你想对分支做什么。你想保持每个分支和每个存储库都处于完全相同的状态吗?
-
好的,我认为该解决方案可能是处理事情的更好方法。您可以在每个存储库中执行
git fsck && git prune && git gc --aggressive,也可以删除所有无用的内容并将存储库减小到最小大小,并将其存档。另一种解决方案是在 BitBucket 中创建一个新帐户,该帐户将包含每个存储库,因此它们并不总是存在,但在必要时仍然可用。
标签: git git-submodules git-subtree