TFS get命令错误地返回“所有文件都是最新的”。

时间:2011-01-10 16:58:30

标签: tfs

由于我们已经有足够的TFS,我们正在将我们的TFS回购迁移到Mercurial。不幸的是TFS在它让我们离开之前给了我们最后一个曲线球。我们编写了一个脚本,我们打算“获取”每个变更集(包括时间戳,签到注释等),然后将它们添加到Mercurial仓库并将其签入。

不幸的是,当我们执行tf get * /version:C111 /overwrite命令时,TFS表现得非常奇怪。它会立即返回“所有文件都是最新的”。但这是不可能的。工作区文件夹是空的!并且查看111变更集的详细信息非常清楚地表明变更集包含“内容”,即回购肯定不是空的。

导致这种情况的原因是什么?

13 个答案:

答案 0 :(得分:15)

如果找不到您传入的itemspec,TF将返回“所有文件都是最新的”。如果不包含绝对路径,则假定为相对路径。

例如,如果您发送

tf get myFile.cs /version:1009 /force

它在myFile.cs的当前目录中查找,该目录不存在,因此返回“所有文件都是最新的”。我们真正想要的是

tf get C:\myproject\myFile.cs /version:1009 /force

与通配符相同,例如

tf get D:\project\* /version:C111 /overwrite

查看itemspec链接了解详情。

答案 1 :(得分:14)

你应该尝试/ all而不是/ overwrite,这将强制它获取所有文件,而不仅仅是它记得在之前的get中获取到这个工作区的文件。

MSDN Reference for Get

答案 2 :(得分:8)

您可以“获取最新版本”的“获取特定版本”,而不是“获取最新版本”,并选中“即使本地版本与指定版本匹配也会覆盖所有文件”复选框。这将迫使最新。

答案 3 :(得分:3)

之前我遇到过同样的问题,在拔掉头发之后,唯一能纠正它的是取消映射工作区,删除所有本地文件,然后将工作区重新映射到磁盘 - TFS最后会得到一份新的文件副本。

我们使用TFS 2005,为它的价值 - 我很伤心地听到,这种情况仍然较新版本的出现。如果您找到其他解决方案,请在此处发布,因为我很想知道您是如何解决的。

答案 4 :(得分:2)

我尝试使用/ force,/ recursive,/ all选项并且仍然遇到问题("所有文件都是最新的。")最后我意识到问题是由于映射造成的。所以我删除了映射并重新创建。

我的旧映射(不正确)是使用通配符完成的:

tf workfold $/* C:\DEV

因此,当我列出工作文件夹(tf workspaces / format:detailed)时,它显示如下:

Working folders:

  $//*: C:\DEV

当我重新映射如下时,get命令开始工作:

tf workfold $/ C:\DEV

并且映射显示如下:

Working folders:

  $/: C:\DEV

答案 5 :(得分:1)

我只需解决这个问题:

  1. 获取Tfs power tools。你也可以从工具中获取它>视觉工作室内的加载项管理器。

  2. 要求您关闭visual studio以完成安装。

  3. 完成后,以管理员模式打开命令提示符。

  4. cd到你的分支/解决方案目录。

  5. 运行tfpt scorch(tfpt.exe附带电动工具,如果你没有看到它,重新安装)

  6. 如果发现缺少的东西,它会打开一个对话框。只需点击下一步或确定,它将覆盖与服务器不匹配的任何内容。

答案 6 :(得分:1)

如果您对源没有足够的权限,则可能会发生这种情况。我能够看到整个源代码树,所有文件,但我无法获得最新版本。我想这是允许灵活性达到极端(荒谬?)。为了验证问题不是工作站或映射相关,我尝试查看团队页面上的代码文件并收到:

Image demonstrating lack of access to source file

答案 7 :(得分:0)

您始终可以将“/ force”参数添加到TF GET,以强制它获取所有文件,无论它认为您在本地工作区中拥有什么(它维护服务器上所有工作区文件的版本)。

答案 8 :(得分:0)

看起来有多种方法可以触发此问题。在我的例子中,它处理的是将相对路径传递给生成绝对路径的脚本,然后将该路径传递给tf.exe。这是一个Windows脚本问题,但tf.exe的输出令人困惑。

您真正希望看到tfs返回的是“找不到文件”,而不是“所有文件都是最新的”。

除了这里提出的其他建议外,还要先用echo重新编写命令,仔细检查传递给tf.exe的内容。如果你来自unix / linux背景,那么字符串构建在win32上似乎已经破解了。

broken.bat

SET PARAM1=%1
SET CMD_PATH="c:\path\to\%PARAM1%"
echo %CMD_PATH%

结果:broken.bat“tool.exe”=> “C:\路径\到\” tool.exe “”

fixed.bat

SET PARAM1=%1
REM Strip quotes: http://www.dostips.com/DtTipsStringManipulation.php
for /f "useback tokens=*" %%x in ('%PARAM1%') do set PARAM1=%%~x
SET CMD_PATH="c:\path\to\%PARAM1%"
echo %CMD_PATH%

结果:fixed.bat“tool.exe”=> “C:\路径\到\ tool.exe”

答案 9 :(得分:0)

检查您的工作区。我去上面删除了它(它可能也会修复它)但是我注意到我的项目中的某个项目除了整个工作区之外还分配了它自己的工作区。我从工作区中删除了该项目,并在单击“确定”退出工作区菜单时下载了所有文件。

答案 10 :(得分:0)

我的问题是我从VS 2012工作室运行VS开发人员命令提示符,但我的工作区映射是内部vs 2013.

确保从具有工作空间映射的visual studio目录中运行tf.exe,而不是简单的tf.exe获取“path”/ all / recursive工作正常

答案 11 :(得分:0)

选择未来的日期以获取具体信息:

tf get * /version:D01/01/2099 /recursive /force  /noprompt

答案 12 :(得分:0)

还要确保您在项目集合中的团队项目网站上拥有权限。

就我而言,我可以在TFS源代码管理浏览器中看到项目文件夹和分支,但是我无法访问该项目的TFS网站。

VS并没有返回详细描述权限问题的错误,而是说,当我尝试获取最新版本时,所有文件都是最新的。

相关问题