【问题标题】:Creating git repository from several repositories locally从本地的多个存储库创建 git 存储库
【发布时间】:2018-04-30 12:33:50
【问题描述】:

我的目录结构如下:

父/包含 孩子1/ 儿童2/ ... 孩子N/

每个子目录都是其自己的 git 存储库,其中包含提交历史等。我已经意识到,将 Parent 设置为带有子存储库的 git 存储库(可能使用 git-subtree 或其他东西)会更有意义。这是因为子目录都是同一个项目的组件。

我查看了各种答案,但它们都涉及从某个远程仓库推/拉,而在这种情况下,一切都是我的机器本地的(我想保持这种方式——另外,我不知道如何使用遥控器)。

所以我的问题是:我如何创建父存储库,使子存储库成为其中的一部分,但保留他们各自的历史,而不参考任何远程存储库?


这与建议的副本不同的原因: 有关远程存储库位于本地硬盘驱动器上的链接很有帮助,并且肯定会使 SO 上的其他答案更易于访问。我刚刚尝试了有关合并两个存储库的链接问题中的程序,它几乎可以完成这项工作,但在我的情况下很费力且容易劳动。在那个问题中,将合并两个存储库以创建第三个存储库,而在我的情况下,许多存储库需要成为新存储库的目录。

要使用建议的重复答案,我必须复制 Parent,比如 Parent_copy,然后从 Parent 中删除所有内容,创建 Parent .git 目录,然后一次合并一个 Child 目录。在此过程中,每个 Child 的内容要么从 Parent_copy/Child 复制到 Parent,要么被忽略(基于 .gitignore 文件)。然后我可以重新创建例如Parent/Child1 作为一个空目录,从 Parent 中移动文件,并从 Parent_copy/Child1 中复制忽略的文件。所以它会起作用,但有点费力且容易出错。我想知道有没有更有效的方法,理想地处理子目录?

【问题讨论】:

标签: git


【解决方案1】:

使用 git submodules 并作为子模块 url 使用本地 repo 路径。

例如将子模块添加到父存储库使用git submodule add /path/to/some/submodule1.git

请记住,您现有的子存储库应该在父存储库之外。当您调用 git submodule add ... 时,适当的引用将被复制到父 repo

【讨论】:

  • 这非常接近我想要的。您是否知道是否有一种方法可以将 Child 目录的 .gitignore 文件中的文件带入,而无需手动查找所有文件?
  • 您想在git submodule add 期间将它们从子子存储库复制到父存储库吗?实际上,您可以将 .gitignore 中的文件添加到 git index 甚至提交它们。如果这样做,它们将在您下次同步子模块时同步。该文件中的所有修改仍将在原始子仓库和您使用 submodule add 制作的副本中被忽略
猜你喜欢
  • 2018-06-26
  • 2018-04-05
  • 2016-02-11
  • 2023-03-20
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
相关资源
最近更新 更多