web-dev-qa-db-ja.com

svn:ローカルコミット

Subversion:ローカルリビジョンをプッシュせずにコミットし、後日プッシュすることは可能ですか?この機能がないために「集中型」と呼ばれるのはなぜですか?

60
Adrian Panasiuk

Subversionでローカルコミットを行うことはできません。

これは、集中型バージョン管理システムとして、ローカル作業コピーには、分散バージョン管理システム(DVCS)の場合のサーバーの過去のリビジョン、ログエントリなどに関するすべての情報が含まれていないためです。

Subversion作業コピーには、チェックアウトされたすべてのファイルのコピーが含まれているため、サーバーに接続せずに変更されたファイルを元に戻すことができます。

ローカルコミットを本当に実行したい場合は、Subversionの上に構築され、DVCSのような機能を提供する [〜#〜] svk [〜#〜] を確認する必要があります。

54
arturh

上記の多くはやや時代遅れになっており、この質問が「svn local commit」のグーグル検索でヒットしたため、ここに更新があります:

パッケージ "git-svn"(gitがわからない場合は "git-gui"とともに)を使用して、完全なリモートSVN統合でローカルコミットを可能かつ簡単に行うことを検討してください。まともなoverview/tutorial/use-caseは ここ です。 Sourceforgeプロジェクトでこのプロセスを使い始めたばかりなので、まだ問題を報告することはできません。 Authorsファイルを正しく取得してください!

編集:リンクを更新しました。ありがとう、HDL!

35
BobC

SVNサーバーをGITまたはMercurial Bridgeとインターフェースする場合、そのようなことを行うことができます。 GITとMercurialはローカルコミットを実行できるため、そのように使用できます。多分git-svnか似たようなものをチェックしてください(Bazaar-svnがあったことは覚えていますが、よくわかりません)。

5
Sideshowcoder

他の人が言ったように、いいえ。

私は強く svnを使ってリモートで不安定なものを使用することをお勧めします。

私はSVKを十分に使用していないため、それを推奨することはできませんでした。ただし、SVNの上に構築されたものをプロジェクト全体で何も壊さずに使用することには懐疑的です。私はSVNを十分に使用しているので、注意しないと、通常の作業サイクルでもトーストできることがわかります。

職場ではSVNを使用しています。私はbzrとbzr-svnを使用してすべてのやり取りをしてきました素晴らしくは機能します。私のワークフローは次のようなものです:

$ bzr branch file:///var/svn/project ~/project

(hack、hack、hack)

$ bzr commit -m "commit log"(繰り返し)

準備ができたら

$ bzr Push

はい、更新する代わりに$ bzr mergeと変更のコミット(作業中のものを保留する可能性があります)が、ローカルコミットはveryいいことであり、shelvingも(シェルビングはrevertwithsave)のようなものです

Gitもこれを処理すると思います。 bzr-svnほど完全ではないと聞いていますが、それを裏付けることはできません。

しかし、svnリポジトリでDVCSを使用するのが良い方法です!

2
jskulski

BobCの回答に加えて、Mercurialの場合はhgsubversionを使用します。

2
Seth

それが集中型と呼ばれる理由です。リポジトリ内でリポジトリを使用してみることができます。 1つはローカルで、もう1つはリモートです。次に、内部リポジトリ全体をリモートにコミットします。

2
Manuel Ferreria

番号!しかしgitはこれを行うことができ、git-svnを使用して元のリポジトリとの同期を保つことができます。

1

両方の長所を活かすために、 [〜#〜] svk [〜#〜] はSubversionの上に構築されましたが、ローカルコミットを実行できるようにローカル状態を維持しています...

1
Stobor