Git とファイルサーバーを使って小規模な分散バージョン管理システムを構築する -Windows 編-

ブログのテーマががっつり偏ってきた気がしますが、自分の興味関心のままに書いているので大目に見てくださいまし。

なお、Mac 編はありませんのであしからず1

やりたいこと

  1. Windows オンリーなネットワーク環境で
  2. インターネットへはアクセスせずに
  3. Git とファイルサーバーだけで
  4. 分散バージョン管理システムを

簡単に作ってみましょう。

想定読者

  • ソースコードのバックアップに不満がある
  • プログラミングを Windows で行なっている
  • 非公開であっても、ソースコードを他者のサーバーやサービスに保存したくない、できない
  • Git を使ったことがある、もしくは Git を使ってみる気がある

事前準備

まず、ファイルを読み書きできるファイルサーバーを用意しましょう。今回は Windows なので共有フォルダってやつですね2

次に、SourceTree をインストール、起動し、初期設定しておきましょう。Git 本体のインストールも行なってくれるので楽ちんです。

詳しい手順は -> Gitアプリの決定版!SourceTree for windowsがやってきた! ヤァ!ヤァ!ヤァ! - damelog を。今回の手順では使用しないので、「鍵を作る」の部分は飛ばしてしまいましょう。

分散バージョン管理システムを簡単に作ってみる手順

  1. パソコン上に Git リポジトリを作る
  2. リポジトリ内のファイルをコミットする
  3. パソコン上のリポジトリをファイルサーバーにクローンする

大きく分けると以上の3ステップです。順番に説明していきます。

パソコン上にリポジトリを作る


↑Git でバージョン管理するフォルダを作って3


↑SourceTree で Clone/New ボタンを押して出てくるウィンドウからそのフォルダを追加すると


↑Git リポジトリができあがります。SourceTree だとこんな表示


↑出来上がった Git リポジトリをエクスプローラーで表示させたところ。 .git というフォルダができていれば OK 。

リポジトリ内のファイルをコミットする


↑フォルダ内にバージョン管理したいファイルを作って


↑Add ボタンを使ってステージングエリアに追加して


↑Commit ボタンでコミットっ!!


↑変更の履歴が残り、めでたくコミット完了です。

パソコン上のリポジトリをファイルサーバーにクローンする


↑SourceTree 画面右上の歯車アイコンをクリック、ターミナルを起動して

1
2
$ git clone --bare . //<サーバーの>/<リポジトリにしたい>/<フォルダ>.git
$ git remote add origin //<サーバーの>/<リポジトリにしたい>/<フォルダ>.git

↑Git のコマンドを入力していきます。コマンドの内容を説明しておくと

  1. パソコン上に作成したリポジトリをサーバー上に複写
  2. パソコン上にあるリポジトリの分散先として、サーバー上に複写されたリポジトリを追加

となります。注意点として、まずはフォルダのパス。今回の例だと C:\easy_dvcs\ ですが、これは /c/easy_dvcs と読み替えるようにしてください。日本語含むとうまくいかないこともあるので気をつけましょう。

また、パスの末尾が .git となっていますが、これは Git のお作法なのでそのようにしておきましょう。<フォルダ>.git という名前のファイルが作られるわけではないのでお間違いなく。

続いて、ちゃんと追加できてるか確認しましょう。

1
2
$ git remote show origin
$ git push origin master

これらのコマンドを実行して以下のように表示されれば

1
2
3
4
5
6
7
8
9
10
11
12
$ git remote show origin
* remote origin
  Fetch URL: //<サーバーの>/<リポジトリ>/<フォルダ>.git
  Push  URL: //<サーバーの>/<リポジトリ>/<フォルダ>.git
  HEAD branch: master
  Remote branch:
    master new (next fetch will store in remotes/origin)
  Local ref configured for 'git push':
    master pushes to master (up to date)

$ git push origin master
everything up-to-date

完成!!!

お疲れさまでした。あとはサルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログなど眺めつつ、プッシュしたりリセットしたりしてみましょう。

つまづきやすいところ

  1. フォルダのアドレスに円マーク(\)
    文字化けの根源である Windows の円マーク(\)ですが、 Unix/Linux フレンドリーな Git でもそこが問題になります。SourceTree の開発元も認識はしているようですが、Git の問題でもあるので進展はなさそう…
    とりあえず、円マーク(\)はスラッシュ(/)で置き換えましょう。

  2. リポジトリに追加したファイルが、ファイルサーバー上に見当たらない
    Git のリモートリポジトリにはファイルの実体のみが圧縮され保存されています。サーバーのディスクスペースを節約する賢いやり方です。
    コミットし、プッシュしたはずのファイルがファイルサーバー上に見当たらず、「 Git つかえねー」と早とちりしたそこのあなた!git clone //<サーバーの>/<リポジトリ>/<フォルダ>.git して確認してみましょう。

蛇足


サルでもわかるGit入門 つらい、つらいのぅ

データの管理は一切合切こんな状態、その他諸般の事情により「GitHub でソーシャルコーディングヽ(・∀・ )ノ キャッ キャッ」 などということが夢のまた夢状態…

泣きを見るのは自分なのでソースコードだけは Git でバージョン管理してきましたが、データのありかは開発機のハードディスク。なんとか角を立てずにこのリポジトリを分散型に持っていきたいっ!!

ということで調べてみたら思ったより簡単に実現したのでちょっと拍子抜けしておりますが、これでこれからはゆっくり寝られそうです。ありがとう Git!!

参考


  1. 同じようにやれば Mac でも問題ない、というかむしろ Mac の方が確実に作業できるはず

  2. 個人なら NAS とか外付けハードディスク、法人なら社内向けのファイルサーバーってとこでしょうか

  3. この例ではCドライブ直下に easy_dvcs というフォルダを作りました