Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说svn忽略文件的配置文件在哪里_svn忽略classpath,希望能够帮助你!!!。
使用习惯git,用回svn在Android Studio中忽略文件不好使,所以自己撸一个脚本插件来实现自动化忽略svn中的文件。
ps:在网上找过好多文章,几乎千篇一律都是说在commit提交后就无法配置,本文给出解决方案。
svn的忽略文件以安卓项目为例,要忽略以下文件或者文件夹。
*.iml
.idea/
/.gradle
gradle/
gradlew
gradlew.bat
local.properties
# 各个模块下build文件夹
app/build/
使用git很容易配置忽略规则,在项目.gitignore文件中根据需求写入相应配置即可,但是使用svn情况下是无法根据配置文件忽略文件,只能在配置中添加忽略规则。
在Android Studio中setting -> Version Control -> Ignored Files
中配置。
but,每次checkout svn上的工程项目都需要重新配置,本着程序是来提高效率的,想着可不可以编写脚本使整个自动配置。
在Android Studio 配置 Ignored Files 规则后在项目根目录.idea/workspace.xml
文件<component name="ChangeListManager">
里面保存添加的忽略规则。
so,我们只要在workspace.xml
添加相应字段即可达到在setting
中配置忽略规则的效果。
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都会检查规则并配置。
其中脚本中ignoreMap保存了忽略规则,path描述目录和文件,mask只能描述文件(这一点比不上.gitignore)
注意:由于脚本在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 同步两下就可以了。