git deinit pathToSubModule
会做什么?
我认为可行的步骤是here,但评论说它们不会。
让我解释一下我目前的情况以及我需要完成的工作。我已经安装了the Quick repository并将其添加到我的项目的子模块中。此代码已经签入,其他人正在使用它。我现在需要做的是 fork 相同的Quick存储库并将其托管在我公司拥有的更安全的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
答案 0 :(得分:166)
您拥有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
,则子模块的工作树即使包含本地修改也将被删除。
答案 1 :(得分:3)
(添加到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 cache sobmodule文件。运行git rm --cached submodules/afnetworking
(没有尾部斜杠)会成功删除它。例如:
User$ git rm --cached submodules/afnetworking
rm 'submodules/afnetworking' <-- terminal output
使用.git
删除rm -rf .git/modules/...
目录下的子模块文件。之后用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项目中删除引用。构建,修复编译和运行时问题。
答案 2 :(得分:1)
我正在使用Git版本2.16.2而git rm
完成的工作非常好:
git rm path-to-submodule
您可以通过git status
和git diff --cached
验证这是否会取消初始化子模块并自动修改.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
。