Edit
Gitとは。

プログラムなどのソースコード管理を行う分散型バージョン管理システム。動作速度に重点が置かれている。分散型の為、ファイルのロックという概念はなく、また、ソースコードでないもの、差分を判断できないバイナリファイルなどの共有・履歴管理では、問題が起きやすいので注意が必要。

Edit
利点

  1. ローカルにリポジトリのコピーを持つため、commit/updateが早い。
  2. commitなどが、ローカルが対象なので、気軽にcommitが行えるため、履歴情報を生かした調査やChallenge/Tryが簡単であり、ソースがfixした時点でサーバーに統合(push/pull)することで、共有する差分にコンパイルエラーや不正動作などのソースが残りづらい。
  3. 更新管理者のような、サーバーへの更新前に中間チェックを行うことができるなど、push/pullに階層構造がないため、ワークフローの構築が柔軟。
  4. すべてのリポジトリ情報が、ローカルにある為、サーバーへの接続回数や頻度が減る。またネットが繋がらない状態でも、commitなどの履歴管理機能が活用できる。
  5. 全員が同様のリポジトリの複製を持つため、障害に強い。

Edit
欠点

  1. 分散型ゆえの長所が短所にもなるため、逆から見ると、管理が煩雑になり、またリビジョン指定が分かりづらい、等の欠点を持つ。
  2. Subversionでは、commit/update だけでよかったが、自分のリポジトリへの更新はcommit/updateとなり、サーバーとの同期がpush/pullと2段階の更新が必要なため、慣れるまでに時間がかかる。
  3. 非同期分散型ゆえにロックができない。
  4. フォルダ単位でのユーザー別のアクセスコントロールが無い。というかそもそもGit自身にはユーザー管理すらない。
  5. Subversionでは、リポジトリの中の一部だけを、Checkoutなどができ、便利であったがGitは、リポジトリ単位でのみの管理となる。

Edit
サーバー

Gitにはサーバーという概念がそもそも存在しないが、実際の運用にあたっては、マスターリポジトリという形で管理が必要になるため、サーバーを設置したほうが良いだろう。

Edit
Install

# wget https://www.kernel.org/pub/software/scm/git/git-2.15.1.tar.gz
# tar zxvf git-2.15.1.tar.gz
# cd git-2.15.1
# ./configure --with-openssl=/usr/local/ssl --with-expat=/usr/local/src/expat-2.0.1
# make
# make install

Edit
クライアント

Edit
Windows

Edit
TortoiseGit

Subversionを長く利用してきたユーザーなら一番、相性が良いと思われるクライアントソフト。更新も頻繁にあり、プログラマーでなくとも利用できると思われる。

Edit
サーバーサイドにおける git の設定

サーバーサイドにおける git の設定は、push を行わないのであれば、web アクセスできる場所にリポジトリをアップするだけで完了する。但し push する場合には ssh 経由とするか、下記 SmartHTTP を利用して push できるようにする。

Edit
SmartHTTP の設定

SmartHTTPの設定は、通常の WevDav によるリポジトリファイルの公開方法に似ているが、アクセスをフックして、git-http-backend を起動させる事で利用することができる。

Edit
WEBサーバー、apache.conf の設定

LoadModule env_module modules/mod_env.so
LoadModule alias_module modules/mod_alias.so
LoadModule cgid_module modules/mod_cgid.so

ScriptAlias /git/  /usr/local/libexec/git-core/git-http-backend/
SetEnv  GIT_PROJECT_ROOT    /var/www/git/repos
SetEnv  GIT_HTTP_EXPORT_ALL

もしbasic認証をつけるのであれば、下記の行を追加

<Location /git>
       DAV                     On
       AuthType                Basic
       AuthName                "Git"
       AuthUserFile            /var/www/git/password.git
       Require                 valid-user
</Location>

※この設定で、http://localhost/git/<git-repos> にアクセスして、git リポジトリにアクセスできるようになる。

Edit
サーバー側、git リポジトリの作成について

git リポジトリには、ノンベアリポジトリとベアリポジトリの2種類のリポジトリがあるが、複数のアクセスがあるリポジトリは、ベアリポジトリとして作成しなければならない。よって、作成したリポジトリを確認し、ベアリポジトリに変更する。

# git config --get-all core.bare
false                                                        <- false ならノンベア
# git config --bool core.bare true               <- ベアに変更

リポジトリを作成する歳にもベア指定は可能

# git init --bare

httpからアクセスさせる場合には下記設定も必要

# git config http.receivepack true

またapacheからアクセスできるように所有者変更も忘れないようにする。

# chown -R apache:apache <git-repos>

ローカルからリモートに更新

# git push -u origin master

※ -u オプションを付けると、次回から git push だけで origin master で push する。

ローカルで -v を指定すると、その名前に対応する URL を表示します。

# git remote -v

Edit
httpsでのアクセスにおける問題点

上記のSmartHTTP を利用して、httpsでのアクセスをする場合、tortoiseGit を利用する場合に問題が発生する。tortoiseGitでは、ウェブのサーバー証明書を取得するにあたり、WindowsなどOSで管理している証明書を利用せず、独自のものを利用しているため、証明書エラーが発生する。そのため SSLverifyをfalse設定にする必要がある。gitが参照する証明書ファイルに自分のサーバーの証明書を追加する方法もあるが、これでも認識しない場合もある。

Edit
SubversionからGitへの移行

Edit
Authors.listの作成

Subversionでコミットしていたユーザー名を、gitのユーザー名に置き換える為のリストを作成。左が subversionの名前で、右がgitの名前(gitにはメールアドレスも指定する)

# vi authors.list
 hoge = hoge <hoge@hoge.com>
 fuga = fuga <fuga@fuga.com>

Edit
Gitの作成

# git svn clone -A authors.txt ../svn/repos/prj_3ds_dev repos/prj_3ds_dev

Edit
よくあるエラー。

Edit
Can't locate SVN/Core.pm in @INC

# yum install subversion-perl
# git svn clone svn://example.com/svn/repo