情景:最近加入了一个新Team,牛人很多,新人也不少(外包队+本部,相信多数小伙伴都懂),Android 这边呢提交代码没有代码审查,全(良)靠(心)自(操)觉(作)。有的小伙伴对熟练度不够,导致android studio 构建的缓存文件总是被合并到主干 Dev上。在其他人合并的时候,就会卧槽*N ,我也不例外。
当然这只是忽略操作熟练度的使用问题,多加注意就行。
有问题就需要解决,这项目我是我一把屎一把尿重构的,我当然不忍心看着他一点一点变成一堆稀泥,这个清理Dev主干的任务就落到了我的手上。而此时我发现,我在针对Android studio 插件操作清除文件、Git 缓存清理、文件状态同步的理解上熟练度也只有青铜,大写惭愧,我几乎从来不用命令行提交代码(提交点点鼠标就能做,为什么要敲命令,为了炫酷吗? 白眼~那你现在不是尴尬了嘛)。这必须得认认真真取取经啦,插件平时方便,关键时刻还是要回到命令本身。
正文
-
1.清理 本地分支 dev-me
取消所有忽略
-
根目录运行命令 git rm -r --cached 缓存文件/文件夹
- 编辑器 库文件加载配置
.idea
- gradle 插件 缓存
.gradle
- offline 模式 gradle 插件 路径配置
gradle
- module 配置自动加载的缓存
.iml
命令:git rm -r --cached **/**.iml
- 根目录build 文件夹
- 编辑器 库文件加载配置
进入文件夹删除 被清除git记录的文件
commit
push → remote dev-me
- 进入Web GitLab 查看是否清楚干净,如果还存在上述任何一个文件,单独清理再push 即可。单独清理命令
git rm -r --cached **/TBUI-Library.iml
,变为红色
(如果发现因为跟远端路径不匹配而无法提交,则直接到gitlab 上删除该文件,本地pull一次)
- 进入Web GitLab 查看是否清楚干净,如果还存在上述任何一个文件,单独清理再push 即可。单独清理命令
- 还原忽略 commit push
4.以上完成后,重新添加忽略文件,重新设置本地gradle 插件 完成构建
5.根目录运行 git status 提示:
Your branch is up-to-date with *remote -dev-me* nothing to commit,working tree clean
本次remote 和local 缓存文件清理干净了。
完整忽略 加在根目录下的.gitignore文件中即可
# 所有的iml 文件
*.iml
# 整个 .idea 文件夹
.idea
# 所有的build 文件夹
build
# 所有的gradle 目录
gradle
# 整个 .gradle 文件夹
.gradle
# 文档
*.md
gitignore 忽略规则
# 忽略*.o和*.a文件
*.[oa]
# 忽略*.b和*.B文件,my.b除外
*.[bB]
!my.b
# 忽略dbg文件和dbg目录
dbg
# 只忽略dbg目录,不忽略dbg文件
dbg/
# 只忽略dbg文件,不忽略dbg目录
dbg
!dbg/
# 只忽略当前目录下的dbg文件和目录,子目录的dbg不在忽略范围内
/dbg
# 需要忽略a文件夹下所有文件及目录,但是排除某个文件夹或文件
a/*
!xxchild/
额外小坑
- ① 在使用IDE 插件执行合并后,提交时发现在个别忽略文件夹下新增的文件会被add 到本地git 缓存,这时候需要使用上面的命令单独移除这个文件后再提交
- ② 如果你发现在GitLab 中发起 merge Request 时出现了下面的提醒:
·This merge request contains merge conflicts that must be resolved.You can try it manually on the command line·
就是说你已经同remote Dev 差了好几个节点,并且每个节点中你都有没合并的提交。
而你去执行 compare 发现并无需要解决的冲突。那他其实是要你需要逐个回退,重新合并提交不可以跳跃,如果还有parent commit。这就非常恐怖了。咱也不可能把几十次的commit都回退去merge。
点开 command line 会给你两段 合并的命令
就照她说的做,命令也好插件也好。完成合并即可。
之后重新从Dev 拉取个分支作为你的新分支吧。这时候再发merge request 就可以成功了。
遇到Git 异常
$ git commit -a
fatal: Unable to create 'E:/****/.git/index.lock': File exists.
Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
原因:在你进行某些比较费时的git操作时自动生成,操作结束后自动删除,相当于一个锁定文件,目的在于防止对一个目录同时进行多个操作。有时强制关闭进行中的git操作,这个文件没有被自动删除,之后你就无法进行其他操作,必须手动删除
解决:手动删除这个文件,或者执行git 命令:rm -f ./.git/index.lock
遇到不解 希望评论中有人可以 点出
① remote dev 和本地都看不到的文件,在本地 合并远端时 有冲突文件 标记为Delete。
② Android studio 在使用插件合并时,偶尔会自动执行 add 添加忽略文件夹下的文件 文件到git缓存中,在commit 时会发现这个文件。