Git 命令行踩坑笔记
最近在写打包流水线的时候,遇到了几个坑,稍微总结一下。
远程分支存在则拉取,不存在则checkout
全量拉取
1 | git clone -b master "${git_url}" "${products_dir}" |
这里有个坑需要注意,就是克隆的时候不能使用--depth=1
,这样会导致以后只能拉取到该分支的信息,其他分支你怎么检查都是不存在的
但是有时侯我们的仓库太大了,我们就是想要拉取该分支的最新版本怎么办,能拉成功就拉成功,拉不成功就创建分支。
听起来没问题,但是如果直接写,你就会遇到问题,就是拉不成功整个shell就退出了,那么有没有办法解决呢?
有办法,有两种办法,第一种,使用subprocess
subprocess尝试拉取最新版本
1 | git_clone=$(git clone--depth=1 -b "${branch}" "${git_url}" "${products_dir}") |
$()
内部的就是subprocess,它的失败不会导致shell直接退出
set +e
在shell的头部设置set +e,保证失败不退出,然后检查命令是否执行成功
1 | !/bin/bash |
$?
的意思是获取上一条指令的执行结果,如果结果为0则表示成功。
如果仓库使用了lfs,最好使用git lfs命令
就是说如果你的仓库使用了lfs,那么,尽量使用git lfs clone
,而不是git clone
,其他命令同理
android:requestLegacyExternalStorage not found
如果你在打包APK过程中遇到了这样的报错:AAPT: error: attribute android:requestLegacyExternalStorage not found.
当项目build.gradle - compileSdkVersion配置的版本小于29,并且还在AndroidManifest.xml - application中配置了android:requestLegacyExternalStorage属性(不管是自己项目还是三方库配置了这个属性),就会导致这个问题的产生。
这个属性主要作用是因为Android 10.0的存储权限调整,Google推出的临时解决方案。
这个博客上介绍了两种解决方法:https://juejin.cn/post/6850418117093523464
不过这两种方法不适用于我们的情况,因为我们是直接产生APK的,没有办法暂停下来操作中间的Gradle产物,当然我们可以说先打包Gradle项目出来,再构建APK
不过Unity官方提供了方法,我们可以定义中间Gradle产物的AndroidManifest.xml
,这里分两种,一种是定义unityLibrary的,一种是定义launcher的,我们采取第二种
然后将生成的Assets/Plugins/Android/LauncherManifest.xml
改成这样:
1 |
|
主要就是在application标签中添加tools:remove="android:requestLegacyExternalStorage"