あなたのチームで、ソース管理を TFVC から Git へ移行したいということになった場合、できる限り最高の忠実度で変換を行いたいことと思います。 そのため、相互運用についてのセクションでは git-tfs と git-tf の両方を取り上げましたが、本セクションでは git-tfs のみを取り上げます。これは git-tfs はブランチをサポートしている一方、 git-tf ではブランチの使用が禁止されており、対応が難しいためです。
Note
|
以下で述べるのは、一方通行の変換です。 できあがった Git リポジトリを、元の TFVC プロジェクトと接続することはできません。 |
最初に行うのはユーザ名のマッピングです。
TFVC ではチェンジセットの author フィールドの内容をかなり自由に設定できますが、 Git では人間に読める形式の名前とメールアドレスが必要です。
この情報は、 tf
コマンドラインクライアントで次のようにして取得できます。
PS> tf history $/myproject -recursive > AUTHORS_TMP
このコマンドは、プロジェクトの歴史からすべてのチェンジセットの情報を取ってきて、 AUTHORS_TMP ファイルへ出力します。このファイルは、 'User' カラム(2番目のカラム)のデータを抽出する際に使用します。
AUTHORS_TMP ファイルを開いて、2番目のカラムの開始位置と終了位置を確認したら、次のコマンドラインの、 cut
コマンドの引数 11-20
を、それぞれ開始位置と終了位置で置き換えてください。
PS> cat AUTHORS_TMP | cut -b 11-20 | tail -n+3 | uniq | sort > AUTHORS
この cut
コマンドは、各行の11文字目から20文字目だけを抽出します。
また、この tail
コマンドは、最初の2行(フィールドヘッダと、下線のアスキーアート)を読み飛ばします。
この処理の結果は、重複を排除するためパイプで uniq
コマンドへ送られた上で、 AUTHORS
ファイルへ保存されます。
次のステップは手作業です。git-tfs でこのファイルを利用するには、各行は次のフォーマットに従っている必要があります。
DOMAIN\username = User Name <email@address.com>
イコール記号の左側にあるのは TFVC の ``User'' フィールドの内容、右側にあるのは Git のコミットで使用されるユーザ名です。
このファイルを作りおえたら、次は、対象となる TFVC プロジェクト全体のクローンを作成します。
PS> git tfs clone --with-branches --authors=AUTHORS https://username.visualstudio.com/DefaultCollection $/project/Trunk project_git
次は、コミットメッセージの末尾にある git-tfs-id
セクションを消去したいことと思います。
これは、次のコマンドで行えます。
PS> git filter-branch -f --msg-filter 'sed "s/^git-tfs-id:.*$//g"' '--' --all
これは、Git-bash から sed
コマンドを使用して、 ``git-tfs-id:'' で始まる行を空文字列で置き換えます。 Git は空文字列を無視します。
これらをすべて実施したら、新しいリモートを追加したり、ブランチをプッシュしたり、チームが Git で作業を始めたりする準備はこれで完了です。