プログラムなどのソースコード管理を行う分散型バージョン管理システム。動作速度に重点が置かれている。分散型の為、ファイルのロックという概念はなく、また、ソースコードでないもの、差分を判断できないバイナリファイルなどの共有・履歴管理では、問題が起きやすいので注意が必要。
Gitにはサーバーという概念がそもそも存在しないが、実際の運用にあたっては、マスターリポジトリという形で管理が必要になるため、サーバーを設置したほうが良いだろう。
# 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
Subversionを長く利用してきたユーザーなら一番、相性が良いと思われるクライアントソフト。更新も頻繁にあり、プログラマーでなくとも利用できると思われる。
サーバーサイドにおける git の設定は、push を行わないのであれば、web アクセスできる場所にリポジトリをアップするだけで完了する。但し push する場合には ssh 経由とするか、下記 SmartHTTP を利用して push できるようにする。
SmartHTTPの設定は、通常の WevDav によるリポジトリファイルの公開方法に似ているが、アクセスをフックして、git-http-backend を起動させる事で利用することができる。
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 リポジトリにアクセスできるようになる。
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
上記のSmartHTTP を利用して、httpsでのアクセスをする場合、tortoiseGit を利用する場合に問題が発生する。tortoiseGitでは、ウェブのサーバー証明書を取得するにあたり、WindowsなどOSで管理している証明書を利用せず、独自のものを利用しているため、証明書エラーが発生する。そのため SSLverifyをfalse設定にする必要がある。gitが参照する証明書ファイルに自分のサーバーの証明書を追加する方法もあるが、これでも認識しない場合もある。
Subversionでコミットしていたユーザー名を、gitのユーザー名に置き換える為のリストを作成。左が subversionの名前で、右がgitの名前(gitにはメールアドレスも指定する)
# vi authors.list hoge = hoge <hoge@hoge.com> fuga = fuga <fuga@fuga.com>
# git svn clone -A authors.txt ../svn/repos/prj_3ds_dev repos/prj_3ds_dev
# yum install subversion-perl
# git svn clone svn://example.com/svn/repo