【问题标题】:TFS get <file> removes pre-existing local copies of <file>TFS get <file> 删除 <file> 的预先存在的本地副本
【发布时间】:2013-09-21 07:04:00
【问题描述】:

我正在将基于 VSS 的旧版构建脚本移植到 TFS。该脚本将文件从多个服务器位置获取到不同的目录...为了使其在 TFS 中使用相同的结构,我经常映射和取消映射特定的工作文件夹。

这似乎有效,直到脚本将相同的服务器文件放入两个不同的本地文件夹中。即使以前的工作文件夹未映射,TFS 也会移动文件的现有副本,而不是获取第二个副本。

例如:

  1. cd dir1
  2. tf 工作文件夹 /map $/SOME_PATH .
  3. tf get file.abc /all
  4. tf 工作文件夹 /unmap .
  5. cd..\dir2
  6. tf 工作文件夹 /map $/SOME_PATH .
  7. tf get file.abc /all
  8. tf 工作文件夹 /unmap .

在第 7 行,我得到“替换 file.abc(从 c:\dir1 移动)”,最后只有一个 file.abc 副本。

我知道我们的流程对 TFS 不友好,但现在我只想让它正常工作,这样我们就可以放弃 VSS,然后专注于之后的重组。有没有办法阻止这种行为,或者我可以使用一种不会完全改变我们流程的解决方法?

【问题讨论】:

  • 可以使用两个工作区吗?每个目录都有一个工作区可以避免这个问题。
  • 没有。东西到处都被复制了,所以我需要大量的 WS 并跟踪哪些是在哪里使用的;)不太实用。

标签: tfs


【解决方案1】:

我会怎么做才能让它快速工作:

  1. Cd Dir1
  2. tf 工作文件夹 /map $/SOME_PATH
  3. tf get file.abc /all
  4. 将 file.abc 复制到临时位置
  5. tf 工作文件夹 /unmap
  6. cd..\dir2
  7. tf 工作文件夹 /map $/SOME_PATH
  8. tf get file.abc /all
  9. 将文件从临时位置复制到 dir1
  10. tf 工作文件夹 /unmap

【讨论】:

  • 是的,我正在考虑先对临时位置做一个更完整的get,比如“本地回购”,然后修改脚本,所以每次我看到get,我都会做一个复制。
  • 我也会这样做,只是我们正在处理一些包含数千个文件的非常大的工作文件夹,这将大大增加脚本运行所需的时间。我最终改为重命名,它似乎有效。在下一次“ft get”中,TFS 说它正在移动文件但没有,因为我重命名了原始文件夹,所以 TFS 找不到它。
【解决方案2】:

我认为您无法在 TFS 中实现这一点。如果您删除工作区映射,它将删除文件。如果您尝试将同一个文件映射到 2 个位置,则会出现错误。

您需要修复构建过程。短期解决方案可能是获取文件一次,然后将其复制到需要的任何其他位置。否则我认为您需要硬着头皮将构建过程重构为更简单。无论您使用什么系统,从长远来看,简化您的构建都会对您有所帮助。

【讨论】:

  • "如果您删除工作区映射,它将删除文件" 它不会删除文件...如果以前的 get 将它们放在不同的工作文件夹中,它会移动它们。我不确定这是否是您的意思,它读起来就像您说删除映射的行为会导致当时删除文件,但事实并非如此。
  • @John 实际上,如果您删除映射并且不添加新映射,则会删除它们。在您的情况下,它会将其优化为一个动作。
  • 我的意思是,如果您更改映射,下一次“获取”时,TFS 将更新您的工作区代码副本以匹配它认为您应该拥有的 - 如果您移动映射,则文件“移动”。如果您删除映射以使该文件未映射到任何位置,则该文件将被删除。当然,您可以更改映射并在 TFS 询问您是否要“获取”以更新所有内容时说“不”,这样磁盘上的文件不会立即受到影响,但更改仍会在您下次“获取”时发生更新您的工作区。
  • Jason 更清楚...它会在删除映射后下次获取删除它们 - 删除映射本身不会影响您的本地文件。
  • 正确。如果您更改 UI 中的映射,它会询问您是否要更新工作区以反映更改,如果您接受默认选项,它会立即获取。
【解决方案3】:

我遇到了同样的问题,在网上找不到答案,所以我想出了解决方案并写了一篇博文:http://www.softwarepronto.com/2013/09/getting-multiple-labels-from-tfs-using.html

如果你不想看博客,解决办法是在不同的目录中创建工作区(见下文):

MKDIR D:\ATest

CD /D D:\ATest

tf workspace /delete WorkSpaceATest /noprompt

tf workspace /new WorkSpaceATest /noprompt

tf workfold /map $/ATest D:\ATest /WorkSpace:WorkSpaceATest

tf get /version:LATest01

MKDIR D:\BTest

CD /D D:\BTest

tf workspace /delete WorkSpaceBTest /noprompt

tf workspace /new WorkSpaceBTest /noprompt 

tf workfold /map $/BTest D:\BTest /WorkSpace:WorkSpaceBTest

tf get /version:LBTest01

【讨论】:

    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 2015-07-16
    • 2021-06-20
    • 1970-01-01
    • 2011-12-25
    • 2023-04-09
    • 1970-01-01
    • 2013-02-27
    相关资源
    最近更新 更多