我需要在svn中添加一些文件:从命令行中忽略。
但是我需要在不删除svn:ignore属性的先前值的情况下执行此操作。如果我使用命令:
svn propset svn:ignore "*.jar" .
它设置了正确的忽略值但删除了之前的每个值,这不是我想要的。
使用svn propedit
不适合我,因为我需要从Ant脚本执行此操作。
编辑:可移植性对我来说不是问题(我必须在Windows上工作)但我无法安装第三方Ant库,我只有Subversion命令行。
提前感谢任何提示。
最终编辑:对enyone感兴趣,我以这种方式在Ant脚本中实现了建议的解决方案:
<!-- Read current values and write them to a file -->
<exec executable="svn" output="${build}/current-props-file">
<arg value="propget" />
<arg value="svn:ignore" />
<arg value="." />
</exec>
<!-- Reload the file, stripping away the value possibly already present to avoid duplicate -->
<loadfile srcfile="${build}/current-props-file" property="cleaned-props">
<filterchain>
<linecontains negate="true">
<contains value=".jar" />
</linecontains>
</filterchain>
</loadfile>
<echo message="cleaned-props: ${cleaned-props}" />
<!-- Create file with final values to set -->
<echo file="${build}/cleaned-props-file" message="${cleaned-props}*.jar" />
<!-- Set property values -->
<exec executable="svn">
<arg value="propset" />
<arg value="svn:ignore" />
<arg value="--file" />
<arg value="${build}/cleaned-props-file" />
<arg value="." />
</exec>
答案 0 :(得分:1)
您是否尝试过svnant任务?您可以使用它将SVN客户端功能直接集成到Ant构建中。它还有一个ignore task,看起来就像你想做的那样。
答案 1 :(得分:1)
您可以在更新之前读取svn:ignore的值,然后在此值后附加一个新行并设置新值:
$ ignores=$(svn propget svn:ignore .)
$ ignores="$ignores"$'\n'"*.jar"
$ svn propset svn:ignore "$ignores" .
您还可以使用临时文件存储旧值:
$ svn propget svn:ignore . > /tmp/ignores
$ echo "*.jar" >> /tmp/ignores
$ svn propset svn:ignore -F /tmp/ignores .
$ rm -f /tmp/ignores
但是,由于您要从Ant脚本执行此代码,我建议使用SVNKit实现该功能。代码应如下所示:
File target = new File("");
SVNWCClient client = SVNClientManager.newInstance().getWCClient();
SVNPropertyData oldValue = client.doGetProperty(
target,
SVNProperty.IGNORE,
SVNRevision.WORKING,
SVNRevision.WORKING
);
String newValue = SVNPropertyValue.getPropertyAsString(oldValue.getValue()) +
'\n' + "*.jars";
client.doSetProperty(
target,
SVNProperty.IGNORE,
SVNPropertyValue.create(newValue),
false,
SVNDepth.EMPTY,
ISVNPropertyHandler.NULL,
Collections.emptyList()
);
为了从蚂蚁脚本运行此代码,请将其放入某些类IgnoresUpdate的main方法中。编译并为脚本提供.class文件。然后你可以按如下方式调用它:
<java classname="IgnoresUpdate" fork="true">
<classpath>
<pathelement location="/path/to/compiled/IgnoresUpdate"/>
<pathelement location="/path/to/svnkit.jar"/>
</classpath>
</java>
但是,正如David中指出his answer,您可以使用ignore task,这似乎是一般的最佳解决方案(尽管它可能不适用于您的情况)。