按扩展名提交文件

时间:2015-04-20 20:02:00

标签: svn

我有一长串*.aspx*.aspx.cs文件,我想一次提交,而不提交其他文件扩展名的其他文件。我目前正在做的是:

svn commit path\to\one.aspx, path\to\two.aspx, path\to\N.aspx.cs -m "Message"

我想做的事情是这样的:

svn commit *.aspx, *.aspx.cs -m "Message"

我担心上述情况不起作用。会怎么样?

编辑:澄清文件存在于子目录中。

我看过Can you specify filenames using wildcards or regexes in the subversion mv command?这是关于移动文件而不提交它。

3 个答案:

答案 0 :(得分:2)

从我对其他答案的评论中,您的问题是您希望SVN以递归方式搜索每个子目录以查找与通配符模式匹配的文件。 SVN不会这样做。 SVN依靠你的shell来扩展通配符。

解决方案取决于您的情况。

如果要提交的所有文件都在同一个公共目录中,只需cd path/to/common/dir并按原样提交(但不要使用逗号)。您可以在工作副本中的任何位置进行提交,但是当您这样做时,只会提交该目录树中的文件。

如果要提交多个目录,则会变得更复杂,具体取决于您运行的操作系统。

类Unix系统有一个**通配符含义" 0或更多目录路径",所以这应该适用于Linux或Unix:

svn commit **/*.aspx **/*.aspx.cs -m "message"

Windows并不了解**通配符,因此您需要在命令行中指定每个通配符。例如(路径分隔符的反斜杠,因为我在这里假设Windows):

svn commit subdir1\*.aspx subdir1\*.aspx.cs subdir2\*.aspx subdir2\*.aspx.cs -m "message"

如果您有太多子目录,只需创建一个列出您要提交的所有文件的文件,并将其用于您的文件列表:

dir /B /S *.aspx *.aspx.cs > file_list.txt
svn commit --targets file_list.txt -m "message"

如果你不喜欢使用**通配符(使用lsfind使用适当的选项而不是{},那么最后一个示例也适用于类Unix系统{1}})。如果您愿意,也可以通过在提交之前修改file_list.txt来编辑提交列表。

编辑:您可以使用"更改列表"而不是文件。存储要提交的文件名。请参阅有关如何构建更改列表的其他答案。

答案 1 :(得分:1)

仅从问题中给出的详细信息中,可以预期它与" *"通配符如下,除非还有其他内容: -

  

/ myrepo / trunk / test> svn commit * .txt * .java -m"次要修改"
  发送New.java
  发送Readme.txt
  发送myfile.txt
  传输文件数据...
   承诺修订15.

您也可以使用svn changelist进行识别: -

  

/ myrepo / trunk / test> svn changelist"文本文件" * .txt
  路径' myfile.txt'现在是变更列表'文本文件'的成员。
  Path' Readme.txt'现在是变更列表'文本文件'的成员。
  / myrepo / trunk / test> svn changelist"文本文件" * .java
  Path' New.java'现在是变更列表'文本文件'的成员。
  / myrepo / trunk / test> svn status
  ---更改列表'文本文件':
  M myfile.txt
          New.java
  M Readme.txt
  / myrepo / trunk / test> svn commit --changelist" text files" -m"次要修改"
  发送测试/ Readme.txt
  发送test / myfile.txt
  传输文件数据
  ..承诺修订16.

注意:如果您可以分享更多详细信息,例如错误消息,那将会很有帮助。

答案 2 :(得分:-1)

忽略逗号;它是不必要的,你的shell只是把它作为文件名的一部分。即你的命令应该简单:

svn commit *.aspx *.aspx.cs -m "message"