質問
私は現在の会社で TFS から SVN (TortoiseSVN) に移行しました。TFS の「Shelve」機能が本当に懐かしいです。SVN で「シェルブ」する方法についてさまざまな記事を読みましたが、作業を「シェルブ」するための非常に簡単な体験を提供するものは何も読んでいません。
理想的には、TortoiseSVN コンテキスト メニューに追加の項目 (「棚上げ」と「棚上げ解除」) を追加したいと考えています。「Shelve」は、現在のシェルブセットを削除し、ユーザーオプションで定義された適切なパスの下に作業ディレクトリをアップロードします。「Unshelve」を実行すると、セットが作業コピーとマージされます。
このようなものは存在しますか?GUI でこの機能を「ハッキング」する方法を誰かが提案できますか?
注記:次のリンクは、私が求めていたユーザー エクスペリエンスを実際には実現していません。
TFS Shelve の最大の利点の 1 つは、その使いやすさです。
解決
SVN のシェルビングはバージョン 1.10 で展開され始めています。 を参照してください。 リリースノート
他のヒント
SVN ブランチがどのように機能するかを理解していれば、SVN で Shelve をエミュレートするのは簡単です。
- リポジトリ(サーバー上)にブランチを作成します
- ローカルコピーをそれに切り替えます
- 変更を新しいブランチにコミットします
- ローカルコピーをトランクに戻します
シェルブされた変更に戻る (「アンシェルブ」) 準備ができたら、シェルフ ブランチをローカル コピーにマージして戻します。
コマンドライン SVN も Tortoise SVN についても上記のことを行うのに十分な知識がない場合は、Tortoise SVN でそれを行う方法についての非常に詳細なステップバイステップの手順を次に示します。
- 「SVN Update」を実行して、作業コピーをトランクの最新バージョンに更新します。こうすることで、ローカル コピーとトランクの違いは変更内容だけになります。
- コンテキストメニューから「ブランチ/タグ」を選択します。
- 「リポジトリ内の HEAD バージョン」オプションはデフォルトで選択されています。それを守ってください。
- 「To URL」を変更してブランチ名を指定します。
http://server/repository/project1/branches/shelf1
- 「作業コピーを新しいブランチ/タグに切り替える」ボックスにチェックを入れます
- 「OK」をクリックしてブランチを作成し、それに切り替えます
- 「SVN Commit...」を実行し、新しく作成したブランチに変更をコミットします。
- コンテキストメニューから「スイッチ...」を選択します。
- 「To URL」をトランク URL に変更します。
http://server/repository/project1/trunk
- 「OK」をクリックしてトランクに戻ります
詳細および上記と同等のコマンドラインについては、このリンクを参照してください。
Subversion の棚
もう 1 つのオプションは、TortoiseSvn の「パッチの作成」機能を使用してパッチ ファイルを作成し、変更を元に戻すことです。後でパッチ ファイルを再適用すると、元の状態に戻すことができます。
ただし、作業コピーのリビジョンを更新する必要がある場合は、依然としてスティッキーなマージが発生する可能性があります。
TortoiseSVN 1.10
サポートするようになりました shelving
: https://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-shelving.html
SVNは棚をアップグレードしましたhttps://subversion.apache.org/docs/release-notes/1.11.html#shelving
棚上げできる種類の変更は、まだサポートされていない次の種類を除き、ファイルとプロパティのコミットメント可能な変更です。
- コピーと移動
- ディレクトリの作成と削除
DVCS を使用することもできますが、これはある意味面倒です。DVCS の「シェルビング」は、変更をローカルにのみ保存します。これは、さらなる作業で作業が中断された場合にロールバックするために作業をチェックポイントしたい場合にのみ役立ちますが、作業内容をサーバーに保存したい場合にのみ役立ちます。
明示的な shelve コマンドを使用せずに SVN でこれを行う 1 つの方法は、作業コピーを別の SVN の場所に切り替え、メイン リポジトリではなくそこでコミットすることです。これは事実上、一時的なブランチを作成し、作業中はそのブランチで作業するのと同じです。ローカルの変更は保持されるため、切り替え時に SVN がマージを行うため、マージする必要さえないと思います。
残念ながら、存在しない場所に切り替えることはできないため、初めてこれを行うときは、シェルブ先の「ブランチ」を作成する必要があります。すべて自動化できると思います。