Team Foundation Server 生成文件 LastWriteTime 设置为今天的日期时间,而不是实际的 LastWriteTime

Team Foundation Server Build Files LastWriteTime is Set to Today's Datetime Instead of the Actual LastWriteTime

提问人:Jason Collier 提问时间:12/23/2022 最后编辑:Daniel MannJason Collier 更新时间:2/24/2023 访问量:55

问:

我正在尝试使用内置的 Team Foundation Server (TFS) 生成功能从同一 TFS 服务器上的 git 存储库仅打包过去 2 分钟内更改的文件。

我编写了一个 PowerShell 脚本来删除 LastWriteTime 超过 2 分钟的所有旧文件:

# Get the current working directory
$currentDirectory = Get-Location

# Append the target directory to the current working directory
$targetDirectory = Join-Path $currentDirectory "CFM Reporting Project\SSRS\Reports"

# Get all files in the target directory and its subdirectories
Get-ChildItem -Recurse $targetDirectory | 
Where-Object {$_.LastWriteTime -lt (Get-Date).AddMinutes(-2)} | 
Remove-Item -Recurse -Force

# List all in target directory and its subdirectories
Get-ChildItem -Recurse $targetDirectory | Format-List -Property FullName,CreationTime,LastWriteTime,CheckinDate -Force  

我已确保构建定义将 Clean 选项设置为 false。

TFS Build Definition

但是,在生成时,不会删除任何文件,因为它们的 LastWriteTimes 是生成开始的所有日期时间:

TFS build logs - folders

以下是显示文件的更多日志,因为上面的屏幕截图仅显示文件夹:TFS build logs - files

我使用这些资源来指导和探索想法:

额外信息

  • 部署包由报表存储库组成,而不是 Visual Studio 解决方案文件
  • Microsoft Visual Studio Team Foundation Server 版本 16.131.28601.4
  • PowerShell 版本 1.2.3

谁能提供建议,如何仅打包包含过去 2 分钟内更改的报告,特别是因为 LastWriteTime 无法正常工作。

git powershell tfs tfsbuild

评论

0赞 Daniel Mann 12/26/2022
TFVC 是版本控制系统,而不是生成系统。您是使用 TFVC 进行版本控制,还是使用 Git?它们是不同的东西。
0赞 Jason Collier 12/27/2022
嗨@DanielMann - 我使用 git 作为存储在 Team Foundation Server 上的源代码管理系统,并使用 Team Foundation Server 的生成和发布功能。
0赞 Daniel Mann 12/28/2022
好的,那么一个重要的术语说明是你没有使用 TFVC。我已经相应地编辑了您的问题。
0赞 Jason Collier 12/28/2022
谢谢@DanielMann。这非常特定于 Team Foundation Server 生成步骤,因此我已将其添加到问题中,否则我的问题将无法获得预期的结果。

答:

0赞 Kevin Lu-MSFT 12/26/2022 #1

由于将 clean 选项设置为 false,因此管道将以增量方式签出存储库的更改。

从有关文件日期的屏幕截图中,它显示文件夹级别的更改时间,而不是子文件。

当文件夹中的子文件发生更改时,文件夹的日期将一起更新。

例如:

子文件:

enter image description here

文件夹:

enter image description here

若要仅打包最近 2 分钟内发生更改的报告,可以检查文件夹子文件的日期。然后,您可以打包相关文件。

评论

0赞 Jason Collier 12/28/2022
嗨,凯文,感谢您的评论!子文件具有与父文件夹完全相同的 CreationTime 和 LastWriteTime 时间戳 - 我在问题中添加了另一个屏幕截图来显示这一点。
1赞 Jason Collier 2/24/2023 #2

最终的解决方案是使用 PowerShell 脚本,使用 git log 确定在上次提交中编辑了哪些文件,如下所示:

$modifiedFiles = git log -1 main --name-only --pretty=format: