目前删除git子模块的方式是什么?

作为git版本1.9.3(Apple Git-50)在Mac上我如何删除git子模块? 我正在阅读许多过时的信息,许多开发者告诉我他们不会工作。 目前的方式是什么? 将git deinit pathToSubModule做诡计?

我认为可行的步骤在这里,但评论说他们不会。

让我解释一下我目前的情况以及我需要完成的事情。 我已经安装了快速存储库并将其添加到我的项目的子模块中。 此代码已经签入,其他人正在使用它。 我现在需要做的是分叉相同的快速存储库,并将其托管在我公司更安全的github上(因此完全是其他私人github)。 分叉后,我想将该fork添加为gitSubmodule,并让它替换之前安装的当前Quick子模块。

更新:我读过,以下是最新的git版本的正确方法,请确认吗?

To remove a submodule added using:

git submodule add blah@blah.com:repos/blah.git lib/blah
Run:

git rm lib/blah
That's it.

For old versions of git (circa ~1.8.5) use:

git submodule deinit lib/blah
git rm lib/blah
git config -f .gitmodules --remove-section submodule.lib/blah

你有git submodule deinit

git submodule deinit <asubmodule>    
git rm <asubmodule>
# Note: asubmodule (no trailing slash)
# or, if you want to leave it in your working tree
git rm --cached <asubmodule>
rm -rf .git/modules/<asubmodule>

deinit

取消注册给定的子模块,即删除整个submodule.$name
部分从.git/config和他们的工作树一起。

再次调用git submodule updategit submodule foreachgit submodule sync跳过所有未注册的子模块,直到它们再次被初始化为止,所以如果您不想在工作树中再次进行本地子模块的签出,请使用此命令。

如果你真的想从存储库中删除一个子模块,并提交使用git rm代替。

如果指定了--force ,则即使子模块包含本地修改,该子模块的工作树也会被删除。


如何安全地移除子模块。

(增加到https://stackoverflow.com/a/1260982/342794)

  • .gitmodules文件中列出并找到子模块部分。 通过终端vi .gitmodules说。 例:

    [submodule "submodules/afnetworking"]
        path = submodules/afnetworking
        url = https://github.com/CompanyName/afnetworking.git
    
  • 子模块可以使用本地叉。 对于长期运行的项目,代码可能与原始回购有所不同,并可能有一些修复。 验证子模块代码是否在项目过程中发生变化是个好主意。 例如:查看日志,如果它指向master分支或某个本地分支。 探索git日志来查找通过终端完成的修改。 通常这些存储在一个目录下,我的例子是在submodules目录下。

    User$ cd submodules/afnetworking
    User$ git log
    
  • 从.gitmodules中删除子模块部分,保存文件。 例如: git status应该只显示以下修改

    modified:   .gitmodules
    
  • 使用git add .gitmodules进行更改。

  • .git/config文件中列出并找到子模块部分。 通过终端vi .git/config 。 例:

    [submodule "submodules/afnetworking"]
        url = https://github.com/CompanyName/afnetworking.git
    
  • 删除git缓存sobmodule文件。 运行git rm --cached submodules/afnetworking (没有结尾斜杠)会成功删除它。 例:

    User$ git rm --cached submodules/afnetworking
    rm 'submodules/afnetworking'    <-- terminal output
    
  • 使用rm -rf .git/modules/...删除.git目录下的子模块文件。 之后再用git status确认它。

    User$ rm -rf .git/modules/submodules/afnetworking/
    User$ git status
    On branch feature/replace-afnetworking-submodule-with-pod
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
        modified:   .gitmodules
        deleted:    submodules/afnetworking
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        submodules/afnetworking/
    
  • 提交更改。 之后再确认git status

    User$ git commit -m "Remove submodule afnetworking"
    [feature/replace-afnetworking-submodule-with-pod 70e239222] Remove submodule afnetworking
    2 files changed, 4 deletions(-)
      delete mode 160000 submodules/afnetworking
    User$ git status
    On branch feature/replace-afnetworking-submodule-with-pod
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        submodules/afnetworking/
    nothing added to commit but untracked files present (use "git add" to track)
    
  • 删除未跟踪的子模块文件。

    User$ rm -rf submodules/afnetworking
    
  • 从Xcode项目中删除引用。 构建,修复编译和运行时问题。


  • 我使用的是Git 2.16.2版本,而git rm很好地完成了这项工作:

    git rm path-to-submodule
    

    你可以使用git statusgit diff --cached来验证,这会自动.gitmodules子模块并修改.gitmodules 。 一如既往,您需要提交更改。

    但是,即使子模块已从源代码管理中删除, .git/modules/path-to-submodule仍包含子模块存储库,而.git/config包含其URL,因此您仍需手动删除它们:

    git config --remove-section submodule.path-to-submodule
    rm -rf .git/modules/path-to-submodule
    

    保持子模块存储库和配置是有意的,以便您可以使用例如git reset --hard取消删除。

    链接地址: http://www.djcxy.com/p/16455.html

    上一篇: What is the current way to remove a git submodule?

    下一篇: Won't add files?