git submodule 使用過程中遇到的問題


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 init

      Submodule '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  
    
    • 1、問題出現了無法更新(提示:沒有權限,不能讀取遠程庫)
      • 這個錯誤原因按照提示的原因,應該是SSH的問題,解決辦法,這里我就不說怎么做了,怎么操作請自行Google
        這只是一個小問題,如果按照正常思路就不會遇見下一個問題了,我選擇一種解決方法,
        刪除子模塊,重新添加子模塊(資源鏈接換成https的)。
  • 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之后的子模塊刪除的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM