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之后的子模块删除的
posted @ 2017-03-13 17:50  苦海中的渡轮  阅读(8431)  评论(0编辑  收藏  举报