【问题标题】:How do I move a local only git repo that has no remote under a remote repo that I do not own while preserving the git history?如何在保留 git 历史记录的同时在我不拥有的远程存储库下移动没有远程的本地唯一 git 存储库?
【发布时间】:2021-08-13 05:16:46
【问题描述】:

我有一个本地 git repo my_local_repo 有一些提交,但没有关联的远程。

我现在想将这个 repo 移动到一个名为 sandbox 的远程 repo 下的文件夹 foo 下,该 repo 由其他人管理,但我已被邀请。 我希望将本地 repo 的 git 历史记录保存在远程中。

所以,在合并之后,我想让远程仓库看起来像:

  • 沙盒
      • my_local_repo

未来,my_local_repo 可能会作为它自己的 repo 移动到生产代码中,这样可以很好地保留它自己的 git 历史记录。

我该怎么做?有许多与此非常相关的问题和答案,但无法找到解决此确切情况的问题。

【问题讨论】:

  • 您可以使用git filter-branch 来实现...祝您好运!也许git subtree 可以帮忙?。
  • my_local_repo 会变成什么?您是否仍希望以完全独立的 repo 访问它(这将是子模块方式)?还是您希望它只是 sanbox 存储库的一部分?
  • @LeGEC(已编辑):实际上作为子模块更好,因为我可能希望将来将 my_local_repo 移动到生产 repo。

标签: git github version-control


【解决方案1】:

git 子模块似乎符合您的要求。我认为您也计划在服务器上托管本地存储库。

  1. 克隆沙盒
  2. 移动到 foo
  3. git子模块添加https://repserver.com/my_repo

但是,对于 git 子模块,您需要遵循特定的工作流程。 请参考以下链接中的文档。

https://git-scm.com/book/en/v2/Git-Tools-Submodules如何配置和使用。

【讨论】:

  • sandbox 是远程的, foo 在沙箱下,我的 repo 只是本地的。可以更新一下步骤吗?他们似乎反过来解决了这个问题。我可以克隆沙箱,在它下面添加一个文件夹 foo。现在,如何在 foo 下添加我本地唯一的 repo my_repo 以便保留 my_repo 历史记录?
  • @Anand :让你的本地仓库可用应该是最简单的部分:选择一个托管服务(例如:与sandbox 项目相同的服务),创建一个空项目并将你的仓库推送到那个新遥控器。
  • @LeGEC 我希望这个本地 repo 放在另一个人管理的遥控器下。
  • @Anand,假设沙箱在 github 上,您可以将 local_repo 自己托管在 github 上,然后按照上述步骤操作。
  • @Anand : ok : 问那个人你应该把你的本地仓库推送到哪里
【解决方案2】:

通常,子模块是从另一个远程获取的。

我不明白原因,但您似乎想将您的项目作为子模块发布到第三方共享存储库,而不创建新的远程存储库(不是在您这边,也不是在第三方那边)。
如果我误解了,请纠正我。


可能有一种解决方法:在现有共享存储库的一组专用引用下推送您的本地项目:

# either as regular branches, prefixed with a chosen name :
git push upstream master:refs/heads/subproject/master

# or under refs which wouldn't be listed as regular branches or tags :
git push upstream master:refs/subproject/master

如果第三方同意,您可以将您的项目作为子模块包含在内,这将从同一个远程获取其数据。

【讨论】:

  • 解释为什么,不是实际情况而是类比。考虑到我确实为客户工作,而代码是他们的财产。他们不希望我将他们的代码保存在我的 git 存储库中。他们希望将其保存在遥控器中。他们希望我在沙箱下将代码签入他们的遥控器,直到满足所有验收标准,然后将其作为顶级仓库移动到他们的遥控器中。他们对业务中的顶级回购也有严格的标准,所以在满足他们的要求之前,我不会在他们的遥控器上创建顶级回购。
  • “在他们的远程沙箱下”:这部分需要澄清:要么有东西要推送,要么没有。与第三方核实他们所说的“沙盒”是什么意思:它是现有仓库中具有给定约定的分支吗?一个完整的独立仓库,不会被标记为“顶级”?还有什么...?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 2014-03-30
  • 2011-09-16
相关资源
最近更新 更多