git-svn のgit svn clone <orig_svn_repo_path>
. ローカルに複製されたリポジトリのいくつかのブランチのうち、特定のブランチのみにリモート リポジトリをセットアップしたいと考えています<cloned_repo>/branches/<branch_to_clone>
。これは可能ですか?リポジトリの残りの部分は、サイズの点で非常に巨大であり、私が作業しなければならない特定のブランチしかないため、リモート ミラーをセットアップするだけで済みます。また、それが可能であれば、作業中のブランチで元の svn リポジトリを更新し、変更をリモート git ブランチ (リポジトリ) にプッシュして、ローカル ブランチ (svn に更新される) との同期を維持するにはどうすればよいですか?レポ)?
1 に答える
SVN に ( を使用して) コミットする場合は、git リポジトリの を使用しないgit svn dcommit
でください。git clone
代わりにgit svn init
、適切なパラメーターを指定したコマンドを使用して、目的の SVN ディレクトリのみがフェッチされ、git svn fetch
. これは何度でも行うことができます。
git clone
SVN を追跡するように設定されているリポジトリの を実行すると、問題が発生します。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 を実行するだけです。