4

まず最初に、プロジェクトのセットアップをお見せしたいと思います。2 つのプロジェクトがあります。

  • プロジェクト X: git svn clone を使用してリモート svn サーバーから複製
  • プロジェクト y: GitHubにあります

プロジェクト X はプロジェクト y を git サブモジュールとして参照します。

-- Project X
  -- src/
    -- myCode1/
    -- *Project y Submodule*
    -- myCode2/
  -- .git/
  -- ...

ここで、 git svn dcommitを使用して、ローカルで完了したコミットをリモート svn サーバーに「プッシュ」したいと考えています。
そのプロジェクト構造の正しいワークフローを誰か説明してもらえますか?


ローカルの git リポジトリを svn サーバーから更新する場合は、実行git svn rebaseして次を取得します。

エラー: 次の追跡されていない作業ツリー ファイルは、チェックアウトによって上書きされます

Git はサブモジュールのすべてのファイルを一覧表示しますが、ローカル リポジトリに既にあるサブモジュールを追跡しました。
アイデアや提案はありますか?

4

1 に答える 1

2

私の経験から、git-svn は Git サブモジュールでは動作しません。これは主に、変更を SVN に送信する方法が原因です。少しデバッグすると、デルタが SVN に送信されることがわかります (したがって、サブモジュールのような純粋な Git の概念はは翻訳されていません)、送信されたばかりのリビジョンをフェッチし (したがって、このリビジョンにはサブモジュールが含まれていません)、結局、送信されたばかりのコミットをフェッチされたバージョンに置き換えます (したがって、最良の場合、サブモジュールはこのプロセスで失われますが、私の経験から)以前に失敗するだけです)。したがって、追跡されていないディレクトリ「Project y Submodule」を作成し、サブモジュールとしてではなく手動で管理できる場合。

または、git-svn の代替としてSubGitを試すこともできます。2.0 EAP 以降、リモート SVN リポジトリの Git ミラーを作成できます。

$ subgit configure --svn-url http://svnhost/svnpath/projectX projectX.git
$ #adjust projectX.git/subgit/{config,authors.txt,passwd} and, if possible, enable rev-propchange-hook in SVN repository
$ subgit install projectX.git

その後、projectX.git をクローンして、通常の Git リポジトリと同様に操作すると、同期が自動的に実行されます。したがって、インストール後にProject y Submodule を projectX.git の通常の Git サブモジュールとして追加します。

$ git submodule add git://github.com/.../projectY.git projectY
$ git commit -m "Added projectY as submodule"
$ git push

唯一すべきことは、SVN にそのような名前のファイルまたはディレクトリがないことを確認することです。そうしないと、サブモジュールが上書きされます。

于 2012-12-19T16:51:34.973 に答える