假设我已签出 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 无法重写历史记录,这可以防止错误。
这些命令保留在您的前历史记录中,因此您通常不需要再次输入它们,只需从历史记录中调用它们即可。