5

私のチームメイトと私は、svn リポジトリを git リポジトリと同期させるのに苦労しています。私たちはプロジェクトに取り組んでおり、svn リポジトリ (assembla.com サイトでホスト) でコードを共有するように求められています。私たちは git を使用してコードのバージョン管理に慣れているため、git が提供する git svn 機能をうまく利用することにしました。すべての作業を共有し、適切なブランチに分割しておくために、git 用のリモート リポジトリ (bitbucket) もあります。

これまでのところ、git でコミットしたすべての作業で問題は発生していませんが、svn リポジトリの同期に関しては、エラーが次々と発生します。

この回答に従いました既存の git リポジトリを SVNにプッシュして svn リポジトリを git リポジトリに接続しましたが、いくつかのマージとコミットの後、エラーが発生し、変更をコミットできなくなりました。

現在、svn/trunk のコピーであるブランチがあります

$ git checkout -b assembla_copy -t svn/trunk
  Branch assembla_copy set up to track local ref refs/remotes/svn/trunk.
  Switched to a new branch 'assembla_copy'

$ git svn rebase svn/trunk
Current branch assembla_copy is up to date.

それをマスターブランチと同期するために、私は両方を試みました

git merge master

git rebase master

しかしgit rebase master、最初のコミット以降のすべての変更を適用し始め、多くの競合を与えている間 (代わりに svn/trunk にこの変更が既にある場合、何らかの方法でいくつかの変更をオンラインリポジトリにプッシュすることができたので、私たちは現在ar r46)、うまくいきgit merge masterますが、dcommitすると、すべての変更が1つのコミットにまとめられ、「ブランチ 'master'をassembla_copyにマージする」と記載されていますが、すべての個別のコミットを行うことをお勧めしますコミットします(最初に行ったように..)。

マスター ブランチから dcommit すると、すべてのコミットが分離されますが、マスター ブランチはリベースされるため、マスター コミットを親として持つすべてのブランチは、マスター ブランチから分離されたものとして表示されます。

すべての作業が行われる git リポジトリをミラーリングする svn リポジトリを作成するための正しいワークフローを説明していただけますか (svn リポジトリは単なるコピーです)。 先週解決策を探しているときにいくつかの回答で見たように、複雑なbashスクリプトではなく、標準のgitコマンドだけを使用できますか?

ありがとうございました!

4

1 に答える 1

8

リモート SVN リポジトリ用のある種の派手な svn クライアントとしてローカル git リポジトリを持つことを目標に、次のワークフローを使用しています。

  • を使用してリポジトリを初期化しますgit svn clone ...。これにより、マスター ブランチが SVN トランクに続きます。この場合、これは svn/trunk である必要があります。
  • master: からローカルの「ベースライン」ブランチを作成しますgit checkout -b local。これはmasterあなたの場合です。
  • ローカルの機能ブランチで作業を開始 -git checkout -b feature
  • リモート SVN にコミットする準備ができたら:
    • git checkout master
    • git svn rebase- SVN の更新を取得する
    • 更新がある場合は、それらをマージしますlocal
    • git rebase --onto master local feature- ベースラインと比較して機能ブランチで行われた変更は、ブランチにlocal適用されますmaster
    • git checkout masterフィーチャー ブランチを master:にマージします。git merge feature
    • git svn dcommit- 変更を SVN にコミットする
    • 新しい機能をローカル ベースラインにマージします: git checkout local, git merge master- 他の誰かが何かを SVN にコミットした場合と同じです。

お役に立てれば。

于 2013-09-09T08:03:33.807 に答える