glide引出恶心的git submodule

 
  1. 起因
    1. 某一天一个同事,在看那个glide,然后我路过,看到他为何不编译“glide”项目(他说,编译中出错,反正都是看源码而已,所以就懒得搞,然后我出于“好心”,给他弄一下,我擦)
    2. 报错:
      1. Process 'command 'git'' finished with non-zero exit value 128
        1. 这个简单,因为他是直接从github那里下载(得到一个zip文件,天朝clone github的代码很慢的)的,而不是直接clone出来,所以执行时,报这个错,很正常,只需要把在该文件夹中执行"git init"就行了
      2. Cannot evaluate module disklrucache : Configuration with name 'default' not found.
        1. 这个就比较麻烦了。是因为,检查到模块"disklrucache",只是一个“空目录”,所以gradle,不认识它。就直接报错。
      3. 问题来了:为什么 模块"disklrucache"是空目录,是因为在settings.gradle中声明的更新“外部模块”
        1. exec { commandLine "git", "submodule", "update", "--init", "--recursive"}
        2. 执行完,没有把“disklrucache”进行更新
        3. 然后进入正题了,git submodule
        4. 直接敲"git submodule"能查看当前git中有哪些子外部模块(相关文章:http://www.tuicool.com/articles/jqiEJzU
        5. 我查看后,没有声明disklrucache作为“子外部模块”,只留了那个目录在那里
        6. 只好查看一下,如何添加“子外部模块”
        7. 添加
为当前工程添加submodule,命令如下:
git submodule add 仓库地址 路径
  1. 以下代码,是我无聊写的。可以忽略的
def getGitModules(){
File configFile = file(".gitmodules")
println configFile.getAbsolutePath()
def lines = configFile.readLines()
String line = ""
String path = ""
String url = ""
Map<String,String> gitModules = new HashMap<>()
for (int i = 0; i < lines.size(); i++) {
line = lines.get(i)
if(line.startsWith("[submodule")){
path = lines.get(i+1).split(" = ")[1]
url = lines.get(i+2).split(" = ")[1]
//println String.format("path:%s",path)
//println String.format("url:%s",url)
if (url.endsWith(".git")) {
gitModules.put(path,url)
}
}
}
gitModules
}
 
def getGitModulesByClone(){
Map<String,String> gitModules = getGitModules()
String path = ""
String url = ""
for(String key: gitModules.keySet()){
File moduleDir = file(key)
if (moduleDir.exists()) {
moduleDir.delete()
}
path = key
url = gitModules.get(key)
println String.format("path:%s",path)
println String.format("url:%s",url)
try{
exec {
commandLine "git", "submodule", "add", url , key
}
}catch(Exception e){
 
}
}
}
def gitInit(){
exec {
commandLine "git", "init"
}
println("gitInit")
}
def gitSubmoduleUpdate(){
/**
try{
exec {
commandLine "git", "submodule", "update", "--init", "--recursive"
}
println("gitSubmoduleUpdate")
}catch(Exception e){
getGitModulesByClone()
}
*/
getGitModulesByClone()
}
 
try{
gitSubmoduleUpdate()
}catch(Exception e){
gitInit()
gitSubmoduleUpdate()
}
  1. 结论
    1. 注意事项
posted @ 2017-01-19 15:31  3H  阅读(2758)  评论(0编辑  收藏  举报