svn忽略文件的配置文件在哪里_svn忽略classpath

Android (95) 2023-03-24 22:42

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情况下是无法根据配置文件忽略文件,只能在配置中添加忽略规则。

2.1 Ignored Files 配置

在Android Studio中setting -> Version Control -> Ignored Files 中配置。

but,每次checkout svn上的工程项目都需要重新配置,本着程序是来提高效率的,想着可不可以编写脚本使整个自动配置。

svn忽略文件的配置文件在哪里_svn忽略classpath_https://bianchenghao6.com/blog_Android_第1张

2.2 Ignored Files 原理

在Android Studio 配置 Ignored Files 规则后在项目根目录.idea/workspace.xml文件<component name="ChangeListManager"> 里面保存添加的忽略规则。

svn忽略文件的配置文件在哪里_svn忽略classpath_https://bianchenghao6.com/blog_Android_第2张

2.3 Ignored Files 自动化

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()
2.4 脚本使用

将上面脚本复制到项目根目录build.gradle中底部即可实现自动配置svn忽略规则,每次同步gradle都会检查规则并配置。

其中脚本中ignoreMap保存了忽略规则,path描述目录和文件,mask只能描述文件(这一点比不上.gitignore)

注意:由于脚本在build.gradle中配置阶段执行,这是修改workspace.xml文件是无法立即生效,需要gradle sync now同步一遍才生效。

三. svn忽略规则插件

插件已经编写完成,按照一下在根目录build.gradle配置即可。

  1. repositories添加jcenter()
  2. dependencies添加classpath 'com.owm.svn:ignore:1.0.2'
  3. 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 同步两下就可以了。

发表回复