からくりブログ

株式会社からくり社員のブログです

SVNからGitへの移行について調べる②

はじめに

前回git svnを使うとsvnとgitの橋渡しができると言う事に触れました。今回は実際にsvnリポジトリからgitのローカルリポジトリにクローンを作成し、変更対象のファイルを編集した後で最後に git ローカルリポジトリ から svnリポジトリ にコミットする迄の操作を追っていきたいと思います。尚、今回は前述の操作をコマンドラインではなく、全てGUIからの操作で実現したいと思います。

今回使用するGUIツール

  • TortiseSVN
  • TortiseGit
  • Visual Studio Code
上記のツール類のインストール方法や使用方法については他に沢山説明しているサイトがあるので、各々で検索して参考にしてみて下さい。

操作の流れ

今回行う操作の大まかな流れを図Aに示します。 図A の「svnでの操作の流れ」を「git svnを使用した場合」を中心に説明していきます。 図A 中の「サーバー」はsvn側のリポジトリの事を指しています。
図A

svn側リポジトリの階層構造

さて、実際の操作の説明に入る前に操作の対象となるsvn側リポジトリの階層構造を見ておきたいと思います。図Bを見てください。
図B
test配下にsvnでお馴染みの「branches」「tags」「trunk」が配置されています。git側からいきなりtrunkにコミットするのは流石にリスクが高いと思われるので、 ここでは「branches」 配下に「BranchforGit」と言うgit側からのコミットを受けるブランチを切っています。適当なタイミングでtrunkとマージするとよいでしょう。

svnリポジトリのクローンを作成する

操作はいたって簡単でエクスプローラーで任意のフォルダで右クリックメニュー(図C)から、Gitクローン(複製)を選択してください。
図C
すると図Dのダイアログが表示されるので、必要項目を設定し、OKボタンを押します。ここではBranchforGitのみを複製するように設定にしています。
図D
svnの場合の作業コピーを作る操作であるチェックアウトに相当するのがgitのクローン作成に当たりますが、svnと根本的に異なるのが、名前の通りリポジトリの複製をローカルに作ると言う動作となります。出来上がったものは作業コピーではなくリポジトリな訳ですから当然そこにコミットしたり、そこからブランチを切ったりと言った操作が可能になります。

ソースコードの編集からローカルコミットまでの操作

ソースコードの編集 から ローカルコミットまでの操作はVisual Studio Codeで行います。まずは編集対象であるファイルを図Eのように Visual Studio Code で開きます。
図E
開いたソースコードはPythonのコードで、これを修正して0~9までを1文字ずつ表示するプログラムに修正します。編集前と編集後の差分は Visual Studio Code 上で図Fのように簡単に比較できます。
図F
ローカルリポジトリにコミットする前に対象ファイルのステージング(図G)を行います。 (自動でステージングするようにする事も可能です) [ソース管理ビュー]に移動して対象ファイルの横の[+]で操作(赤丸で囲んだ部分)できます。
図G
ローカルコミットは図Hの[✓]で操作(赤丸で囲んだ部分)できます。 また図HのようにメニューからもGitの様々な操作を行う事が可能です。
図H
TortiseGitのログメッセージ(図I)でローカルコミットの状況を確認してみます。
図I

最後にsvnリポジトリにコミットする

いよいよgitのリポジトリからsvnリポジトリにコミットします!と力んでますが非常に簡単です。 TortiseGitの右クリックメニュー(J)から、SVNへコミット(リモートへ反映)を選択してください。
図J
図Kのようにダイアログが表示されGitコマンド(dcommit)が実行されsvnリポジトリにコミットされます。
図K
TortiseSVNでログメッセージを確認してみましょう(図L
出来ましたね!今回の調査でsvn環境でgitを使う為のスタートラインには立てたのではないかと思っています。それでは・・。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>