20

これは、私が現在 svn プロジェクトに使用しているワークフローです (私は svn ブランチを使用したことがなく、一部のプロジェクトでは他の人も積極的に取り組んでいます):

  • サーバー上で、git svn fetch数時間かかる可能性のある初期化を行います。「ビルド」ブランチも作成します。
  • 開発マシンでのクローン作成は高速になりました。git clone srv://project.git, git checkout buildその後git update-refs ..., git svn fetch、svn リポジトリへのリンクを復元します。
  • 作業、コミット、作業コミット、...
  • 物事が正常かどうかをgit push buildサーバーに確認し、そのブランチの Hudson でビルドをトリガーする
  • 別のマシンから作業できるように作業を保存し、ビルドブランチもプッシュします
  • 満足したら、コミットを論理的な手順 (バグごとに 1 つなど) で結合し、svn にコミットして、次のようにすべてをリセットします。git checkout master, git merge build, git svn dcommit, git push, git checkout build, git rebase master, git push build

svn externals と入力します。ここですべてのスクリプトを既に試しましたが、すべて失敗します。私の外部は次のように設定されています:

/path/to/x x
/path/to/y/z y/z
/path/to/a/b.file a/b.file

/path/to/xスクリプトは、ファイルシステムのルートに作成しようとしたり、 git svn fetch /path/to/x. また、単一のファイルはより多くの問題を引き起こすようです。(サブ質問 1: これらのスクリプトが当時書かれた svn:externals 形式は何ですか?)

私の状況を処理し、ディレクトリ構造を正しく複製するためにスクリプトの1つを変更するのは難しいようには見えませんが、大きな問題が残ります.xとy/zの両方でファイルを変更した場合これを 1 つの svn コミットに結合する方法がわかりません。これが、そもそも git を使い始めた理由の 1 つです。

したがって、質問:ルートでsvn dcommitを実行できるように、特定のsvnリポジトリの一部のみを使用して、上記のワークフローを複製できる方法はありますか? Linux と Windows の両方で動作する、すぐに使えるソリューションが望ましいと思います。

edit見つけたスクリプトの 1 つをすばやくハッキングし、svn 外部のディレクトリ構造を複製するようにしました。ただし、単一のファイルを複製することはできません。出力は次のとおりです。

git svn clone -r HEAD srv://svn/repo/path/to/projects.sln
Initialized empty Git repository in xxx/projects.sln/.git/
Invalid filesystem path syntax: REPORT request failed on '/svn/repo/!svn/vcc/default':
  Cannot replace a directory from within at yyy/git/libexec/git-core/git-svn line 5114

サブ質問 2: git svn を使用して単一のファイルを取得することはできませんか?

4

2 に答える 2

14

残念ながら、svn の外部機能は非常に柔軟です。それらを <path> <url> として扱う多くのスクリプトに出くわしましたが、 <url> <path> も許可されています。そのため、一部のスクリプトはその点で壊れていると思います。

2 番目のサブ質問に答えるには: いいえ。「git svn fetch」は、Subversion のリポジトリのサブツリーで操作する必要がありますが、ブランチのように扱えるものである必要があります。そのパラダイムに適切に対応する唯一のものは、ディレクトリ (たとえば、trunk/) です。FWIW、Bazaar、Mercurial もここで苦しんでいます。結局のところ、Subversion は単なるバージョン管理されたファイル システムですが、Git にはブランチという第一級の概念があります。これは、邪魔になるミスマッチの 1 つです。:-(

于 2011-04-05T01:55:18.050 に答える
1

2番目のサブ質問に関するもう1つのメモ。私の知る限り、今日のSubversionは、ファイルのsvn外部をサポートしておらず、フォルダーのみをサポートしています。したがって、プロパティのそのようなエントリは無効になると思います。このケースを処理するツールがあるかどうかわからない。

于 2013-01-31T19:48:20.763 に答える