Git - 如何最好地将多个存储库存储在一个主存储库中?

标签 git github

我正在将很多项目转移到 GitHub 的私有(private)存储库中。其中很多是不再积极使用的项目。因此,我宁愿每个项目都没有一个专用的存储库——我想将它们全部集中到一个“已弃用的项目”存储库中。我想这样做并维护每个项目的历史记录。

我已经尝试将项目目录及其 .git 目录放入主弃用项目存储库中,但这似乎不起作用 - 只有目录实际上似乎在主存储库中被跟踪/版本化, 但都不是文件。

在这种情况下,我可用的最佳选择是什么?我尝试将子目录/项目中的 .git 目录重命名为 .git-directory,这似乎解决了问题——项目中的所有文件都正确添加到主存储库中。如果这确实按我想要的方式工作,那么这将是一个可以接受的解决方案——如果我确实想将项目移出“已弃用的存储库”存储库,则只需将 .git-directory 文件夹重命名为 .git,然后开始再次积极发展。如果有人可以确认这种方法是否可行,或者是否可能导致问题,那将非常有用。

我是新手,如有任何相关信息,我们将不胜感激!

最佳答案

使用子树 merge 。

总结

子树 merge 允许您保留每个项目的历史记录,最新的提交会将每个项目放在一个单独的目录中。如果所有项目都处于非事件状态,这是理想的。

您可以像往常一样在 gitk 中浏览历史记录,SHA-1 哈希会被保留。

力学

假设您在 master-repo 中有主存储库,在 project 中有要 merge 的项目。以下是步骤:

cd master-repo
git remote add project1 ../project1
git fetch project1
git merge -s ours --no-commit project1/master
git read-tree --prefix=project1 -u project1/master
git commit -m "Added project 1"

换句话说,

  1. 将项目添加为远程项目,这样您就可以将历史记录引入主存储库。
  2. 将项目 merge 到您的主存储库中,但使用完全忽略项目文件的 merge 策略。这允许您在不实际更改任何文件的情况下进行 merge 提交,从而允许您稍后探索历史。
  3. 将项目文件放入子目录,然后提交。

请注意,这本身不会保留“master”以外项目的分支。您可以通过将它们放在其他子目录中来保留它们,或者您可以跳过 read-tree 步骤,只进行 merge 提交,而不实际从这些分支中引入文件。

关于Git - 如何最好地将多个存储库存储在一个主存储库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22926783/

相关文章:

Xcode 项目显示两个 git 存储库(只有一个是正确的);提交给两者

linux - 来自外部 .diff 文件的交互式补丁

git - 在 Git 中安全工作的方式

Git 非快进更新被拒绝 merge 远程更改

visual-studio - 当我尝试在 ubuntu 中使用 VS 安装 jquery-csv 库时,为什么 npm 会给我警告

git - 带有 Git 的 Visual Studio 2019 - "Undo Changes"并不总是有效

eclipse - 如何解决 Eclipse 中的脏索引?

git - 为什么我没有进行任何更改时会出现冲突?

linux - 如何从命令行设置 ubuntu (linux) 使用 github.com 的双因素身份验证

git - 是否有类似于 Subversion Edge 的 GIT Web Admin