でんかのブログ

テクニカル系ネタをメインに、つれづれなるままに書いていきます。

VSSからの卒業…そしてGitへ…!

f:id:denkas:20150207230733j:plain

Visual Studio 2013がGitに対応したのを受けて、さらにGitHubでの公開も視野に入れてたのもあり、自宅のソース管理をこれまでのVSSからGitへ移行しました。(`・ω・´)

本当は履歴情報も一緒に持っていければと思ったものの、VSSのリポジトリデータベースを消さないでおけばよいのと、VM上に古いVisual Studioの開発環境を構築したので、そっちに持っていけばいいやというワケで、ソースだけ移行して心機一転まっさらな履歴情報にするコトにしました(笑)(^-^;

GitHubを使うという目的はあるものの、自宅にPush先が無いのもイヤだったので、自宅サーバ上でgit-daemonを動かすコトにしました。Windows上でのGitリポジトリ操作用には“SourceTree”を使うことにしました。(`・ω・´)

SourceTree : https://www.atlassian.com/ja/software/sourcetree/overview

加えて疑問点などを職場の同僚なGitエキスパートな方にいろいろ質問して解決した後に移行作業を始めましたが…意外と茨の道でした…(;´∀`)

そんなワケで、自分への備忘録と同じ道を歩もうとする方への道しるべがてら、手順などまとめておきます。(・∀・)

Gitサーバ構築編

認証機能が必要だと思ったのでHTTPベースにしました。HTTPSにしたい場合もGit側的には同じで、Virtual Hostの設定でSSLにするだけです。OSはCentOS6系を使っていますが、CentOS7系でも同じにできる事を確認しています。(・∀・

  1. git-daemon パッケージインストール

     # yum install git-daemon httpd
    
  2. gitサービス有効化

    当初動作確認にgitプロトコル使ってたので入れてましたが、HTTPだけ使うなら不要です。

     # chkconfig git on
     # chkconfig xinetd on
     # chkconfig xinetd restart
    
  3. リポジトリ作成

     # cd /var/lib/git/
     # mkdir public_git
    

    ついでなのでVisual Studioのプロジェクト用にリポジトリを作っておきます。プロジェクト名は“SimpleMP3Player”です。

    なお、Gitリポジトリのディレクトリはプレフィックスとして“.git”を付けるケースが多いですが、Gitエキスパートな同僚の方によると、Gitリポジトリだとわかりやすくするためで必須ではない、とのコトでしたのでVisual Studioに合わせておきます(もちろん付けてもOK)。

     # cd public_git
     # mkdir SimpleMP3Player
     # cd SimpleMP3Player
     # git --bare init --shared
    

    Apacheから読み書きできないと不幸な結果になりますので、ここでパーミッション変えておきます。あとApacheから見えるようシンボリックリンクを作成しておきます。

     # chown apache:apache -R .
     # ln -s /var/lib/git/public_git /var/www/html/git
    
  4. Apache設定

    最初にVirtual Hostの設定を入れます。ここでは8081番ポートをGitアクセス専用にしています。

    • /etc/httpd/conf.d/git.conf作成

       <VirtualHost *:8081>
         ServerAdmin root@localhost
         ErrorLog logs/git.host-error_log
         CustomLog logs/git.host-access_log combined
      
         SetENV GIT_PROJECT_ROOT /var/lib/git/public_git/
         SetENV GIT_HTTP_EXPORT_ALL
         ScriptAlias /git "/usr/libexec/git-core/git-http-backend/"
      
         <Location /git>
           DAV on
           AuthType basic
           AuthName "Authorization Realm"
           AuthUserFile /etc/httpd/conf/.htpasswd
           Require valid-user
           Order allow,deny
           Allow from all
         </Location>
       </VirtualHost>`
      
    • パスワードファイル生成

        # htpasswd -c /etc/httpd/conf/.htpasswd denka
      
    • /etc/httpd/conf/httpd.conf 修正

        #
        # Listen: Allows you to bind Apache to specific IP addresses and/or
        # ports, in addition to the default. See also the <VirtualHost>
        # directive.
        #
        # Change this to Listen on specific IP addresses as shown below to
        # prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
        #
        #Listen 12.34.56.78:80
        Listen 80
        Listen 8081 ←追加
      

    Gitサーバ側はこれで完了です!(^o^)/

VSSプロジェクト移行編

前提条件としてVSSのリポジトリデータベースは残して、履歴が必要ならそこで閲覧するコトにしたので、履歴情報の移行はしないものとしています。またチェックアウト中のファイルは全てチェックインしておいた方が無難です。(´・ω・`)

  1. ソリューションのコピー

    Visual Studio 2013のProjectsフォルダに対象のソリューションをフォルダごとコピーします。

  2. 読み取り専用解除

    VSS管理されていると読み取り専用になっているので、サブフォルダもまとめて読み書き可能にします。

  3. VSSのファイル削除

    隠しファイルも表示されるようにしておきます。

    f:id:denkas:20150207223231j:plain

    VSS管理すると生成されるファイルをすべて削除します。“vssver2.scc”“.scc”というファイルを検索して、全て削除します。

  4. ソリューションファイルの修正

    “プロジェクト名”.slnなファイル名のファイルをテキストエディッタで開き、以下のようなブロックを削除します。

     GlobalSection(SourceCodeControl) = preSolution
       SccNumberOfProjects = 2
       SccLocalPath0 = .
       SccProjectUniqueName1 = SimpleMP3Player\\SimpleMP3Player.vcxproj
       SccLocalPath1 = .
       SccProjectFilePathRelativizedFromConnection1 = SimpleMP3Player\\
     EndGlobalSection
    
  5. プロジェクトファイルの修正

    拡張子“.vcxproj”なファイルを検索し、テキストエディッタで開いて以下のような“Scc”の付く行を全て削除します。

     <SccProjectName>"$/SimpleMP3Player/SimpleMP3Player", HSAAAAAA</SccProjectName>
     <SccLocalPath>..</SccLocalPath>
     <SccProvider>MSSCCI:Microsoft Visual SourceSafe</SccProvider>
    
  6. Visual Studioのソース管理プラグイン変更

    Microsoft Git Provider”に変更します。

    f:id:denkas:20150207223232j:plain

  7. ソリューションを開いてソース管理へ追加

    先ほどもろもろを修正したソリューションを開いて、以下のようにソース管理へ追加します。

    f:id:denkas:20150207223234j:plain

    以下のようなダイアログが出た場合はOKを押下します。

    f:id:denkas:20150207223235j:plain f:id:denkas:20150207223237j:plain

  8. ファイルをコミット

    ソリューションエクスプローラのソリューションで右クリックして[コミット]します。

    f:id:denkas:20150207223238j:plain

    チームエクスプローラの画面に変わったら、図中の赤印のところにコメントを記入し、その下にある[コミット]をクリックします。

    f:id:denkas:20150207223240j:plain

  9. リモートリポジトリへPush

    先ほど構築したGitサーバのリポジトリへPushするには、“同期されていないコミット”で“リモートリポジトリに発行”します。“分岐”メニューから“発行されていない同期”で右クリックでも発行の画面に飛びます。

    f:id:denkas:20150207223241j:plain f:id:denkas:20150207223243j:plain

  10. SourceTreeから確認

    リポジトリをクローン”から元のパス/URLに、先ほどのGitサーバのURLを記入して“これはGitリポジトリです”と表示されたらPushできています。

    f:id:denkas:20150207223244j:plain

    この画面を一度閉じて、[開く]メニューからソリューションのフォルダを開くと、SourceTreeからもリポジトリを参照できるようになります。

    f:id:denkas:20150207223246j:plain