本地副本中已修改的文件的SVN列表

60

我使用Tortoise客户端来检出/提交我的更改到SVN。但我发现这有点困难,因为我无法找到在我的本地副本中修改的所有文件的列表。是否有任何快捷方式或我忽略了什么?

我是SVN的新手。FYI。


也许管理员可以整理一下这个帖子,因为这里有大约10篇帖子都包含了相同的答案。 - Daniel W.
12个回答

124

我不熟悉tortoise,但对于在linux上使用subversion,我会输入以下命令

svn status

通过一些搜索,我发现乌龟还支持命令行命令,在包含svn仓库的文件夹中尝试执行svn status。


9
Windows命令行客户端具有相同的命令,因此即使您使用cmd,也可以使用它。 - DeadHead
24
只显示目录中已修改的文件:svn status -q - Kevin
2
@BrokenLink svn安装包含您想要的所有二进制文件。不要总是依赖UI界面,这会很痛苦且耗时。 - sarat
@sarat,“这可能会很痛苦且耗时。” 非常同意!对于某些事情,我使用图形客户端(Tortoise SVN),但对于像报告这样的事情,CLI 更好,因为更容易捕获报告并发送给某人进行审查。 - David A. Gray

45

我无法让svn status -q正常工作。假设你正在一个Linux系统上,如果想要只看到已修改的文件,请输入以下命令:svn status | grep 'M ' 在Windows上我不确定该怎么做,也许可以使用'FindStr'。


10
svn st | grep ^M 更短 :) (该命令用于在 SVN 版本控制系统中查找所有已修改的文件,这里使用了管道符和 grep 工具来筛选出以 "M" 开头的行,表示已修改状态。原文指出此方法更为简洁。) - kliteyn
2
svn st|grep ^M 这个命令更加简短,但是除非问题明确要求使用代码高尔夫方式回答,否则我不会在Stackoverflow上这样回答任何问题。@DavidRivers 的回答最好。 - IceArdor

31

"TortoiseSVN" 中的 "Check for Modifications" 命令可以显示工作副本中所有已修改的文件列表。而 "Commit" 命令则会显示所有已修改的文件 (您随后可以进行提交)。"Revert" 命令也会显示已修改的文件 (您随后可以进行还原)。


啊!我忘记尝试“检查修改”了。 - Broken Link
今天我知道了乌龟有一个“检查修改”的功能 :) 非常感谢。 - luis.espinal

10
以下命令将仅显示在Windows中已修改的文件。
svn status | findstr "^M"

在Windows中,我使用PowerShell并执行以下操作:svn status | Where-Object {$_.StartsWith("M")} - Raj

7
如果你只想列出已修改的文件,可以通过在svn st输出中添加"M"来减少输出。我会这样做:
svn st | grep ^M

6
在MacOSX上,svn status | grep 'M ' 命令可以正常工作。我刚刚进行了测试。

从命令行来看,这是我的起步解决方案。但是 OP 要求使用 TortoiseSVN 的解决方案。 - luis.espinal
这只显示了文件的更改,但没有显示文件中的更改。 - Daniel W.
顺便说一下,这是一个重复的答案,2014年已经由尼尔斯发布了相同的内容。 - Daniel W.
or svn status | grep ^M - Paul Rooney

2

如果您只想要文件名,并且还想获取已添加的任何文件(A)。

svn st | grep ^[AM] | cut -c9-

注意:前7列每列只有一个字符宽度,后跟一个空格和文件名。

1
这应该可以在Windows中完成: svn stat | find "M"

0

如上所述,您需要在GUI中使用SVN Check for modification并在CLI中使用tortoiseproc.exe /command:repostatus /path:"<path-to-version-control-file-or-directory>"来查看与<path-to-version-control-file-or-directory>的根目录相关的更改。

不幸的是,但此命令不会显示ALL本地更改,它只显示与请求目录根相关的更改。单独获取的更改,例如独立检出或根子目录中的孤立外部目录将显示为未版本化嵌套,您可能会错过提交/查找它们的机会。

为了避免这种情况,您必须调用 tortoiseproc.exe /command:repostatus /pathfile:"<path-to-file-with-list-of-items-to-lookup-from>"(有关命令行的详细文档,请参见:https://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-automation.html),或使用一些第三方应用程序/实用程序/脚本来包装调用。
我已经编写了自己的一组脚本用于 Windows 来自动化从 Total Commander 调用:

https://github.com/andry81/tacklebar/tree/HEAD/src/scripts/scm/tortoisesvntortoiseproc_by_nested_wc.bat

https://github.com/andry81/contools/tree/HEAD/Scripts/Tools/ToolAdaptors/vbs (call_nowindow.vbs)

- 打开 TortoiseSVN 状态对话框以查看一组工作副本目录(始终打开以显示未版本化的更改)。

Command:   call_nowindow.vbs
Arguments: tortoisesvn\TortoiseProcByNestedWC.bat /command:repostatus "%P" %S

- 打开 TortoiseSVN 提交对话框以针对一组工作副本目录(仅在存在未提交的版本更改时才打开)。

Command:   call_nowindow.vbs
Arguments: tortoisesvn\TortoiseProcByNestedWC.bat /command:commit "%P" %S

请查看 README_EN.txt 获取最新详情(在使用前必须执行 configure.bat 并自行复制其他脚本,例如 call_nowindow.vbs)。

0

你可以使用Powershell实现这个功能:

# Checks for updates and changes in working copy.
# Regex: Excludes unmodified (first 7 columns blank). To exclude more add criteria to negative look ahead.
# -u: svn gets updates
$regex = '^(?!\s{7}).{7}\s+(.+)';
svn status -u | %{ if($_ -match $regex){ $_ } };

这将包括属性更改。这些显示在第2列中。它还会捕获在第3-7列中显示的文件中的其他差异。

来源:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接