2

git-svn のgit svn clone <orig_svn_repo_path>. ローカルに複製されたリポジトリのいくつかのブランチのうち、特定のブランチのみにリモート リポジトリをセットアップしたいと考えています<cloned_repo>/branches/<branch_to_clone>。これは可能ですか?リポジトリの残りの部分は、サイズの点で非常に巨大であり、私が作業しなければならない特定のブランチしかないため、リモート ミラーをセットアップするだけで済みます。また、それが可能であれば、作業中のブランチで元の svn リポジトリを更新し、変更をリモート git ブランチ (リポジトリ) にプッシュして、ローカル ブランチ (svn に更新される) との同期を維持するにはどうすればよいですか?レポ)?

4

1 に答える 1

2

SVN に ( を使用して) コミットする場合は、git リポジトリの を使用しないgit svn dcommitでください。git clone

代わりにgit svn init、適切なパラメーターを指定したコマンドを使用して、目的の SVN ディレクトリのみがフェッチされ、git svn fetch. これは何度でも行うことができます。

git cloneSVN を追跡するように設定されているリポジトリの を実行すると、問題が発生します。git-svn は、行を追加して Subversion に送信するコミットの本文を変更しdcommitますgit-svn-id。これは一種の歴史書き換えです。したがって、SVN 対応のリポジトリにプッシュし、Subversion 自体にプッシュする SVN に依存しないリポジトリがある場合、2 回目に実行しようとすると問題が発生しますgit push

明確にするために、問題は、最初のリポジトリがdcommit. そのため、その時点から別の git リポジトリにプルされた新しい変更は、異なるコミット ハッシュを持つことになり、強制的なプル/プッシュが必要になります。これは、公開されている変更を誰かがリベースした場合に起こることとまったく同じです: this SO answerを参照してください。

基本的に、git-svn は、SVN リポジトリ自体が「中央」リポジトリとして機能するように設計されています。

Subversion の読み取り専用コピーが必要で、別のことをしないdcommit(または少なくともdcommit最初の git リポジトリを実行した後に 2 番目の git リポジトリを最新の状態に維持しない) 場合は、問題ありません。git clone興味のあるブランチに限定された refspec で a を実行するだけです。

于 2013-01-28T17:46:20.387 に答える