gpt4 book ai didi

git - 我可以在同一个存储库中使用 git submodule 吗?

转载 作者:行者123 更新时间:2023-12-04 08:35:47 25 4
gpt4 key购买 nike

在我的项目中有一个文件夹,其中包含我想包含在我的每个应用程序组件中的常用工具。我只想要它的一个主版本,我希望其余的副本像往常一样用 git 命令更新。有没有办法在将所有内容保存在同一个存储库中的同时做到这一点?我知道 got 子模块适用于多个存储库,但它似乎不适用于单个存储库。有没有人对此事有任何见解?

最佳答案

您可能需要查看 git subtree。看看这两篇文章:

它的文档没有在 git-scm.org 上提供(我不能说为什么),你可以通过键入 git help subtree 来阅读它,或者从 git 的仓库:


从技术上讲,您可以将 repo 作为子模块包含在其自身中;不寻常的东西会来自:

  • 将在子模块目录中 check out 的提交,
  • 分支名称,
  • 子模块的通信历史。

假设您的代码如下所示:

Readme.md
libs/util/fileA.py
libs/util/fileB.py
src/main.py

并且您希望将 libs/util/ 的内容作为“自托管”子模块。

  1. 关于子模块的提交:

这意味着你的 repo 协议(protocol)的某个提交的完整内容应该是:

fileA.py
fileB.py

在同一个存储库中,您将有一个代表“完整项目”的提交和一个代表“只是实用程序库”的提交。
这是完全可控的,一开始只是令人惊讶。

  1. 关于分支名称:

因为你的 repo 可能已经有一个名为 master 的分支,它代表你的“完整”项目的状态,你不能将那个名称用于“子模块”部分的分支。

最简单的方法是选择一组专用于该子模块的名称(例如:util/*)并坚持使用。

  1. 关于历史:

在同一分支中提交完整的 repo 和仅提交子模块没有多大意义。专用于子模块的分支与“完整”项目的分支无关。

再一次:git 可以完美地管理它。这是在您的 repo 中创建这样一个起始分支的一种方法:

# from your repo's 'master' branch :
git checkout -b util/master
git filter-branch --subdirectory-filter libs/util

当您查看 git-subtree 的工作原理时,它允许您处理相同类型的设置:不相关的分支存储在同一个 repo 中,并在您选择的位置 checkout 子分支.

它的主要优点是:因为它从一开始就打算以这种方式工作,所以这些命令可能会给您带来更少的摩擦,并且减少在您的存储库中搞砸事情的方式。

关于git - 我可以在同一个存储库中使用 git submodule 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64810428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com