これは、私が現在 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 を使用して単一のファイルを取得することはできませんか?