39

私は Git に比較的慣れていませんが、自宅で作業するのがとても簡単であることがわかったので、プロジェクトが Svn リポジトリに保存されている職場で使用したいと考えています。残念ながら、レポジトリは少し標準的ではないため、クローンを作成するのに苦労しています。確かに、それらにはすべてトランク、ブランチ/、タグ/がありますが、ブランチ/とタグ/には実際のプロジェクトディレクトリに到達する前にサブディレクトリがあります:

trunk/
branches/maintenance/release1
branches/maintenance/release2
...
branches/development/feature1
branches/development/feature2
...
tags/build/build1
tags/build/build2
...
tags/release/release1
tags/release/release2

クローニング後:

$ git svn clone -s --prefix=svn/ https://mydomain.com/svnproject
$ git branch -r
  development
  development@1340
  maintenance
  maintenance@1340
  tags/build
  tags/build@1340
  tags/release
  tags/release@1340
  trunk
  trunk@1340 

実際のプロジェクト ブランチやタグは取得できません。実際には、トランク、1 つのメンテナンス ブランチ、1 つの開発ブランチで作業できる必要があります。構成を変更する際のいくつかのハックに加えて、このアプローチを試しましたが、何も機能していません。

非標準の Svn プロジェクトの主要なコンポーネントをローカルの git リポジトリに取得して、それらの間を簡単に移動できるようにする方法はありますか?

どうもありがとう。

更新: Git への大規模な切り替えは (まだ) できないことを付け加えておきます。他のチームメンバーが関与しており、国際的な存在感があります。移行のロジスティクスは、Git に慣れるまで、私が喜んで引き受ける以上のものです。私が言ったように、私はまだかなり新しいです。私はその機能の表面をかろうじてかじったにすぎません。

4

3 に答える 3

38

李Bは正しかった。#git で doener によって提供された答えは、Git を 1.6.x にアップグレードすることです (私は 1.5.x を使用していました)。1.6.x はディープ クローニングを提供するため、オプションで複数のワイルドカードを使用でき--branchesます。

$ git svn clone https://svn.myrepos.com/myproject web-self-serve \ 
          --trunk=trunk --branches=branches/*/* --prefix=svn/
$ git branch -r
  svn/development/sandbox1
  svn/development/feature1
  svn/development/sandbox2
  svn/development/sandbox3
  svn/development/model-associations
  svn/maintenance/version1.0.0
  svn/trunk

まさに私が必要としていたもの。洞察をありがとう、すべて。

于 2009-02-21T19:40:00.150 に答える
14

svn を git リポジトリにインポートするために、nirvdrum の svn2git (最新のようです)を試していただけますか?
(2009 年の初めに、Paulは、この元の jcoglan の svn2git の代わりに、このiteman の svn2gitについて言及しました。これは、彼の著者が言及したように、「私のコードを Subversion から取り出すための簡単なハック」でした)

git svn clonesvn に次のコードがある場合よりも優れ ています。

  trunk
    ...
  branches
    1.x
    2.x
  tags
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0

git-svnコミット履歴を調べて、新しい git リポジトリを構築します。
すべてのブランチとタグをリモート svn ブランチとしてインポートしますが、本当に必要なのは git-native ローカル ブランチと git タグ オブジェクト です
したがって、このプロジェクトをインポートすると、次のようになります。

  $ git branch
  * master
  $ git branch -a
  * master
    1.x
    2.x
    tags/1.0.0
    tags/1.0.1
    tags/1.0.2
    tags/1.1.0
    tags/2.0.0
    trunk
  $ git tag -l
  [ empty ]

プロジェクトで svn2git が完了すると、代わりに次のようになります。

  $ git branch
  * master
    1.x
    2.x
  $ git tag -l
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0

もちろん、このソリューションは一方通行ではありません。

いつでも svn リポジトリに戻ることができます... git2svn (そこにもあります)

アイデアは残っています:

  • SVN は中央リポジトリとして機能します。

  • 「他の場所」で Git を使用して、複数の Git プライベート ブランチ間ですばやく実験できます。

  • 統合された Git ブランチのみを公式の SVN ブランチにインポートします。

于 2009-02-21T12:31:48.947 に答える
9

プレーンなワイルドカードで提供されないレポ レイアウトの場合: (この関連する質問に対する私の回答から)

現在のgit-svn マンページには次のように書かれています。

中かっこ内の名前のコンマ区切りリストを使用して、ブランチまたはタグのサブセットを取得することもできます。例えば:

[svn-remote "huge-project"]
     url = http://server.org/svn
     fetch = trunk/src:refs/remotes/trunk
     branches = branches/{red,green}/src:refs/remotes/branches/*
     tags = tags/{1.0,2.0}/src:refs/remotes/tags/*
于 2011-05-23T23:58:40.480 に答える