2009-08-12 10 views
12

svnリポジトリに保存されているソースコードのマスターコピーを保持しながら、開発者マシンにローカルGitリポジトリを持つことができると聞いています。マスターSubversionリポジトリでローカルGitリポジトリを使用する

良い使用例は、各開発者が使用する中央のsvnリポジトリがあることです。 1人の開発者が時々オフラインになり、オフラインで行った変更を追跡したいと考えています。開発者がオンラインに戻り、svnにアクセスできるようになると、作業コピーの変更がsvnにチェックインされます。私はファイルがsvnにチェックインされるとき、Gitでローカルで起こった変更の履歴を失うことで問題ない。

この問題を解決するにはどうすればよいでしょうか?このような作業に落とし穴がありますか?

答えて

4

this tutorialのようなものを出発点として使用できます。私もthis tutorialと読む。

この作業モードにはいくつかの落とし穴があります。最も重要なのは、svn version 1.5 mergeinfoを使用することができず、これがgitを通して生き残ることができるということです。これは、(間違いなくかなりまともな)svn 1.5マージ機能を使用している場合の大きな欠点です。

マニュアルページgit-svnには、理解しておくべき「警告」セクションにいくつかの注釈が含まれています。すべての警告を理解すると、私はこのセットアップを使用した場合のメリットが、私の特定のケースの実際のコストよりも低いことを理解しました。だから私は、代わりにgitのに切り替えるために、私はちょうどでsucceded何かをプロジェクトを説得するために私のエネルギーを使用し、私がしようとするだろう

1

git-svnのより良い使用例は、中央のsvnリポジトリで作業する必要がある場合ですが、個人的にgitを使用したいと思っています。または、おそらくチームのほとんどの人が、現在svnでより快適に働いているように思えます。 git-svnを使うと、ローカルのgitリポジトリで行われたコミットの履歴を失うことはありません。

新しいリポジトリを最初から設定している場合、または自由に選択できる場合は、どちらか一方を選択します。 git-svnはうまくいきますが、あなたは常に2つのシステム間の「インピーダンスミスマッチ」と戦っています。

単に集中型のモデルであれば、実装しようとしている公共のgitリポジトリを中央リポジトリとして使用できます。 Git User's Manualのsetting up a shared repositoryセクションを参照してください。

2

一つの解決策は次のとおりです。

  • のgit initにSVNを使用して中央リポジトリから

    1. チェックアウト
    2. は、すべての中間の分岐を行いますローカルレポにすべてのファイルを追加する*
    3. gitの追加.gitignoreするの.svn追加ローカルレポ
    4. を作成/コミット/ gitのに戻ります。
    5. 完了したら、SVNを使用して中央リポジトリにコミットし直してください。
  • 4

    あなたのSVNのレポはのsvn + sshのであると言う://ユーザ名@のsvn_server/SVN/your_repo
    とあなたのSVNリポジトリが "適切" なレイアウト(体幹、枝、タグ)を持っている ここワークフローは私です数ヶ月間使っています。
    1。svn_server/SVN/your_repo @ //ユーザ名: 'ます。mkdir your_repo'
    2.
    3.「のgitのsvnクローン-sのsvn + sshの 'CDがをyour_repo'。 '(ドットを気)
    4. [:)リポジトリのサイズによってはしばらく待ってください]
    今、あなたのGIT 『マスター』は、あなたがしたいようSVNトランク
    は、あなたも追跡ブランチを作ることができます追跡しますあなたには、いくつかのブランチで作業している場合、通常であなたのクローン
    7.「プッシュ」を「のgitのsvnが& &のgit、SVNはをリベースフェッチ」
    5.伝統的ながハック
    6.アップデートをハックハックのgitで行いますあなたのsvnへの変更は 'git svn dcommit

    もっと
    はあなたの.gitconfigで便利なエイリアス以下の定義良いもの:
    1.エイリアスのspull 'の略で、このようにSVNをプル:'!spull = gitのSVNのフェッチ& &のgitのsvnリベース
    2.エイリアスのspush 'は、このようなSVN-プッシュの略:'!spush = gitのはsvn dcommit "
    これらのエイリアスは、純粋な有効性にワークフローを回す: クローン/ハックハック/spull/spush - >利益

    のsvn:見た目は
    私は見つけることができませんでしたインターネットでこのための良い解決策は、自分自身を作った:)
    http://github.com/sushdm/git_svn_externalsそれは完璧ではありませんが、それは間違いなく命をはるかに簡単にする必要があります。

    私のためにうまく働く、それがあなたを助けてくれることを願っています。

    関連する問題