在做车载项目时,经常用到一些git命令,整理了一些留着自己以后备用,或者给一些需要的人,gogogo~~~
1.下载repo,执行代码拉取的命令
repo init -u ssh://liu.jingdong@********/gradleprojects/manifest -b temp_abroad
- -u:指定一个URL,其连接到一个manifest仓库,比如:ssh://liu.jingdong@********/gradleprojects/manifest
- -b:选择manifest仓库中的一个特殊分支,比如:temp_abroad
- -m:在manifest仓库中选择一个xml文件
2.同步代码(repo sync),这个需要在执行了repo init 命令后,执行如下命令同步代码
- repo sync -c //更新全部项目,只同步指定的远程分支
- repo sync -j4 //指定4个线程去更新
- repo sync . //更新当前文件夹,注意这里是有一个点的哈
3.本地无分支,新建分支并切换,依次执行如下代码
- git fetch aosp branch1:branch2 不要remotes/aosp/直接分支名,branch1为远程服务器上的分支,新建branch2并将branch1更新到branch2中
- git checkout branch2 新建后切换到branch2
4.本地有分支,更新远程代码库,然后更新代码,依次执行如下代码
- git fetch --all 更新远程代码库
- git reset --hard aosp/branch1 把branch1更新最新代码
git pull -----这个也可以更新代码到本地,但是发现有时候会更新不下来,原因还不知道,上面可以保证更新到最新代码。
5.提交本地修改的代码,依次执行如下代码
- git status 查看所修改的文件和状态
- git diff 查看修改的代码
- git add . 注意这里是有一个点的,点.是所有都提上去 加路径是单个的文件
- git commit -m "[NACA-ID:none][screencap_neu][add error-tolerant][1/1][OK]" screencap_neu项目名字如image,add error-tolerant为描述
- git push aosp HEAD:refs/for/temp_abroad 将代码提交到temp_abroad分支的远程代码库
- git reset --soft HEAD~1 提交回滚,代码不变,会退到某个未提交的状态(撤销提交)1表示回退1个版本,2表示回退2个版本
另:如果提交到Gerrit上,需要互相依赖的可以在Reply中使用depends-on:16760
如果提交后,又想提交一笔代码并合并到上一笔代码里面,可以依次执行如下代码:
- git add .
- git commit --amend //会出现vim的可视xml文件,可以:x退出即可
- git push aosp HEAD:refs/for/e01_trunk
这样就可以将本笔代码合并到上一笔代码中一起提交了。
查看分支
- git branch -v //查看本地分支
- git branch -vv //查看本地分支,本地分支和远程的分支会对应显示
- git branch --all //查看所有分支
6.通过vim在linux上查看代码
在第5条中git commit --amend //会出现vim的可视xml文件,也可以通过vim主动去查看
- vim src/main/java/com/CarFragmentUI.java //查看src/main/java/com目录下的CarFragmentUI.java文件
输入:wq!, 强制保存退出
w write 写入
q quit 退出
! 强制
或者:x 保存退出
:q 不保存退出
:q! 不保存强制退出
cat filename也可以一次显示整个文件,但是他不可以编辑。
7.通过命令安装APK,依次执行如下代码
安装到系统里面,即system里面
- mount -o rw,remount /system //给system权限,在linux中对只有Read-only filesystem的文件改为可写、可读权限
- cd system/app //进入系统目录
- rm -rf image.* //删除APK image 带*是删除以image为开头的文件都删除掉
- cp /udisk/single/APK/image.apk . //复制apk,/udisk/single为U盘根目录即apk所在目录,点.是复制到当前目录,也可以指定目录
- chmod 777 image.apk //给777权限
- sync //同步
- reboot //重启
安装到application中
- pm install /udisk/single/APK/Setting.apk 安装/udisk/single/APK/目录中的Setting.apk
- pm uninstall com.neusoft.mirage.image 卸载 com.neusoft.mirage.image为gradle里面的包名
8.查看log时用到的命令
- logcat |grep -e "AAA" //输出AAA的关键字log
-i 是不区分大小写
logcat -c 清理log
logcat -s [APK名字] Image Video Media
logcat *:e //查看异常的
logcat |grep -n --color=auto -e "CarFragment"
logcat -v time |grep -e "dong" 加时间戳
-i:忽略大小写
-n: 输出行号
-v: 反向选择
--color = auto :给关键部分添加颜色
adb logcat > C:\Users\twl\Desktop\log\logcat.log 将日志信息输出到已经存在的指定文件中
top -d 1 -m 5 //查看内存
date -s "20200527.114700" //修改时间为2020.5.27 11:47:00
9.adb查看/修改android系统属性命令、settings数据库
(1)settings数据库操作
获取值
adb shell settings get system [key]
adb shell settings get global [key]
adb shell settings get secure [key]
设置值
adb shell settings put system [key] [value]
adb shell settings put global [key] [value]
adb shell settings put secure [key] [value]
(2)系统属性命令
adb shell getprop [key] ——这个key就是需要获取的系统属性名字
实例:adb shell getprop persist.test
adb shell setprop [key] [value] ——[key]为需要设定的系统属性名字,[value]为设定的值。
实例:adb shell setprop persist.test true
10.杂项
(1)使用gitk工具可以将git可视化,查看之前提交得一下记录啥得。
(2)grep -rinw xxxxx 查找命令,一般使用grep -rin xxxx就可以了,xxx是你要搜索的关键字
-r 文件夹 递归 -i 忽略大小写 -n 记录行号 -w 全词匹配
grep -wirn "xxx.canversion_info" --exclude-dir=out * --include=*.{c,cpp,h,hpp}
也可以用上面这个,意思是,查找xxx.canversion_info关键字,去除out文件夹,只查找后缀为c,cpp,h,hpp得文件
如果你知道文件名字,可以直接 find -name xxx.java,需要带后缀的文件全名
(3)查看进程命令
adb shell ps|findstr com.android.xxx
或者adb shell ps|grep com.android.xxx
以上都是我在做项目时经常使用的命令,总结一下以防以后忘记,毕竟年纪大了。
(4)通过以下方式强制进入Android
车机上电后,一直按下enter进入uboot模式,输入如下命令强制跑一下android系统:
env set bootmode android
run bootcmd
(5)根据关键字查找查找包名
pm list package |grep xxxx 查找所有带xxxx关键字的包名
会出现如下,把带关键字的包名都找出来:
package:com.android.providers.xxxx
package:com.mediatek.fwk.xxxx
package:com.malaysia.xxxx
pm path com.malaysia.xxxx 查找com.malaysia.xxxx这个包名所在的路径
(6)停止kernel无用log
echo 0 >/proc/sys/kernel/printk