2010-10-13 58 views
15

以下问题的文件正在变得越来越普遍:查找不加入颠覆

  • 有几个开发商在一个项目上,其中包括新的文件(通常为图片)
  • 大家都说,一切都在检查和工作我们冻结发展。 。Unbeknownst对我们来说,就是那些没有在检查图像,因为它们是新的用户不会注意到丢失的文件,而不是签出,所以SVN看起来很好
  • 的代码被编译和部署(抱歉,没有QA团队)
  • 第二天,客户告诉我们将缺少的图片
  • 的CTO阅读我们暴动行为

注:图像路径都在代码和数据库,所以它不容易获取所有使用的图像的完整列表。

我希望是写给大家部署之前运行一个小的C#程序。我想知道项目目录中的哪些文件(或者它的一个subdir.s,递归地)没有被添加到subversion中。理想情况下,我还想排除积极添加到忽略列表中的项目。

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

如何以编程发现无添加的文件?

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

+4

不是一个答案,但是当我通过龟承诺,我总是有“显示未版本控制文件“复选框。这会显示目录中尚未添加的每个文件,并提醒我检查它们。一次您可以忽略要忽略的东西(.suo,.user,ReSharper文件等),并且它将防止这种情况使用diff数据,只留下真正的未签入文件。 – 2010-10-13 19:02:46

+5

这听起来像是一个人的问题给我。 “每个人都说所有东西都被检入”是不够的,下一个打破构建的人应该支付10美元(为团队存钱)。创建一个工具来检查另一个工具是否正确使用听起来很错误。 – 2010-10-13 19:04:58

+4

无论我们多努力尝试,至少有时候我们会打破构建。 (努力工作,我们永远不会破坏它是浪费时间)。这是个好问题,因为根据我的经验,#1签入错误缺少新文件。 – doug65536 2012-12-20 05:01:01

回答

6

您可以使用SharpSvn对于这一点,并写类似:

SvnClient client = GetClient(); 

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

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

+0

感谢您的提示。这个库看起来可能正是我需要的。由于缺乏文档或例子,我无法弄清楚如何使用它,但我会继续玩弄它。 – Dinah 2010-10-13 19:30:30

13
svn status | grep -e ^? 

它的Unix命令,但我敢肯定,比如果你执行从龟犯,你都能够看到问号新文件,是不属于SVN控制下的文件

+1

在Tortoise中搜索带问号文件不是该问题的程序化解决方案。 – 2010-10-13 19:01:41

+1

我只是想表明,在不同的地方可能会出现问题... – Ency 2010-10-13 19:05:12

+0

不管怎样,发现这个有帮助! – Rob 2013-04-03 10:26:57

1

你可以它的输入端安装CollabNet Subversion Command-Line Client,然后运行它svn命令作为一个子进程,管到你的程序,并寻找有?作为他们的第一个字符线(指示未知/未检查到颠覆,而不是忽略)。您可以使用CollabNet的命令行客户端以及TortoiseSVN。

这是同样的事情,svn status | grep -e ^?做,但它不依赖于Unix工具。

或者,你可以只安装Cygwin,并具有全方位的Unix工具在您的处置。

7

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

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

+1

我当然不能在这里与你争论,但我在这件事上的权力是非常有限的。 – Dinah 2010-10-13 19:07:40

+1

您的开发人员在没有测试时正在受苦。测试让你免于触摸事物的恐惧。 – doug65536 2012-12-20 05:05:30

8

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

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

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

svn status | findstr "^?" 
+0

findstr技巧非常棒!感谢你,我现在有一个批处理文件,可以告诉我在某些修订之间添加或删除的每个文件。 'svn diff -r REVNO:HEAD --summarize | findstr“^ A”> AddedFiles.txt' 'svn diff -r REVNO:HEAD --summarize | findstr“^ D”> DeletedFiles.txt' 只需将REVNO和HEAD更改为您喜欢的范围即可。也感谢这页:http://muffinresearch.co.uk/archives/2008/09/15/svn-tip-get-list-of-files-changed-between-revisions/ – 2012-07-04 11:20:25

+0

我跑这个命令什么也没有显示svn status | findstr“^?” – HaBo 2016-04-06 11:07:18

0

你也可以改变一个设置,这将显示有新添加的文件夹进行修改。

设置 - >图标Overlays->显示叠加未版本控制项目

右键单击文件夹,然后导航TortoiseSVN的 - 设置。点击'图标叠加'。在右侧的检查 - “版本的文件,标志着父文件夹的修改”

这适用于Windows7的,没试过与其它OS