目前删除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 update
, git submodule foreach
和git 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 status
和git 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
取消删除。
上一篇: What is the current way to remove a git submodule?
下一篇: Won't add files?