gpt4 book ai didi

git - 如何使 git 存储库中的现有目录成为 git 子模块

转载 作者:IT王子 更新时间:2023-10-29 01:06:23 24 4
gpt4 key购买 nike

我对 git-submodules 很困惑。

基本上我的问题是我无法让 git 理解 ~/main-project/submodule是一个子模块。


我对 git 子模块有很好的经验:
在我的 dotfiles repository我在 ~/dotfiles-repo 中创建了 .gitmodules 文件我在那里添加了路径和网址。从那时起,如果我更改子模块中的文件并运行 git status ,我会得到类似的东西:.vim/bundle/auto-complete (new commits) # in red

我创建了 .gitmodules文件在 ~/main-project但是:

  • 如果我更改 ~/main-project/submodule甚至推送更改,我也没有得到类似 <submodule> (new commits) # in red 的响应运行时 git status~/main-project . 我只得到在这些目录中所做的更改
  • 当我点击位于 github 的文件夹链接时对于这些目录,它不会将我定向到存储库本身,但我会留在同一个存储库中。

    1. 也许我没有捕获 Gist 。子模块的主要特点是什么?
    2. 为什么 git 理解 the dotfiles repo 中的子模块但不是in my other repo
    3. 是不是因为我已经告诉git把文件添加到~/main-project/submodule里面了到索引?

我读过 this question这让我找到了this answer但我不确定我是否需要 git-subtree .我不想做可能会导致难以恢复的更改。

Edit: This suggested duplicate-solution didn't work either, I recieved an error that Updates were rejected because the remote contains work that you do not have locally. It seems that @GabLeRoux practically told me to push <repo-A> to the url of <repo-B>.

最佳答案

使用git submodule absorbgitdirs

这就是docs声明此命令的作用:

If a git directory of a submodule is inside the submodule, move the git directory of the submodule into its superprojects $GIT_DIR/modules path and then connect the git directory and its working directory by setting the core.worktree and adding a .git file pointing to the git directory embedded in the superprojects git directory.

因此,不必像@DomQ 和我自己在之前的回答中所建议的那样从头开始,而是可以添加运行以下命令:

  1. 不从索引中删除子模块,将子模块的 url 添加到 .gitmodules.git/config
    git submodule add <url> <path>
  2. 移动子模块的$GIT_DIR目录(常规存储库中的 .git)到 .git/modules/<path>
    git submodule absorbgitdirs <path>

原始答案 - v2.12.0 之前

git submodule absorbgitdirs仅在 v2.12.0-rc0 中引入(参见 commit)。

解决方案非常简单。它是从 here 中提取的.

  1. git rm submodule-dir
    这将删除 git 在 submodule-dir 中跟踪的所有文件。
  2. rm -rf submoduledir
    这将删除可能留在 submodule-dir 中的所有其他文件。因为 git 忽略了它们。
  3. 现在,我们必须提交才能从索引中删除文件:
    git commit
    提交后,我们清理了 git 在 submodul-dir 中跟进和未跟进的文件.现在是时候做:
  4. git submodule add <remote-path-to-submodule>
    这将重新添加子模块,但作为真正的子模块。
  5. 此时检查 .gitmodules 可能是个好主意并查看子模块是否添加成功。就我而言,我已经有一个 .gitmodules文件,所以我不得不修改它。

关于git - 如何使 git 存储库中的现有目录成为 git 子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36386667/

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