提问人:Jason Collier 提问时间:12/23/2022 最后编辑:Daniel MannJason Collier 更新时间:2/24/2023 访问量:55
Team Foundation Server 生成文件 LastWriteTime 设置为今天的日期时间,而不是实际的 LastWriteTime
Team Foundation Server Build Files LastWriteTime is Set to Today's Datetime Instead of the Actual LastWriteTime
问:
我正在尝试使用内置的 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。
但是,在生成时,不会删除任何文件,因为它们的 LastWriteTimes 是生成开始的所有日期时间:
我使用这些资源来指导和探索想法:
- get-a-set-of-files-that-have-been-modified-after-a-certain-date(在某个日期之后被修改的 get-a-set-of-files-that-have-been-modified)
- tfs-2017-how-build-deliver-only-changed-文件
- 部署仅更改的文件 - 在 tfs 部署 2012
额外信息
- 部署包由报表存储库组成,而不是 Visual Studio 解决方案文件
- Microsoft Visual Studio Team Foundation Server 版本 16.131.28601.4
- PowerShell 版本 1.2.3
谁能提供建议,如何仅打包包含过去 2 分钟内更改的报告,特别是因为 LastWriteTime 无法正常工作。
答:
0赞
Kevin Lu-MSFT
12/26/2022
#1
由于将 clean 选项设置为 false,因此管道将以增量方式签出存储库的更改。
从有关文件日期的屏幕截图中,它显示文件夹级别的更改时间,而不是子文件。
当文件夹中的子文件发生更改时,文件夹的日期将一起更新。
例如:
子文件:
文件夹:
若要仅打包最近 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:
评论