查找未添加到subversion的文件

时间:2010-10-13 18:53:44

标签: svn tortoisesvn

以下问题日益普遍:

  • 有几个开发人员正在处理一个项目,其中包括新文件(通常是图像)
  • 每个人都说一切都已签入,我们冻结了开发。我们不知道,有些图像没有签入。用户没有注意到丢失的文件,因为它们是新的,而不是签出,所以svn看起来很好
  • 编译和部署代码(抱歉,没有QA团队)
  • 第二天,客户告诉我们有关丢失的图片
  • 首席技术官告诉我们骚乱行为

注意:图像路径都在代码和数据库中,因此要获取所有已使用图像的完整列表并不容易。

我希望在部署之前为每个人编写一个小的C#程序。我想找出项目目录中的哪些文件(或其中一个subir.s递归)尚未添加到subversion中。理想情况下,我还想排除积极添加到忽略列表中的项目。

我们正在将TortoiseSVN与Windows主机和客户端一起使用。

如何以编程方式发现未添加的文件?

到目前为止我能找到的最接近的是this说要使用svn status | grep -e ^?,但这看起来像是Unix命令。

6 个答案:

答案 0 :(得分:14)

svn status | grep -e ^?

这是unix命令,但我很确定,如果你从Tortoise执行提交,你可以看到带有问号的新文件,即不受svn控制的文件

答案 1 :(得分:10)

此问题被标记为tortoisesvn,因此我假设您的团队正在使用TortoiseSVN作为客户端。如@Joe Enos所示,TortoiseSVN显示与svn:ignore中的条目不匹配的无版本文件。我想知道添加其他工具是否有帮助,因为团队应该已经使用TortoiseSVN检查未版本控制的文件。

否则,在SVN工作目录中查找未版本控制的文件时,C#程序似乎有些过分。正如@Josh Kelley建议的那样,您可以使用命令行SVN客户端(例如CollabNet或Slik SVN)和grep

您还可以使用Windows命令行中提供的findstr命令:

svn status | findstr "^?"

答案 2 :(得分:7)

  

编译和部署代码   (抱歉,没有QA团队)

这不是真正的问题吗?如果您将未经测试的代码发送给客户,那么当然第一个发现任何问题的人将是客户。也许(除了解决这个特定问题)你需要做的是在构建过程中添加至少一些基本的自动(或手动)功能测试,有时在编译代码和将代码交给客户端之间。

答案 3 :(得分:6)

您可以使用SharpSvn来编写类似的内容:

SvnClient client = GetClient();

client.Status(workingCopyPath, (o, e) =>
{
    if(e.LocalContentStatus == SvnStatus.NotVersioned)
    {
        Console.WriteLine("Not versioned: " + e.FullPath);
    }
});

修改:这也会尊重您的忽略文件和svn:ignore属性。

答案 4 :(得分:1)

您可以安装CollabNet Subversion Command-Line Client,然后将其svn命令作为子进程运行,将其输入传输到您的程序中,并搜索以?作为其第一个字符的行(指示未知/未检入Subversion且未被忽略)。您可以将CollabNet的命令行客户端与TortoiseSVN一起使用。

这与svn status | grep -e ^?的作用相同,但它不依赖于Unix工具。

或者,你可以安装Cygwin并拥有全套的Unix工具。

答案 5 :(得分:0)

此外,您还可以更改一个设置,该设置将显示已修改新文件的文件夹。

设置 - >图标叠加层 - >显示无版本项目的叠加层

右键单击文件夹,然后导航TortoiseSVN - 设置。点击“图标叠加层”'。在右侧检查 - ' Unversioned文件将父文件夹标记为已修改'

这适用于windows7,未尝试过其他操作系统