使用習慣git,用回svn在Android Studio中忽略文件很差使,因此本身擼一個腳本插件來實現自動化忽略svn中的文件。android
ps:在網上找過好多文章,幾乎千篇一概都是說在commit提交後就沒法配置,本文給出解決方案。git
svn的忽略文件以安卓項目爲例,要忽略如下文件或者文件夾。bash
*.iml
.idea/
/.gradle
gradle/
gradlew
gradlew.bat
local.properties
# 各個模塊下build文件夾
app/build/
複製代碼
使用git很容易配置忽略規則,在項目.gitignore文件中根據需求寫入相應配置便可,可是使用svn狀況下是沒法根據配置文件忽略文件,只能在配置中添加忽略規則。app
在Android Studio中setting -> Version Control -> Ignored Files
中配置。ide
but,每次checkout svn上的工程項目都須要從新配置,本着程序是來提升效率的,想着可不能夠編寫腳本使整個自動配置。svn
在Android Studio 配置 Ignored Files 規則後在項目根目錄.idea/workspace.xml
文件<component name="ChangeListManager">
裏面保存添加的忽略規則。gradle
so,咱們只要在workspace.xml
添加相應字段便可達到在setting
中配置忽略規則的效果。ui
import groovy.xml.XmlUtil
def ignoreSvn() {
try {
def ignoredMap = [
["name": "path", value: ".idea/"],
["name": "path", value: ".gradle/"],
["name": "path", value: "gradle/"],
["name": "path", value: "build/"],
["name": "path", value: "gradlew"],
["name": "path", value: "gradlew.bat"],
["name": "path", value: "local.properties"],
["name": "mask", value: "*.iml"],
]
rootDir.list().each { if (file("$rootDir/$it/build").exists()) { ignoredMap.add(["name": "path", "value": "$it/build/"]) } }
File workspaceFile = file("$rootDir/.idea/workspace.xml")
def workspace = new XmlParser().parseText(workspaceFile.getText())
def changeListManager = workspace.component.find { it.attribute("name") == "ChangeListManager" }
if (changeListManager == null) { changeListManager = workspace.appendNode("component", ["name": "ChangeListManager"]) }
ignoredMap.each {
def ignoredNode = changeListManager.ignored.find { ignoredNode -> ignoredNode.attribute(it.name) == it.value }
if (ignoredNode == null) { changeListManager.appendNode("ignored", ["${it.name}" : "${it.value}"]) }
}
PrintWriter pw = new PrintWriter(workspaceFile)
pw.write(XmlUtil.serialize(workspace))
pw.close()
} catch (Exception e) { println "svn ignore error, meesage = ${e.message}" }
}
ignoreSvn()
複製代碼
將上面腳本複製到項目根目錄build.gradle
中底部便可實現自動配置svn忽略規則,每次同步gradle都會檢查規則並配置。google
其中腳本中ignoreMap保存了忽略規則,path描述目錄和文件,mask只能描述文件(這一點比不上.gitignore)idea
注意:因爲腳本在build.gradle
中配置階段執行,這是修改workspace.xml
文件是沒法當即生效,須要gradle sync now
同步一遍才生效。
插件已經編寫完成,按照一下在根目錄build.gradle
配置便可。
repositories
添加jcenter()
dependencies
添加classpath 'com.owm.svn:ignore:1.0.2'
build.gradle
頂部應用插件apply plugin: 'com.owm.svn.ignore'
apply plugin: 'com.owm.svn.ignore'
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.2'
classpath 'com.owm.svn:ignore:1.0.2'
}
allprojects {
repositories {
google()
jcenter()
}
}
複製代碼
將gradle 同步兩下就能夠了。