Azure DevOps の「TF401174: The item '…' could not be found in the repository '…' at the version specified by '…'」
「指定された版のリポジトリに、そのファイル(フォルダー)が無い」という意味です。版そのものは見つかっています。文の終わりに、どのコミットとして読んだかが出ます。レビューのツールや差分のスクリプトでは、プルリクエストが足すファイルをターゲットのコミットで読んだとき(そこにはまだ無い)がいちばん多く、パイプラインでは、そのファイルが無いブランチやリポジトリから読んだときに出ます。
答えの全体
2026年10月24日に dev.azure.com の公開リポジトリで、サインインなしで確かめました。完了したプルリクエストが足したファイルを、そのプルリクエストのターゲットのコミットで読んだときの答えです:
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repository}/items
?path=/es-metadata.yml&versionDescriptor.version=2adc745e…&versionDescriptor.versionType=commit&api-version=7.1
HTTP/1.1 404 Not Found
{"$id": "1", "innerException": null,
"message": "TF401174: The item 'es-metadata.yml' could not be found in the repository 'dotnet-public-wiki'
at the version specified by '<Commit: 2adc745e… >' (resolved to commit '2adc745e…')",
"typeName": "Microsoft.TeamFoundation.Git.Server.GitItemNotFoundException, Microsoft.TeamFoundation.Git.Server",
"typeKey": "GitItemNotFoundException", "errorCode": 0, "eventId": 3000}
- 同じファイルをプルリクエストのソースのコミットで読むと 200 でした。
- 版を指定しないと、文は
'<Branch: >'になります。既定のブランチの最新のコミットとして読んだ、という意味です。 - パスは先頭の / を外して表示されます。同じ確認で、
/readme.mdは/README.mdを返しました。そこでは大文字と小文字は区別されませんでした。
似ているもの:版のほうが見つからない
- TF401175: The version descriptor <Branch: … > could not be resolved to a version in the repository …(これも HTTP 404)は、ブランチが見つからないという意味です。同じ確認で、
versionType=branchにversionDescriptor.version=refs/heads/mainを渡すとこれになり、mainなら 200 でした。ブランチはrefs/heads/を付けずに渡します。TF401175 の詳しいこと。 - TF401029: Couldn't find Git commit with ID …(HTTP 404)は、そのコミットがこのリポジトリに無いという意味です。フォークや別のリポジトリのコミットを渡したときなど。
公開の報告で多い出どころ
- プルリクエストの差分:プルリクエストが足すファイルには前の版が無いので、ターゲットやベースのコミットで読むと TF401174 になります。レビューのボットが 2023年と2024年に報告し、Azure DevOps 用の AsciiDoc の拡張は 2026年9月に、足されたファイルではこのエラーを無視するようにしました。名前を変えたファイルも、新しいパスで前の版を読むと同じことになります。前の版は古いパスで読みます。プルリクエストの反復の変更では、
changeTypeがadd・delete・renameのどれかを示し、名前の変更には古いパスも入っています。 - ブランチからファイルを読むパイプライン:2026年7月、ある .NET のリポジトリのパイプラインが、
refs/heads/mainの.config/1espt/PipelineBranchControl.ymlでこれを出しました。そのファイルを足すプルリクエストがまだ完了していなかったためです。別のリポジトリやブランチからテンプレートや設定を読むときも同じです。 - リポジトリの中のパスになっていない:ビルドするマシンの絶対パスや URL を渡したとき。2022年の報告では、
/のつもりがC:/Program Files/Gitになっていました。Windows の Git Bash は、/という引数を Windows のプログラムに渡すときにこう書き換えるので、サーバーにどのパスが届いたかを確かめてください。
確かめること
- 文の中の版を読む:どのブランチ・コミットとして読んだか。そこにファイルはあるか。同じ版で
items?scopePath=/&recursionLevel=OneLevelを呼ぶと、あるものが並びます。 - プルリクエストなら、そのファイルは足された・消された・名前が変わったものか。それなら、前か後のどちらかにはそのパスで存在しません。
- パスに、ドライブ名・リポジトリ名・URL など、余計なものが付いていないか。
- 文が TF401175 か TF401029 なら、ファイルではなくブランチかコミットの問題です。
IntelliJ IDEA と Rider で Azure DevOps のプルリクエストを
Azure DevOps Pull Requests は、Lesstep が作っている JetBrains IDE(2024.1 以降)と Android Studio のプラグインです。組織・プロジェクト・リポジトリを git のリモートから読み、自分のレビューを待っているプルリクエストを IDE のツールウィンドウに並べます。Azure DevOps Services でも Azure DevOps Server でも使えます。差分では、前の版を読むのはそこにあったファイルだけで、名前を変えたファイルは古いパスから読み、足された・消されたファイルは片側を空で示します。レビューの受け箱と差分は無料、投票・コメント・完了・作成は Pro(30日間の無料試用つき)です。画面は日本語です。
Azure DevOps は Microsoft Corporation の商標、IntelliJ IDEA と Rider は JetBrains s.r.o. の商標です。このページは Microsoft・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:TF401398:ソースかターゲットのブランチが無い · TF401019:リポジトリが無いか、許可が無い · TF401181:途中で完了か破棄された · TF401175:その名前のブランチが無い · English