2009-08-14 7 views
3

私はちょうどTFSをしばらく使ってから転覆に戻ってきました。そして、私はかなり出ました:)Subversionと混合リビジョン:壊れたビルドのレシピ?

私は別のことを覚えています。私は古い仕事コピーからコミットできるbeeingを覚えていません。あるいは、私の記憶は、「時代遅れ」の定義で私に失敗するかもしれません。私は、「古くなった」とは、作業コピーを最後に更新して以来、どのファイルにも触れていたことを意味しました。私がローカルに触れたファイルに触れただけではありません。

これを問題として見るのは、他の人が行った変更と最初に統合せずに変更をコミットすることができれば、「ビルドを中断する」ことが非常に簡単になるからです。

この複合リビジョンが再送されたのはなぜですか?

+0

あなたの記憶は本当にあなたを失います。あなたの定義が「古くなった」というのは、SVNや、私が見た他のVCSでは決して真実ではありませんでした。もしそれがあれば、それは非常に不便です! –

答えて

1

短い答え:一般に、新しくチェックアウトされたタグから開発者の机を離れることを意図したビルドを行うのが良い方法です。可能であれば、別のマシンで実行してください。

このルールに従えば、よりよく眠ることができます。

もう少し長い答え:つまり、リリース前に作業コピーを更新してビルドし、すべてのテストを実行し、満足したらコピー(タグ)を作成する必要があります。次にビルドマシンにこのタグの新しいチェックアウトから構築を指示します。ビルドの結果、テスト部門に引き渡されます。

特定のバージョンを取得する必要がある場合は、常にそのタグをチェックアウトする必要があります。そのバージョンにタグ "tags/release_4.2.0"があり、修正が必要な場合は、タグをブランチ( "branches/release_4.2.1")にコピーして修正してください。期待どおりに動作することが確認できたら、ブランチを "tags/release_4.2.1"に移動してください。繰り返しになりますが、ビルドマシンのチェックアウトにタグを付け、コードを作成して、それをテストに渡します。

1

このような「混在」リビジョンにコミットする機能は、本質的に安全でないと私を襲ってしまうことはありません。コミットする前にすべてのファイルを完全に最新にする必要があるVCSを使用している場合でも、VCSはコードを実際にコンパイルしたか、すべての単体テストを実行したかを検証できません。そのようなことは開発者の弟子と継続的な統合システムによってカバーされるべきです。

Subversionは、CVSの祖先と同じように、ファイル中心の世界観を持っています。特定のファイルの特定のリビジョンをチェックするには、そのファイルの周りのファイルに触れないでください。これは、個々のファイルの特定のチェックアウトされたリビジョンが追跡されないGit(私はTFSの詳細に慣れていません)のような他のシステムとは対照的です。代わりに、チェックアウト全体は履歴の特定のポイントでのリポジトリのビューであり、そこからの逸脱は新しい変更とみなされます。もちろん、正しい組み合わせを選択しないとビルドを中断する可能性があり、好きなだけ新しい変更を加えることができます。それは、常にこの;-)

ようにされているので

3

それは、あなたですあなたのあなたがコミットしようとしている項目のいずれかが古くなり、リポジトリが「一般的なものを持っている場合に失敗しますコミット'リビジョン番号ですが、コミットしようとしているものがすべて最新のものであれば、コミットすることができます。それがもちろんベストプラクティスではありません。

svnはソフトウェア開発で使用されるだけではないことに注意してください。一般に、この能力はおそらく持っているといいです。

さらに、AFAIK TFSはこの点で非常によく似ています。

+0

はい、SVNとTFSは、この領域(と他の多くは実際に)で同じ動作をしています。 –

+1

SVNは一般的なバージョン管理システムであるとします。そう言えば、コンピュータに精通していない人にとってはそれほど簡単ではないことがわかった。たとえば、スパースチェックアウトはそれほど直観的ではありません。タグ、トランク、ブランチの概念は、非ソフトウェア関連のバージョン管理にはあまり役に立ちません。 – devXen

+0

@Chenster:あなたは完全に正しいです – jeroenh

0

いいえ、svnの古いファイルをコミットすることはできません。これを読んでください: http://subversion.tigris.org/faq.html#wc-out-of-date

+1

質問はそれに関するものではありません。近くのファイルBが同じリポジトリから(最新のものではないが)変更されていない(最新の)ファイルAをコミットすることが可能かどうかです。 –

+1

ファイルAを個別に(深度に)コミットできます。両方のファイルを一緒にコミットしない限り、ファイルBは古いリビジョンにある可能性があります。 – devXen

0

ありがとうございます。それについて考えると、私は、クライアントサイドに実装されていると提案したことを推測します。そして、私はすべてがコンパイルされることを保証するために開発者に任せられることを完全に得ています。現実にはこれは大きな問題ではありませんが、開発者が最初に作業コピーを更新することなく作業をコミットし、ヘッド改訂が壊れてしまったことは何度かあります。サイドノートでは

、どのように亀からこの例について:http://tortoisesvn.net/node/13

「今、あなたはファイル2を変更し、コミットしようとしたときに、それが失敗したクライアントは、ローカルの変更とFile2のリビジョン2であるリポジトリを伝えます。リポジトリはすでにリビジョン3になっています。更新を行うと、File2もリビジョン3になります(もちろん、ローカルの変更はそこに残ります)。

私は実際に「古くなった」というメッセージは表示されませんが、これはある時点ではそうだったと思いますか?

関連する問題