查找未添加到subversion的文件

Din*_*nah 18 svn tortoisesvn

以下问题日益普遍:

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

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

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

我们正在使用TortoiseSVN与Windows主机和客户端.

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

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

Enc*_*ncy 14

svn status | grep -e ^?
Run Code Online (Sandbox Code Playgroud)

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


Jai*_*oto 11

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

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

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

svn status | findstr "^?"
Run Code Online (Sandbox Code Playgroud)


Jer*_*ner 7

编译和部署代码(对不起,没有QA团队)

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


San*_*ken 6

您可以使用SharpSvn,并编写如下内容:

SvnClient client = GetClient();

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

编辑:这也将尊重您的忽略文件和svn:ignore属性.