【问题标题】:How to treat nested repository (submodule) like a normal directory?如何将嵌套存储库(子模块)视为普通目录?
【发布时间】:2020-03-22 09:30:10
【问题描述】:

我的 Wordpress 网站使用 Git 进行版本控制,包括 wp-content/plugins/ 文件夹。现在有一个插件 (wp-editormd) 带有它自己的 Git 存储库,wp-content/plugins/wp-editormd/vendor/jaxsonwang/wp-settings-api-class/ (with .git/ inside)。 Git 将其视为子模块,这是不受欢迎的。我担心 Git 忽略它可能会破坏插件或插件的更新机制。如何告诉 Git 它应该像对待普通目录一样对待该目录?

【问题讨论】:

  • 只需删除 .git 文件夹并通过 maim 项目 repo 控制它
  • 我担心这可能会破坏某些东西。
  • 应该没什么,类似的情况已经很多次了,这一步有帮助
  • 或者更改 .git 文件夹名称,并检查是否有效
  • 好的,我试试。谢谢。

标签: git git-submodules


【解决方案1】:

我担心这可能会破坏某些东西

它唯一破坏的是子模块文件夹中的历史记录,它将消失。

如果是子模块(记录在.gitmodules中),则有git submodule deinit的顺序。

如果不是,则首先使用git rm SubmoduleFolder(没有尾随/)就足够了,以便删除gitlink (special entry in the index),如illustrated here

如果没有添加,只需删除嵌套的.git 文件夹即可。

然后您可以像普通文件夹一样添加、提交和推送该文件夹。

【讨论】:

  • 我可能会误解你。但是主要的 Git 项目(我的 wordpress 安装)还不知道 SubmoduleFolder,所以没有 .gitmodules 条目或 gitlink。只有当我git add --all 时,Git 才会警告“添加嵌入式 git 存储库”,然后这样对待它。
  • @MarcoEckstein 没有子模块:好。但是您仍然需要首先使用git rm SubmoduleFolder(没有尾随/)来删除对嵌套git存储库的引用(因为如果嵌套了.git/文件夹):即使没有.gitmodules,Git仍然会将其视为“ gitlink",对另一个存储库根树的引用。
  • 如果我在git add --all 之前git rm SubmoduleFolder,我得到fatal: pathspec 'SubmoduleFolder' did not match any files。如果我之后再做,我会得到fatal: could not lookup name for submodule 'SubmoduleFolder'。如果我之后git rm --cached SubmoduleFolder,我会得到error: the following file has staged content different from both the file and the HEAD: SubmoduleFolder。我可以强制删除,但是SubmoduleFolder/**/* 将不受版本控制。
  • @MarcoEckstein 当然:刚刚删除了嵌套的 .git 文件夹,Git 会将其视为常规文件夹。我已经相应地编辑了答案。
猜你喜欢
  • 2015-04-09
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 2015-04-03
  • 2016-09-30
  • 1970-01-01
  • 2011-01-13
  • 2016-07-23
相关资源
最近更新 更多