SVN 更改列表我所有的结账

SVN 更改列表我所有的结账

假设我已签出 100 多个文件。有没有一种方法可以将它们全部添加到更改列表中,而无需一一指定它们,或将它们添加到文件中?

答案1

您使用的是操作系统吗?

我将假设Linux。尝试这样的事情:

ls *.c *.h */*.c */*.h | xargs svn cl source

这会将当前子目录和直接子目录中的所有 C 和头文件添加到更改列表源中。上述命令可能会因文件名中的空格而出现问题。对于更复杂的东西,请尝试尺寸:

find . -name .svn -type d -prune -o -type f -print0 | xargs -0 svn cl source

这会将所有不在 .svn 目录下的普通文件添加到更改列表源中。这也适用于文件名中的空格。

答案2

您不太清楚自己想要什么:您说您签出了 100 多个文件,但您想将它们添加到存储库中。我将介绍如何添加工作区中已有的文件以及在工作区中提交修改。

要将目录树添加到已检出的工作副本,请使用svn add --force .它将添加工作副本中从当前目录开始的所有未版本化文件(即使当前目录已版本化)。添加的文件仍需要提交到存储库。

要提交修改,您可以运行svn commit -m "*insert comment here* .它将工作副本中的所有更改从当前目录提交到存储库。

答案3

我通常依靠我的文本编辑器来实现这一点,因为我需要视觉确认我走在正确的道路上。我们在这里使用 vim,但 emacs 同样可以做得很好。

在项目根目录中使用新缓冲区启动 vim

然后在vim里面运行

:r !svn st

这会将输出读取到svn st缓冲区中。您可以查看它以确保它符合您的预期,或者删除更改列表之外的条目。

M project/path/to/file1
M project/path/to/file2
M project/path/to/file3
M project/path2/to/file1
M project/path23/to/file1

然后,您可以使用编辑器魔法将它们转换为命令。例如::

:%s/^M/svn cl change/

这会将上面的行变成

svn cl change project/path/to/file1
svn cl change project/path/to/file2
svn cl change project/path/to/file3
svn cl change project/path2/to/file1
svn cl change project/path23/to/file1

然后您可以将这些命令发送到您的 shell::

:w !bash

这应该会返回快速列表窗口中每个命令的输出。

这可能看起来比其他解决方案更冗长,但是您可以直观地看到整个过程以进行确认(想想 emacs dired 模式),并且由于 svn 无法重写历史记录,这可以防止错误。

这些命令保留在您的前历史记录中,因此您通常不需要再次输入它们,只需从历史记录中调用它们即可。

相关内容