Subversion:仅提交修改过的文件

时间:2008-11-13 20:15:22

标签: svn version-control command-line

我想提交大量已修改过的XML文件。但是,在我想要递归搜索的目录中,有许多文件夹/文件已在本地添加,这些我不想提交。

有没有办法在命令行上执行此操作?

更新:我应该包含SVN版本信息:svn,版本1.4.6(r28521),编译于2008年3月11日,08:26:35

P.S。我会对包括如何强制提交的答案感兴趣,例如:即使文件已被锁定。

3 个答案:

答案 0 :(得分:4)

您是否尝试在本地文件/文件夹上使用svn:ignore属性?但除非你添加它们,否则它们不会被提交......

通常--force会允许你窃取文件锁。

答案 1 :(得分:3)

您没有指定哪个命令行,因此假设为UNIX或cygwin。

一些选择:

  1. find . -name '*.xml' -print0 | xargs -0 svn ci
  2. svn status | egrep '^M.*\.xml$' | sed -e 's/^. *//' > tmp.txt && svn ci --targets tmp.txt
  3. svn status > tmp.txt && $EDITOR tmp.txt && sed -e 's/^. *//' < tmp.txt > tmp2.txt && svn ci --targets tmp2.txt
  4. 注意:我没有测试过命令。

    第一个将提交所有XML文件(包括您最近添加的文件 - 如果您尚未添加新的xml文件,则不会出现问题)。

    第二个提交所有修改过的xml文件。

    第三个允许您在提交之前修改文件列表。只需删除您不想提交的所有行。你可能更自在地完成每个命令,而不是像我一样将它们连在一起(拆分为&amp;&amp;)。

    至于锁定,还有另一条评论似乎涵盖了大部分内容。

答案 2 :(得分:2)

编辑:我根据您在问题中更新的一些信息重写了这个答案。

首先,要强制解锁文件,仅仅 - 强制提交是不够的。您可以在解锁命令中使用--force,并且必须在要解锁的确切URL上使用它。不幸的是,除非您有权访问存储库,否则这是唯一的方法。如果可以直接访问存储库,则可以使用此处显示的svnadmin命令:

svnadmin lslocks /path/to/repository

这将显示锁定的文件。解锁:

svnadmin rmlocks /path/to/repository /project/path/to/locked/file

如果您无法直接访问存储库,则可以一次删除一个锁:

svn --force unlock svn://url.to.repository/project/path/to/locked/file

准备好登记后,您可以直接列出要签入的文件,而不仅仅是执行默认目录。这将允许您仅检入修改后的XML文件,同时忽略目录结构更改,添加或其他您不想签入的其他内容(添加解锁示例):

svn --force unlock svn;//url.to.repository/project/janes_subdir/jane.xml
svn ci -m "Whatever Log" foo.xml junk.xml my_subdir/*.xml janes_subdir/jane.xml