トップ回答者
TFS上の最新ファイルとローカルファイルを比較して、結果を返す方法について

質問
-
現在一部機能をVS2008とTFS2008を使用して開発を行っています。
今まで大量のソースコードをTFS上にチェックアウトするのにいちいち個々のファイルの差分があるかをチェックしてから、チェックアウトしていました。
効率化のためにTFSの最新ファイルとローカルファイルを比較し、差分があるならTRUE、そうでないならFALSEを返すようなコマンドを読んで、
その後差分がある場合は、TFコマンドのチェックアウトコマンドを呼びたいと考えています。
最新ファイルとの比較をして結果をTRUE,FALSで返すような手段はあるでしょうか?
ちなみに、コマンド呼び出しもとのアプリケーションはC#、.Net4.0または4.5で開発しようと考えております。
もし何かご存知でしたら、ご教授いただければ幸いです。
よろしくお願いいたします。
回答
-
Visual Studioから手動で差分を確認してからチェックアウトするという状況がよくわからないのです。チェックアウト前に差分があるのはどういう状態ですか?
チェックアウトせずにソースを修正して、チェックイン時に内容に変更点があったものだけを手動でチェックアウト→チェックインみたいな運用をしていますか?(外部の開発拠点に開発をお願いしていて、そこからTFSがあるネットワークに接続できないとか?)
一応TFユーティリティーにはDifferenceコマンドがあるので、こいつをformat:Briefで実行すればそれっぽいものはできるのかな。確認するファイルの一覧はプロジェクトファイルを解析して確認する必要がありますね。競合なんかを考えると考慮することが多くなりそうです。
出来上がったら、Visual Studioの外部ツールとして登録してキーボードショートカットを割り当てれば何時でも呼び出せると思います。
#あれ?これってソース管理をオフラインにしてから修正、チェックイン前にオンラインに戻すみたいなことをすればVisual Studioがやってくれませんか?リモート側にワークスペースを作らなきゃダメだけれど、、、チェックインするユーザーとチェックアウトするユーザーが違うからダメか。。。
#https://msdn.microsoft.com/ja-jp/library/cc667405%28v=vs.90%29.aspx
--追記
単純にフォルダーを対象にするなら、/recursiveオプションでもいいのかな。
>tf diff /format:brief /recursive [ソリューションフォルダー]
- 編集済み かるあ 2015年5月22日 1:35
- 回答の候補に設定 星 睦美 2015年5月28日 8:00
- 回答としてマーク Yuki Takashima 2015年5月28日 16:07
-
今まで大量のソースコードをTFS上にチェックアウトするのにいちいち個々のファイルの差分があるかをチェックしてから、チェックアウトしていました。
標準で競合チェックの仕組みが組み込まれているはずですが、事前の差分チェックが必要なのは何のためでしょう。もしかして、あまりにもファイルが大量すぎて、一括で処理するのが難しいという状況なのでしょうか。
効率化のためにTFSの最新ファイルとローカルファイルを比較し、差分があるならTRUE、そうでないならFALSEを返すようなコマンドを読んで
GUI 操作ということであれば、[ソース管理エクスプローラ]で特定のサーバーフォルダを右クリックして『比較』を実施することで、サーバーあるいはローカルで修正されたファイルの一覧が表示されます。
同様の操作をコマンドラインから指定するなら "tf Folderdiff" コマンド で呼び出せますし、ワークスペースで編集中のファイルの一覧なら、"tf status" コマンド で列挙できます。
tf status $/Foo/Bar/Baz /server:http://yourserver:8080
相違のあるファイルの列挙調査であれば "tf difference" コマンド です。ファイル単位の更新の有無なら /format:Brief を指定すれば良いかと思いますし、必要であればファイルの内容について行単位での差異を出力させることもできます。
もしも内容比較について、difference コマンドでは分かりにくいというのであれば、 "tf view" コマンド を使って一時ファイル(/Output:)あるいは標準出力(/Console)にサーバーバージョンのファイルを吐き出し、それを、ローカルファイルと比較するために、WinMergeU.exe なり、『C#、.Net4.0または4.5で開発しようと考えている自作ソフト』に渡すという選択肢もあります。
- 回答の候補に設定 星 睦美 2015年5月28日 8:00
- 回答としてマーク Yuki Takashima 2015年5月28日 16:07
すべての返信
-
Visual Studioから手動で差分を確認してからチェックアウトするという状況がよくわからないのです。チェックアウト前に差分があるのはどういう状態ですか?
チェックアウトせずにソースを修正して、チェックイン時に内容に変更点があったものだけを手動でチェックアウト→チェックインみたいな運用をしていますか?(外部の開発拠点に開発をお願いしていて、そこからTFSがあるネットワークに接続できないとか?)
一応TFユーティリティーにはDifferenceコマンドがあるので、こいつをformat:Briefで実行すればそれっぽいものはできるのかな。確認するファイルの一覧はプロジェクトファイルを解析して確認する必要がありますね。競合なんかを考えると考慮することが多くなりそうです。
出来上がったら、Visual Studioの外部ツールとして登録してキーボードショートカットを割り当てれば何時でも呼び出せると思います。
#あれ?これってソース管理をオフラインにしてから修正、チェックイン前にオンラインに戻すみたいなことをすればVisual Studioがやってくれませんか?リモート側にワークスペースを作らなきゃダメだけれど、、、チェックインするユーザーとチェックアウトするユーザーが違うからダメか。。。
#https://msdn.microsoft.com/ja-jp/library/cc667405%28v=vs.90%29.aspx
--追記
単純にフォルダーを対象にするなら、/recursiveオプションでもいいのかな。
>tf diff /format:brief /recursive [ソリューションフォルダー]
- 編集済み かるあ 2015年5月22日 1:35
- 回答の候補に設定 星 睦美 2015年5月28日 8:00
- 回答としてマーク Yuki Takashima 2015年5月28日 16:07
-
今まで大量のソースコードをTFS上にチェックアウトするのにいちいち個々のファイルの差分があるかをチェックしてから、チェックアウトしていました。
標準で競合チェックの仕組みが組み込まれているはずですが、事前の差分チェックが必要なのは何のためでしょう。もしかして、あまりにもファイルが大量すぎて、一括で処理するのが難しいという状況なのでしょうか。
効率化のためにTFSの最新ファイルとローカルファイルを比較し、差分があるならTRUE、そうでないならFALSEを返すようなコマンドを読んで
GUI 操作ということであれば、[ソース管理エクスプローラ]で特定のサーバーフォルダを右クリックして『比較』を実施することで、サーバーあるいはローカルで修正されたファイルの一覧が表示されます。
同様の操作をコマンドラインから指定するなら "tf Folderdiff" コマンド で呼び出せますし、ワークスペースで編集中のファイルの一覧なら、"tf status" コマンド で列挙できます。
tf status $/Foo/Bar/Baz /server:http://yourserver:8080
相違のあるファイルの列挙調査であれば "tf difference" コマンド です。ファイル単位の更新の有無なら /format:Brief を指定すれば良いかと思いますし、必要であればファイルの内容について行単位での差異を出力させることもできます。
もしも内容比較について、difference コマンドでは分かりにくいというのであれば、 "tf view" コマンド を使って一時ファイル(/Output:)あるいは標準出力(/Console)にサーバーバージョンのファイルを吐き出し、それを、ローカルファイルと比較するために、WinMergeU.exe なり、『C#、.Net4.0または4.5で開発しようと考えている自作ソフト』に渡すという選択肢もあります。
- 回答の候補に設定 星 睦美 2015年5月28日 8:00
- 回答としてマーク Yuki Takashima 2015年5月28日 16:07