TFS获取<;文件>;删除<;文件>;

TFS获取<;文件>;删除<;文件>;,tfs,Tfs,我正在将传统的基于VSS的构建脚本移植到TFS。脚本将文件从多个服务器位置获取到不同的目录中。。。为了在TFS中使用相同的结构,我经常映射和取消映射特定的工作文件夹 这似乎是可行的,直到脚本将相同的服务器文件放入两个不同的本地文件夹。即使以前的工作文件夹未映射,TFS也会移动文件的现有副本,而不是获取第二个副本 e、 g: cd-dir1 tf workfold/map$/SOME\u路径 tf get file.abc/all tf工作折叠/取消映射 cd..\dir2 tf workfold

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

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

e、 g:

  • cd-dir1
  • tf workfold/map$/SOME\u路径
  • tf get file.abc/all
  • tf工作折叠/取消映射
  • cd..\dir2
  • tf workfold/map$/SOME\u路径
  • tf get file.abc/all
  • tf工作折叠/取消映射
  • 在第7行,我得到了“替换file.abc(从c:\dir1移动)”,最后只得到了file.abc的一个副本


    我知道我们的流程对TFS不友好,但现在我只想让它工作起来,这样我们就可以放弃VSS,然后集中精力重新构建。有没有一种方法可以阻止这种行为,或者我可以使用一种不会完全改变我们流程的变通方法?

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


    您需要修复构建过程。一个短期解决方案可能是获取一次文件,然后在需要时将其复制到任何其他位置。否则,我认为您需要咬紧牙关,将构建过程重构得更简单。无论您使用的是什么系统,简化您的构建都将在长期内对您有所帮助。

    我将如何快速实现此功能:

  • Cd-Dir1
  • tf workfold/map$/SOME\u路径
  • tf get file.abc/all
  • 将file.abc复制到临时位置
  • tf工作折叠/取消映射
  • cd..\dir2
  • tf workfold/map$/SOME\u路径
  • tf get file.abc/all
  • 将文件从临时位置复制到dir1
  • tf工作折叠/取消映射

  • 我也有同样的问题,但在网上找不到答案,所以我找到了解决办法,并写了一篇博文:

    如果您不想阅读博客,解决方案是在不同的目录中创建工作区(见下文):


    你能使用两个工作区吗?每个目录有一个工作区可以避免此问题。否。所有东西都会被复制,因此我需要大量的WS,并跟踪在何处使用的;)不太实用。“如果删除工作区映射,它将删除文件”它不会删除文件。。。如果以前的
    get
    将它们放在不同的工作文件夹中,则会移动它们。我不确定这是否是你的意思,它读起来就像你说删除映射的行为会导致文件在当时被删除,事实并非如此。@John事实上,如果你删除映射而不添加新的映射,它会删除它们。在您的情况下,它优化了这一点,使之成为一个移动。我的意思是,如果您更改映射,下一次“获取”时,TFS将更新您的工作区代码副本,以匹配它认为您应该拥有的内容—如果您移动映射,文件将“移动”。如果删除映射,使文件不映射到任何位置,则文件将被删除。当然,当TFS询问您是否希望“获取”更新所有内容时,您可以更改映射并说“否”,这样磁盘上的文件不会立即受到影响,但更改仍将在您下次“获取”更新工作区时发生。这更清楚了。。。下次删除映射后,它会删除它们-删除映射本身不会影响本地文件。正确。如果您更改UI中的映射,它会询问您是否要更新工作区以反映更改,如果您接受默认选项,它会立即获取。是的,我正在考虑首先对临时位置执行更完整的
    get
    ,如“本地回购”然后修改脚本,每次看到
    get
    时,我都会复制一份。我也会这样做,只是我们正在处理一些包含数千个文件的非常大的工作文件夹,这会大大增加脚本运行所需的时间。我最终做了一个更名,它似乎起了作用。在下一个“ft get”中,TFS说它正在移动文件,但没有移动,因为我已重命名了原始文件夹,所以TFS找不到它。
    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