- プログラミング
【TFS】 Team Foundation Server に巨大ファイルをチェックインしてしまったときの対処
【TFS】 Team Foundation Server に巨大ファイルをチェックインしてしまったときの対処
Team Foundation Serverを活用しています。Visual Studioから使うには便利ですね。TIPSなどを備忘録的に書いていきたいと思います。
ある日TFSに4GB以上もあるフォルダをチェックインされているのを発見しました。このリポジトリはそれほど更新するわけでもないので、それ自体は問題無いとは思うのですが、いざプロジェクト全体をチェックアウトしようとすると、チェックアウトが終わらず、作業ができないという現象に陥っていました。
そのリポジトリは現在はあまり活用していなかったのですが、年末大掃除の一環でクリーンアップしたのでその手順を備忘録的に書いておきます。
手順としては、まずその巨大ファイルを削除をしたあとに履歴を辿ってデストロイをするというだけです。
ご丁寧にその巨大ファイルはロックがかかっており、その人のアカウントはもうなくなっているという状況でした。チェックアウトしたままの状態だったようで、自分のアカウントから削除を行うことができません。ネットで少し探すと、以下のような記事を見かけて、これを行うことにしました。
TFS: 別PCでのチェックアウトを取り消す – .NET 航海日誌
これで当該ユーザのかけたロックをすべて解除できます。
tf undo /recursive /workspace:別PCで割り当てていたワークスペース名;ドメイン名ユーザー名 $/
私の環境で少し異なったのは、複数のリポジトリがあるため
/collection:http://hogehoge:8080/project
というオプションを付けたくらいです。
また、上記のTAKENAKAさんの記事にあるとおり、その人が別PCで割り当てていたワークスペースは
tf workspaces /owner:ドメイン名ユーザー名 /computer:*
という呪文で一覧できるので、それでワークスペース名を引いてくる必要があるようです。
リポジトリの中をのぞくと、その巨大ファイルの中身はSQL serverのデータベースファイルであることがわかりました。一方、Team Foundation Serverは、SQL serverでリポジトリ管理をするので、SQL serverのデータベースファイルの中にデータベースファイルがシリアライズされているという状況です。これはあまり気持ちよくありません。
destroyコマンドを使って、過去の履歴とともにすべて当該ファイルを削除したいと思いますが、MSDN には以下のようにあります。
/keephistory オプションを指定しないで tf destroy を実行する場合は、その前に、破棄するファイルを先に削除することをお勧めします。
ですので、削除を行います。ロックを解除しているので、ソリューションエクスプローラから簡単に削除できます。これもMSDN参照。
名前からして恐ろしいのですが、チェックアウトできないソース管理システムなんてゴミ同然なので、復旧作業としてやらねければなりません。
先ほどのMSDNの説明通り以下を行います。
tf destroy /collection:http://hogehoge:8080/project $/project/…フォルダ名
これ自体は単純なので間違えようが無いですが、フォルダ名を入れる際は間違えて上の階層を指定したりしないように、注意しましょう。
デストロイが完了したら、無事チェックアウトができました。これでバックアップやTFSのバージョンアップなどが簡単に行えるようになりました。ホッ。