如何将现有的、未暂存的、未提交的子目录设置为子模块?

How to set existing, unstaged, uncommitted subdirectory as submodule?

有时,我从 github 克隆一个第 3 方项目作为项目的子目录,而不是 git submodule add <repourl>,但在做了一些工作后我意识到我想把它变成一个子模块毕竟。

如何在不丢失更改的情况下将从未提交的现有子目录标记为子模块?

最简单的方法是:

  • 移动您当前的 subrepo 文件夹(重命名)
  • 添加您的子模块:

    git submodule add -- /url/repo
    
  • 将您的更改添加回去:

    cd repo
    git checkout abranch
    git --work-tree=../repo.renamed add .
    git commit -m "add work"
    git push -u origin abranch
    
  • 不要忘记记录该回购的新 SHA1:

    cd ..
    git add repo (# no trailing slash)
    git commit -m "record new sha1 for repo"
    git push