gpt4 book ai didi

git - 维护包含其他克隆的 git 存储库的 git 存储库

转载 作者:太空狗 更新时间:2023-10-29 13:10:59 27 4
gpt4 key购买 nike

我正在使用 Sharelatex(github) 在网站上工作但它包含用于构建主项目的其他存储库。我克隆了主存储库并做了grunt install用于下载这些存储库。

但问题是我需要更改主存储库和下载的代码。

由于这些项目可以获得新的更新,我也想 merge 这些更改。我还需要维护一个 repo,但是当我将更改推送到 Github 时,它只会显示主 repo 中的更改。

我遇到了submodules在 git 但由于主项目不包含任何子模块类型,我无法使用它。

例如:

有一个 repo web在主项目中使用。我首先对 web 中的文件进行一些编辑。 .我需要这些更改反射(reflect)在我的远程存储库中,以便其他人可以使用它们。

现在假设一段时间后 web 的重要更新 repo 是可用的,我应该如何使用它?

我输入 grunt install在命令行中下载此 repo。它不会创建子模块,而是将该 repo 克隆到我的文件夹中,随后我的主 git repo 将忽略该文件夹。

这个问题可能看起来不清楚,但我尽力解释了这个问题。

简而言之:

  • 我不仅希望在主要和涉及的任何其他 repo 中执行更改,而且还希望在它们的更新可用时提取和 merge 这些其他 repo。
  • 我还需要维护我的项目的远程仓库。
  • 最佳答案

    I am working on a website using Sharelatex(github) but it contains other repository that are used to build the main project. [...] I came across submodules in git but since the main project does not contain any submodule kind of thing I am unable to use that.



    实际上,您确实有一个子模块。这就是嵌套存储库的含义,并且(我对此很认真)就您需要了解的 grok 子模块而言,这就是子模块的全部内容。要理解子模块,假设您有一个嵌套存储库(您有)并考虑管理要求,需要做什么来支持 dvcs 中的设置。

    对于初学者来说,当人们克隆一个使用来自某个 repo 的子模块的项目时,你都已经决定包含已发布的提交,那么该克隆显然也不会获得子项目存储库(当然它不应该得到你的私有(private)和上帝知道的东西-你已经完成了它的版本)。因此,他们还必须从其自己的某个已发布存储库中获取子项目存储库。

    你如何告诉获取你的提交的人从哪里获得必要的子项目提交?很明显,您必须在已提交文件中的某处放置一个注释,说明“这是一个应该有任何需要的 $subproject 提交的 repo”。 git submodule已确定 .gitmodules作为像这样存储笔记的传统地方。

    接下来:好吧,如果你交给他们的 url 离线了,其他人该怎么办?他们显然需要使用另一个 repo。因此, .gitmodules只是建议, git submodule命令使用 .git/config 中的当前值, 其中 git submodule init已从 .gitmodules` 中的建议中填充。
    git submodule的操作都是这样的。忘掉它。在您需要一点帮助来完成您已经发现需要做的事情之前,甚至不要费心查看命令。从知识开始,一个简单的事实,一个子模块只不过是一个嵌套的 repo,使用它的项目只提交一个应该在嵌套 repo 中某处的提交 id。而已。这就是一个子模块。

    当您遇到需要执行的繁琐任务时,请查找 git submodule为您执行它们的子命令。您不必使用子命令。该子命令所做的只是将简单的任务自动化,否则这些任务会很费力。它是一个工具包,可以做任何你需要做的事情,而且它根本不可能或不应该对世界上的每个人强加一些任意且充分的(<--这是困难的部分)抽象。所以它是一个抓包。

    也就是说,有一个重要的安全游戏 git submodule updategit submodule add当他们执行 git clone 时为您执行为你。存储库通常在 [子] 项目顶层 .git 下具有实际的 repo 内容,但是如果您 checkout 一个没有该子项目的分支,或者需要或希望该子项目消失,它的 .git也将消失 - 当它不仅包含您 checkout 的内容而且包含整个实际 repo 时,这不是您想要的。所以当 git submodule update做它的初始克隆,它提升子模块的 .git目录到包含项目的 repo 中一个方便(和任意)的小角落,并替换 .git它刚刚从子模块中移出的目录 .git包含移动目录的相对路径的文件。

    要在您当前拥有的 repo 上完成初始提升,请将其移出当前 repo,从放置它的任何位置添加和更新,然后在 .gitmodules 中修复上游 url为了他人的方便。

    那里。现在,您绝对知道了理解 git 子模块所需知道的一切,并且仅在您发现需要它们时才逐步获取详细信息,以了解 git submodule 的含义。 command 正在为您做事,以及为什么您实际上不必关心预先了解其联机帮助页上的每一件小事。至少,我是这么认为的。

    如果我错过了任何重要的事情,我会很高兴(温和或直率,我真的不在乎)评论中的更正。

    关于git - 维护包含其他克隆的 git 存储库的 git 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26471545/

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