59

現在の会社で TFS から SVN (TortoiseSVN) に移行しました。TFS の「保留」機能が本当に恋しいです。SVN を使用して「棚上げ」する方法に関するさまざまな記事を読みましたが、作業を「棚上げ」するための非常に単純な経験を提供するものは何も読んだことがありません。

理想的には、TortoiseSVN のコンテキスト メニューに "Shelve" と "Unshelve" という追加の項目を追加したいと考えています。「保留」は、現在の保留セットを削除し、ユーザー オプションで定義された適切なパスの下に作業ディレクトリをアップロードします。「Unshelve」は、セットを作業コピーとマージします。

このようなものは存在しますか?GUI でこの機能を「ハック」する方法を提案できる人はいますか?

注: 次のリンクは、私が探していたユーザー エクスペリエンスを実現していません。

シェルビング転覆

TFS Shelve の最大の利点の 1 つは、その使いやすさです...

4

7 に答える 7

32

SVN がこの機能をサーバー製品に組み込んでいるとは思えません。また、TortoiseSVN を含む、私が使用したクライアントでこのようなものがエミュレートされたとは信じていません。

この問題を回避するために、 GitMercurialなどの DVCS を使用して、コンテンツを SVN にプッシュする前にローカルでブランチ/マージ/シェルブできるようにしました。それは間違いなく少し面倒ですが、それは本当にうまく機能します.

于 2008-08-12T05:30:34.047 に答える
16

SVN ブランチがどのように機能するかを理解していれば、SVN で Shelve をエミュレートするのは簡単です。

  1. リポジトリ (サーバー上) にブランチを作成する
  2. ローカルコピーをそれに切り替えます
  3. 変更を新しいブランチにコミットします
  4. ローカル コピーをトランクに戻す

棚上げされた変更に戻る準備ができたら ("unshelve")、シェルフ ブランチをローカル コピーにマージするだけです。

コマンドライン SVN も Tortoise SVN も上記のことを行うのに十分な知識がない場合は、Tortoise SVN でそれを行う方法についての非常に詳細なステップバイステップの手順を次に示します。

  1. 「SVN Update」を実行して、作業コピーをトランクの最新バージョンに更新します。このように、ローカル コピーとトランクの唯一の違いは変更です。
  2. コンテキストメニューから「ブランチ/タグ」を選択
  3. デフォルトでは、「リポジトリ内の HEAD バージョン」オプションが選択されています。それを守ってください。
  4. 「To Url」を変更してブランチ名を指定します。http://server/repository/project1/branches/shelf1
  5. 「作業コピーを新しいブランチ/タグに切り替える」ボックスにチェックを入れます
  6. [OK] をクリックしてブランチを作成し、それに切り替えます
  7. 「SVN Commit...」を実行し、新しく作成したブランチに変更をコミットします
  8. コンテキスト メニューから [切り替え...] を選択します。
  9. 「To URL」をトランク URL に変更します。http://server/repository/project1/trunk
  10. [OK] をクリックしてトランクに戻ります。

さらに詳細と上記のコマンドラインに相当するものについては、このリンクを参照してください:
Subversion のシェルフ

于 2011-06-01T14:39:17.137 に答える
8

もう 1 つのオプションは、TortoiseSvn の「パッチの作成」機能を使用してパッチ ファイルを作成し、変更を元に戻すことです。パッチ ファイルは後で再適用して元の状態に戻すことができます。

ただし、作業コピーのリビジョンを更新する必要がある場合は、スティッキー マージが発生する可能性があります。

于 2012-02-14T13:26:54.683 に答える
1

DVCS を使用することはできますが、ある意味でこれは面倒です。DVCS の「シェルビング」は、変更をローカルにのみ保存します。これは、さらに作業を中断した場合に作業をロールバックするためにチェックポイントを設定する場合にのみ役立ちますが、できれば作業をサーバーに保存する必要があります。

明示的な shelve コマンドを使用せずに SVN でこれを行う 1 つの方法は、作業コピーを別の svn の場所に切り替えて、メイン リポジトリではなくそこでコミットすることです。これは事実上、一時的なブランチを作成し、作業中にそのブランチで作業するようなものです。ローカルの変更が保持されるため、切り替えるときにSVNがマージする必要さえないと思います。

残念ながら、存在しない場所に切り替えることはできないため、最初にこれを行うときは、保留先の「ブランチ」を作成する必要があります。すべて自動化できると思います。

于 2011-05-26T12:02:12.303 に答える