CentOS7にSVNサーバ構築

SVNサーバの備忘録です。

 

SVNとはプログラムのソースなどを管理する集中型バージョン管理システムの1つです。

バージョン管理システムとして有名なものにGit(GitHub)がありますが、Gitは分散型バージョン管理システムです。

一昔前まではSVNが主流だったそうですが、最近ではGitのほうが主流になりつつあるのでしょうか。僕も学生のころは使ったことこそありませんでしたが、バージョン管理システムとしてGitの名前だけは知っていましたが、SVNは就職して初めて存在を知りました。

 

SVNとGitの違い

SVN(集中型)

1つのリポジトリ(※1)を全員で共有している。コミット(※2)はその1つのリポジトリ(※1)に対して行う。

Git(分散型)

ローカルリポジトリと共有リポジトリの2種類のリポジトリを持つ。まず、ローカルにリポジトリにコミットし、共有のリポジトリへはプッシュ(反映)して変更の反映を行う。

※1リポジトリソースコードなどの置き場所

※2コミット:変更の反映

 

Gitはコミットしてプッシュして2度手間なんじゃないかと思われた方、僕もそう思いました。しかし、正直SVNもGitをまともに使ったことがないです。上記の説明も他サイトを見て調べた程度ですので雰囲気で載せているので、信頼しないでください。

 

ということで、今回はSVNとGitを実際に使ってみて、メリット・デメリットを比較していこうと思います。そのために今回はSVNサーバの構築を備忘録として残しておこうと思います。

 

基本的に備忘録かつ構築済みの状態で思い出しながらの記事になるので、省略されていたりする部分もあると思いますがご了承ください。

 

SVNサーバ構築

SVNサーバー構築は、apacheがインストールされている前提で行います。

 

SVN用アカウントの作成

以下コマンドを実行。1つ目がsvnユーザの作成で2つ目がsvnのパスワードの設定。

# useradd svn

# passwd svn

 

SVNのインストール

以下コマンドを実行でインストール。

# yum update

# yum install subversion

 

リポジトリ作成

以下コマンドを実行でリポジトリの作成。

# mkdir -p /home/svn/repos/[プロジェクト名]

svn mkdir file:///home/svn/repos/[プロジェクト名]/trunk -m "create"

svn mkdir file:///home/svn/repos/[プロジェクト名]/branches -m "create"

svn mkdir file:///home/svn/repos/[プロジェクト名]/tags -m "create"

 

 
SVNリポジトリ構成

SVNリポジトリ構成はtrunk、branches、tagsの3つからなります。以下にそれぞれの説明を加えておきます。 

trunk

ソースファイルの本流。動作が保障されている開発中の最新バージョンが格納されている。

branches

開発を行う場合の作業場所。trunk内のソースファイルをコピーしてきてブランチを作成して作業を行う。

tags

特定の時期のtrunkを保管しておく場所。リビジョン番号がわからない、調べるのが手間といった場合にすぐに過去のtrunkを参照したいときなどに使う。

 

リポジトリの作成が終了したら以下のコマンドで確認。

# svn list file:///home/svn/repos/[プロジェクト名] 

apache経由でアクセスできるようにするためapacheに所有権を持たせておく。

# chown -R apache:apache /home/svn

 

Apacheの設定

mod_dav_svnのインストール

以下コマンドでmod_dav_svn をインストール。

yum install mod_dav_svn

 
subversion設定ファイルの編集

以下コマンドでsubversion設定ファイルの編集を行う。

<Location /svn/[プロジェクト名]>の部分は、URLのアドレスとなるためわかりやすい値を設定する。

http://ホスト名/svn/[プロジェクト名]

# vi /etc/httpd/conf.modules.d/10-subversion.conf

編集内容

<Location /svn/[プロジェクト名]/>
  DAV svn
  SVNPath /home/svn/repos/[プロジェクト名]/

</Location>

 

apacheの再起動

以下のコマンドでapacheの再起動。

# systemctl restart httpd

ブラウザからアクセスするとリポジトリが表示されます。

アクセス:http://ホスト名/svn/[プロジェクト名]

 

BASIC認証の設定

BASIC認証(ユーザ名とパスワードの組み合わせで認証)を設定します。

認証アカウント・パスワードの設定。

以下コマンドでアカウント・パスワードを設定します。今回はhtpasswd で認証アカウントの作成を行いますが、平文でも大丈夫なようです。

htpasswd -b /home/svn/repos/[プロジェクト名]/conf/.htpasswd [アカウント名] [パスワード]

設定ファイルの編集。

# vi /etc/httpd/conf.modules.d/10-subversion.conf

<Location /svn/[プロジェクト名]/>
  DAV svn
  SVNPath /home/svn/repos/[プロジェクト名]/

#add start
  Require valid-user
  AuthType Basic
  AuthName "Subversion repository"
  AuthUserFile /home/svn/repos/[プロジェクト名]/conf/.htpasswd

#add end
</Location>

 

SELinuxの無効

SELinuxを無効にしないとコミットにできないので、以下コマンドでSELinuxを無効にします。

vi /etc/selinux/config

SELINUX=enforcing

しかし、SELinuxを無効にしてしまうとセキュリティ的によろしくないので、この部分は追々、改善していきます。

 

TortoiseSVNのインストール

SVNサーバは構築できましたが、開発はWindowsなどで行うのが多いでしょう。そんなときに便利なものがTortoiseSVNです。TortoiseSVNオープンソースWindows版クライアントです。

以下のリンクからダウンロードできます。

ja.osdn.net

日本語のランゲージパックのダウンロード。(2018/02/05時点の最新)

ja.osdn.net

インストール完了後、設定から言語を選択できるようになります。

 

BASIC認証を設定しているので、設定したアカウントでログインできれば成功です。