在Team Foundation Server中查找未添加的文件

时间:2009-01-27 16:04:44

标签: version-control tfs

我们正在使用团队基础服务器进行源代码管理。我经常将文件放入我的项目(在源代码管理下),并且就TFS而言忘记“添加”它们。在某些情况下,TFS不会获取新文件(在项目中复制和粘贴文件)。

有没有办法可以列出所有未标记为“添加”的文件,以便我可以验证所有预定的签到都会发生?

这让我抓狂!我们还没有为这个项目设置持续集成,而且我一直在丢失文件。直到有人问我文件在哪里,我才发现。

在Subversion中,这很简单。

我知道一个解决方案是签出第二个副本,但这不是一个最佳的解决方法。

9 个答案:

答案 0 :(得分:65)

转到Source Control Explorer,右键单击您感兴趣的文件夹,然后选择比较。

这将显示未添加的文件以及未经先检出而修改过的文件。

此解决方案不需要Power Tools

答案 1 :(得分:17)

您可能希望确保安装了最新版本的TFS客户端(VS 2008 SP1),这样可以更轻松地处理文件。另外,请查看TFS Power Tools - 尤其是tfpt在线命令。

tfpt命令行有一堆方便的TFS实用程序。安装TFS电动工具后,在Visual Studio 2008命令提示符下键入“tfpt help”以获取列表。如果您在解决方案的根目录中执行“tfpt online / r”,它将检测可在本地文件系统中写入的文件,并为它们添加或编辑。您可能希望限制命令,使其仅查找源文件 - 例如“tfpt online / r * .cs”。

答案 2 :(得分:11)

是的。导航到Source Control Explorer。单击您感兴趣的项目。单击“将项目添加到文件夹”按钮。它是刷新按钮的两个结束。这将为您提供文件夹中但未添加到源代码管理中的所有文件的列表。

答案 3 :(得分:3)

'灵感'来自this answer

TFS Power Tools )现在有Windows Shell Extensions,因此您只使用Windows资源管理器来操作源代码控制文件。

你所选择的选项是与工作区版本比较 - 这也是递归工作的,并且允许选择性地添加/删除等等(是的,tf.exe可能具有等价物)

alt text http://blogs.msdn.com/blogfiles/bharry/WindowsLiveWriter/PreviewofthenextTFSPowerToolsrelease_72E3/image_thumb_11.png

alt text http://blogs.msdn.com/blogfiles/bharry/WindowsLiveWriter/PreviewofthenextTFSPowerToolsrelease_72E3/image_20.png

答案 4 :(得分:3)

在VS 2015中,这帮助我将文件添加到版本控制

  1. 打开"将项目添加到文件夹..."源代码管理资源管理器中的上下文菜单项

  2. 添加必要的文件

  3. screenshot

答案 5 :(得分:1)

如果您使用的是Visual Studio,则可以右键单击解决方案资源管理器中的文件夹,然后选择Add > Existing item。不幸的是,生成的“添加文件对话框”不会自动范围到您单击的文件夹。

但是,解决方案资源管理器中还有一个名为“显示所有文件”的按钮。单击此项后,将显示项目中未包含的文件,并获得“包含在项目中”上下文菜单项。包括它们通常会将它们自动地添加到TFS的“待定更改”列表中。

enter image description here

Source。)

答案 6 :(得分:0)

像Microsoft一样迁移到git:)

答案 7 :(得分:0)

对于Visual Studio 2017,这仍然是一个问题,但很容易修复: 导航到:解决方案浏览器 刷新圆形箭头右侧的第二个按钮是:显示所有文件 点击

所有文件都会淡出但可见。右键单击每个,然后选择“ INCLUDE in PROJECT”

一切完成后,蜗牛将投诉信寄给Microsoft

答案 8 :(得分:0)

如果我正确理解您的问题,以下 Powershell 脚本会吐出尚未添加的文件:

[hashtable] $lps = [hashtable]::new()

tf info . -recursive | findstr /r /c:"^  Local path :" | foreach-object {
    $lp = $_ -replace '^  Local path : ', ''
    if ($lp) {
        $lps[$lp.toLower()] = $null
    }
}

get-childItem -recurse | foreach-object {
    if (-not $lps.ContainsKey($_.fullName.toLower())) {
       (resolve-path -relative $_.fullName).toString()
    }
}