私が取り組んでいた svn ブランチがあり、git-svn を使用してローカルで作業することにしました。今、私には2つの問題があります。自分の作業を別の svn リポジトリ (同じホスト上) に移動したいのですが、最初にトランクから最新の作業をマージしたいと思います。git-svnでこれを行うにはどうすればよいですか? また、元のリポジトリから作業を継続的にマージしながら、別の svn-repo で作業を続行するにはどうすればよいですか? また、プロジェクトがかなり巨大であるため、元のトランクからすべての履歴をチェックアウトしたくありません。私は git と git-svn を初めて使用しますが、git ブランチの短期集中コースを受講しており、rebase や cherry-pick などの高度なコマンドを使用するのに十分な自信を持っています。主に、これらの概念を git-svn で適用する方法を知る必要があります。svn リポジトリは何らかの方法で git リモートとしてセットアップされますか? それがどのように機能するかを説明するネット上の良いリソースはありますか? どんなガイダンスも大歓迎です。
1 に答える
で Git リポジトリを作成します
git svn init -s <url>
。git config --edit
svn-remotes
、 Subversion リポジトリごとにいくつか追加します。後で-R
、すべての git-svn コマンドのオプションを使用して、使用するコマンドを選択svn-remote
します。svn-remote
必要に応じてブランチ マッピングを微調整します。デフォルトのrefs/remotes/*
名前空間は、 Git リモートではなく、リモート ブランチを指定することに注意してください。(git remote
名前は 1 つ.
しかありませんが、プッシュ/プルはお勧めしません)。リモート ブランチの名前空間を簡単に設計して、異なる Subversion リポジトリからのブランチを分離しておくことができます (例:
refs/remotes/repoA/*
など/refs/remotes/repoB/*
)。git svn fetch
. これには、特定のリビジョンから開始するなど、部分的にのみ履歴をスキャンするオプションがあります。これを行う方法については、マンページをお読みください。ここで特定のパスやブランチを無視することもできます。
コミットをできるだけ直線的に保つようにして、通常どおり Git を操作します。頻繁にリベースします。マージ コミットは問題ありませんが (プロパティ
git-svn
を設定することもsvn:mergeinfo
できます)、注意してください (注意事項についてはマンページをお読みください)。git-svn-id
タグ付きの Git コミットはimmutableであり、push -f
あなたを救うものではないことを理解してください。たとえば、すでにdcommit
編集済みの変更を修正またはリベースすることは禁止されています。
それがどのように機能するかを説明するネット上の良いリソースはありますか?
断然最高のリソースはmanpageです。その次がgit-svn
sourceです。