git submodule 使用過程中遇到的問題
資源文件
-
原.gitmodules文件的內容如下:
[submodule "Submodules/FFmpegWrapper"] path = Submodules/FFmpegWrapper url = git@github.com:OpenWatch/FFmpegWrapper.git [submodule "Submodules/CocoaHTTPServer"] path = Submodules/CocoaHTTPServer url = git@github.com:robbiehanson/CocoaHTTPServer.git [submodule "Submodules/OWS3Client"] path = Submodules/OWS3Client url = git@github.com:OpenWatch/OWS3Client.git [submodule "Submodules/SSKeychain"] path = Submodules/SSKeychain url = git@github.com:soffes/sskeychain.git [submodule "Submodules/CocoaLumberjack"] path = Submodules/CocoaLumberjack url = git@github.com:CocoaLumberjack/CocoaLumberjack.git [submodule "Submodules/AFNetworking"] path = Submodules/AFNetworking url = git@github.com:AFNetworking/AFNetworking.git [submodule "Submodules/AFOAuth2Client"] path = Submodules/AFOAuth2Client url = git@github.com:AFNetworking/AFOAuth2Client.git
步驟
-
1、首先我們clone一下目標工程,然后進入工程目錄
git submodule initSubmodule 'Submodules/AFNetworking' (git@github.com:AFNetworking/AFNetworking.git) registered for path 'Submodules/AFNetworking' Submodule 'Submodules/AFOAuth2Client' (git@github.com:AFNetworking/AFOAuth2Client.git) registered for path 'Submodules/AFOAuth2Client' Submodule 'Submodules/CocoaHTTPServer' (git@github.com:robbiehanson/CocoaHTTPServer.git) registered for path 'Submodules/CocoaHTTPServer' Submodule 'Submodules/CocoaLumberjack' (git@github.com:CocoaLumberjack/CocoaLumberjack.git) registered for path 'Submodules/CocoaLumberjack' Submodule 'Submodules/FFmpegWrapper' (git@github.com:OpenWatch/FFmpegWrapper.git) registered for path 'Submodules/FFmpegWrapper' Submodule 'Submodules/OWS3Client' (git@github.com:OpenWatch/OWS3Client.git) registered for path 'Submodules/OWS3Client' Submodule 'Submodules/SSKeychain' (git@github.com:soffes/sskeychain.git) registered for path 'Submodules/SSKeychain' -
2、接下來我們嘗試更新子模塊
git submodule update --init --recursive$ git submodule update --init --recursive Cloning into '/Users/macmini_35/Downloads/FFmpeg-iOS-Encoder/Submodules/AFNetworking'... Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. fatal: clone of 'git@github.com:AFNetworking/AFNetworking.git' into submodule path 'filepath/FFmpeg-iOS-Encoder/Submodules/AFNetworking' failed -
3、刪除子模塊,重新添加子模塊
-
1、由於平常用到的git命令很少,於是乎我去查了一下命令(不截圖了)
Fails with error: 'fatal: Please, stage your changes to .gitmodules or stash them to proceed' This appears to be rather outdated. The current correct procedure: git submodule deinit <name> git rm --cached <name> rm -rf .git/modules/<name> From: http://stackoverflow.com/questions/1260748/how-do-i-remove-a-git-submodule這個結果在github上邊找到的,然后根據后邊的鏈接跳到了stackoverflow,這里只有一部分請自行前往瀏覽完整篇;
There was no Porcelain way to say "I no longer am interested in this submodule",once you express your interest in a submodule with "submodule init". "submodule deinit" is the way to do so. The deletion process also uses git rm (since git1.8.5 October 2013). Summary The all removal process would then be: mv asubmodule asubmodule_tmp 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
mv asubmodule_tmp asubmodule
But you seem to still need a:
rm -rf .git/modules/asubmodule
嗯!開始嘗試
*$ git submodule deinit Submodules/AFNetworking
Submodule 'Submodules/AFNetworking' (git@github.com:AFNetworking/AFNetworking.git) unregistered for path 'Submodules/AFNetworking'
*$ git rm Submodules/AFNetworking
rm 'Submodules/AFNetworking'
*$ git rm --cached Submodules/AFNetworking
fatal: pathspec 'Submodules/AFNetworking' did not match any files
*$ git submodule add https://github.com/AFNetworking/AFNetworking.git Submodules/AFNetworking
Cloning into '/Users/macmini_35/Downloads/FFmpeg-iOS-Encoder/Submodules/AFNetworking'...
remote: Counting objects: 14512, done.
remote: Total 14512 (delta 7), reused 7 (delta 7), pack-reused 14504
Receiving objects: 100% (14512/14512), 5.17 MiB | 1.83 MiB/s, done.
Resolving deltas: 100% (9552/9552), done.
Checking connectivity... done.
備注:
**請一定要按照順序操作啊!本來都已經完事了,就是因為順序錯了搞得有重來了一次**- git submodule deinit
submodulename - git rm
submodulename - git rm --cached
submodulename - rm -rf ./git/modules/
submodulename這一步是針對已經update之后的子模塊刪除的
