是否可以跳过某些文件在SVN中提交?

时间:2014-12-29 11:15:54

标签: svn version-control

我在Ruby on Rails项目中使用SVN。我更改了一些文件。

我通常使用以下方式提交更改:

svn commit -m "test_commit"

可以使用以下方式提交单个文件:

svn ci -m "test_commit" file1 file2 dir/file3

但在这种情况下,我有近40个文件要提交。因此,添加所有文件位置是一项繁琐的任务。

所以我想跳过几个文件然后提交它。在SVN中可以吗?

2 个答案:

答案 0 :(得分:1)

您可以在Subversion中创建更改列表。更改列表是一种为常见操作分组文件的方法。 svn commitsvn revertsvn status等命令以及各种属性命令都可以在更改列表中运行。

要创建更改列表,请使用svn changelistsvn cl命令:

$ svn changelist <change_List_Name> <file> [<file2....>]

如果文件太多,您可以使用--targets参数指定一个文件,其中包含您要放入更改列表的文件列表:

$ svn changelist --targets <file_name>

例如,您可以使用`

创建更改列表文件
  

file.txt then edit that file.txt`仅包含您要提交的文件。

然后,使用:

$ svn commit --changelist <change_list_name>

只提交您想要的文件。或者,

$ svn commit --cl --keep-changelists

保留文件的更改列表,以防你对它们做更多的工作。

当然,您可以忘记更改列表,只需尝试--targets命令的svn commit参数即可。这假设允许您列出要在另一个文件中提交的文件(很像--targets参数如何与svn changelist一起使用)。我没有尝试过那个特别的,所以我不能说它是如何运作的。


附录

  

请你用另一个例子解释'svn changelist --targets'吗?

想象一下,我有一份工作副本,我在其上运行svn st

$ svn st
? foo.txt
M bar/bar.txt
D foofoo/foo.out
A barfu/barbar.sh

我正在修复Bug#103。这包括对foofoo/foo.outbar/bar.txt的更改,但不包括barfu/barbar.sh的更改,这是我正在处理的另一个错误。

如果我运行以下内容:

$ svn status | awk '/^[MDA]/ {print $2}'
bar/bar.txt
foofoo/foo.out
barfu/barbar.sh

请注意,它为我提供了在我的工作副本中修改,删除和添加的文件,但不包括工作目录中不在repo中的文件或repo中的文件,但不包含在工作副本中。这也没有给我一个文件的状态 - 只是文件名。我想为Bug#103创建一个更改列表,因此我将创建一个名为bug103.txt的文件,然后编辑它以删除不应该存在的文件:

$ svn status | awk '/^[MDA]/ {print $2}' > bug103.txt

使用我最喜欢的文本编辑器,从我的`bug103.txt中删除了所有不属于Bug#103的文件:

$ cat bug103.txt
bar/bar.txt
foofoo/foo.out

现在我将所有在我的更改列表中处理Bug#103的文件放在一个名为bug103.txt的文件中,我将为Bug#103创建更改列表:

$ svn cl --targets bug103.txt BUG103

现在,我可以使用更改列表来操作文件的状态。我们来看看这个变更清单:

$ svn --cl BUG103 -m"Fixed BUG #103"

这会检查Bug#103中涉及的两个文件,但不会检查barfu/barbar.sh

答案 1 :(得分:0)

如果您不想更新的文件位于同一目录下,您可以输入第一个不包含它们的目录,然后从那里推送svn:

svn commit -m "comment"

之前尝试svn status,这样你就可以确定自己在推动什么了。