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

时间:2014-04-08 03:04:34

标签: git github

我正在将很多项目转移到GitHub中的私有存储库中。其中很多是不再积极使用的项目。因此,我宁愿每个项目都没有专用的存储库 - 我想把它们全部归为一个'Deprecated Projects'存储库。我想这样做,并保持每个项目的历史。

我已尝试将项目目录及其.git目录放入主要的Deprecated Projects存储库中,但这似乎不起作用 - 只有该目录实际上似乎在主存储库中被跟踪/版本化,但没有一个文件。

在这种情况下,我可以选择的最佳选择是什么?我已经尝试将子目录/项目中的.git目录重命名为.git-directory,这似乎消除了问题 - 项目中的所有文件都被正确地添加到主存储库中。如果这确实可以完全按照我的意愿工作,那么这将是一个可接受的解决方案 - 只需要将.git-directory文件夹重命名为.git,如果我确实想要将项目移出'Deprecated Repositories'仓库,并启动积极发展它。如果有人能够确认这种方法是否合适,或者是否可能导致问题,那将非常有用。

我很新,所以有关此的任何信息都将非常感谢!

1 个答案:

答案 0 :(得分:2)

使用子树合并。

摘要

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

您可以正常浏览gitk中的历史记录,并保留SHA-1哈希值。

力学

假设您拥有master-repo中的主仓库以及要在project中合并的项目。以下是步骤:

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. 将项目合并到主存储库中,但使用合并策略完全忽略项目中的文件。这允许您在不实际更改任何文件的情况下进行合并提交,这允许您稍后浏览历史记录。
  3. 将项目文件放入子目录,然后提交。
  4. 请注意,除了“master”之外,这不会保留项目中的分支。您可以通过将它们放在其他子目录中来保留它们,或者您可以跳过read-tree步骤并仅进行合并提交而不实际从这些分支引入文件。