如何在使用TFS中的GET的文件上保留服务器更改时间戳?

时间:2018-06-29 21:11:17

标签: tfs version

我正在TFS 2013环境中使用workspace.get()。它运行完美,但是,已下载文件的时间戳设置为当前时间戳。

是否可以获取文件并将文件时间戳设置为服务器上的签入时间或实际文件编辑时间?

我试图在Google以及Stackoverflow上寻找答案。我找到的最接近的东西是MSDN上的一个线程,没有一个确定的答案。

希望有人可以对此提供快速解答。

谢谢您的帮助。

2 个答案:

答案 0 :(得分:0)

默认情况下,从远程存储库中检索文件时,TFS会将文件时间写入“ 当前”时间。这是大多数版本控制工具的默认行为,通常被认为是安全的。

  

将时间设置为远程时间可能会对许多人产生负面影响   场景。例如,make将扫描比上一个更新的文件   建立时间。将文件时间设置为服务器时间可能会影响   可以确定自上次构建以来哪些文件已更改。

但是,如果要获取文件并将文件时间戳设置为签入时间,则可以通过设置“ 文件时间< / strong>”到“ 签入”:

Manage Workspaces... -> Select the specific workspace -> Edit -> Advanced -> File Time - Checkin  

请注意以下事项(有关详细信息,请参见How do I choose advanced workspace options?。 ):

  

文件时间:

     
      
  • 如果要每个文件的日期和时间戳与您的版本的变更集的戳匹配,请选择签入   工作区。一些问题和例外是:

         
        
    • 修改本地文件时,日期和时间戳将与修改文件时的日期和时间匹配。

    •   
    • 仅当您使用Visual Studio 2012或更高版本以及Visual Studio Team Foundation Server 2012或更高版本时,此功能才可用。

    •   
    • 该设置不适用于文件夹,除非对该文件夹包含的文件执行挂起的添加或删除操作。

    •   
    • 您可能无法逐步构建代码项目。相反,您将不得不重建)。

    •   
  •   
  • 如果希望日期和时间戳与上次修改本地文件时的日期和时间戳匹配,请选择当前。例如,一个   团队成员在星期一检入了文件的最新更改。上   星期二,您执行获取操作以更新文件。日期和   时间戳记设置为星期二。

  •   

enter image description here

答案 1 :(得分:0)

最后,在搜索Internet和Microsoft文档之后,我可以使用以下代码创建具有上述属性的工作区:

$tfsServer = Get-TfsServer -Name $props.tfsURI -Credential $tfsRepoCredentials
$structureService = $tfsServer.GetService("Microsoft.TeamFoundation.Server.ICommonStructureService")
$versionControlService = $tfsServer.GetService("Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer")

$workSpaceName = $env:USERNAME "-"+ $patchNumber

$wsParams = New-Object Microsoft.TeamFoundation.VersionCotrol.Client.CreateWorkspaceParameters -ArgumentList $workSpaceName
$wsParams.WorkspaceOptions = [Microsoft.TeamFoundation.VersionControl.Common.WorkspaceOptions]::SetFileTimeToCheckin

$versionControlService.CreateWorkspace($wsParams)

问题Automating workspace creation in Team Foundation Server中的答案提供了有关如何设置工作区选项的有用信息。

感谢@Andy的帮助。