我在Ruby on Rails项目中使用SVN。我更改了一些文件。
我通常使用以下方式提交更改:
svn commit -m "test_commit"
可以使用以下方式提交单个文件:
svn ci -m "test_commit" file1 file2 dir/file3
但在这种情况下,我有近40个文件要提交。因此,添加所有文件位置是一项繁琐的任务。
所以我想跳过几个文件然后提交它。在SVN中可以吗?
答案 0 :(得分:1)
您可以在Subversion中创建更改列表。更改列表是一种为常见操作分组文件的方法。 svn commit
,svn revert
,svn status
等命令以及各种属性命令都可以在更改列表中运行。
要创建更改列表,请使用svn changelist
或svn 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.out
和bar/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
,这样你就可以确定自己在推动什么了。