GIT超入門!Subversionとの違いはなに?

DevOps

Giyとはソースコードの変更履歴を記録する分散型バージョン管理システムです。

以前はSVNなどが利用されていましたが、現在はGitが主流となってています。

GITとSVNの違いは?

従来の構成管理は中央集権型でした。

サーバーにある構成管理されたソースツリーを開発者の環境へ持ってきます。開発者はローカル環境で試行錯誤しながら、開発を行い、その結果を再びサーバーへコミットします。

これは、[開発者の手元にソースコードがある期間]に問題があります。

この期間ではローカルのファイル管理に任され、開発者が試行錯誤した結果が失われることがありました。

Gitはサーバーで構成管理していたソースコードを取得するところまでは同じです。

構成管理から外れるのではなく、開発者のPCに[引き継がれます]。開発者PCのGitによって構成管理されます。このように構成管理の主体がサーバーだけでなく、独立して開発者のPCでも行われるため、分散型の構成管理となります。

開発者側で管理されている間はサーバーと同期せずとも、サーバーと独立して開発者のPCの中でしっかり構成管理できていますので、修正にしろ、新機能の追加にしろ、開発者は存分にソースコードを改変できます。

時代に逆行している中、SVNの利点はありますでしょうか?

Subversionは仕組みがシンプル

Subversionは集中型でリポジトリがひとつです。Gitはリモートとローカルリポジトリの両方を意識しなければならず、Subversionよりも操作が複雑です。

リビジョン番号がわかりやすい

commitするとcommitを識別するためのリビジョン番号(ID)が振られます。Subversionは連番で分かりやすいですが、Gitでは分散リポジトリのためIDにハッシュ値が使われ分かり辛いです。

開発環境のネットワーク

subversionをGitに置き換えようと思ったいきさつも、現在開発場所と試験場所とがネットワークで結ばれていないとか、開発チーム(組織)が複数あってリポジトリを共有していないといった課題を解決するためです。

同じ共有リポジトリを常に利用できる環境でチーム開発をしている開発者にとっては一段手間が増えるだけでメリットを感じることが少ないです。

Gitとは

プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムです。

  • 分散型: 自分のマシンにリポジトリ(開発過程が保存されるデータベース)を持っている
  • バージョン管理システム:(複数人で)開発過程を記録しながら開発を行なうためのシステム

リモートリポジトリ

 専用のサーバに配置して複数人で共有するためのリポジトリです。

ローカルリポジトリ

 ユーザ一人ひとりが利用するために、自分の手元のマシン上に配置するリポジトリです。
 ファイルやディレクトリの追加・変更を、リポジトリに記録するにはコミットという操作を行います。(ステージングエリアのファイルをローカルリポジトリに登録 (commit)
リポジトリの内では、前回コミットした時の状態から現在の状態までの差分を記録したコミット(またはリビジョン)と呼ばれるものが作成されます。
 これらのコミットには、コミットの情報から計算された重複のない英数字40桁の名前が付けられています。この名前を指定することで、リポジトリの中からコミットを指定することができます。
コミットの実行時にはコミットメッセージの入力を求められます。コミットメッセージは必須となっているため、空のままで実行するとコミットが失敗します。
ローカルリポジトリに登録された情報をリモートリポジトリに追加(push)といいます。

 また、ステージングを間に挟むことで、ワークツリー内の必要ないファイルを含めずにコミットを行ったり、ファイルの一部の変更だけをインデックスに登録してコミットすることができます。

ブランチ

Gitには開発の本流から分岐し,本流の開発を邪魔することなく作業を続ける機能がある(ブランチ機能)

コミットオブジェクト:コミットに関する以下の要素を持つオブジェクト(データのまとまり)
ブランチ:直近のコミットで生成されたコミットオブジェクトを指すポインタ.複数作ることで分岐
HEAD:作業中の分岐のブランチを指すポインタ

独習Git

GIT使い方入門

GIT実践入門

まとめ

Gitはまだ奥深いですので、分かりしだい更新します。

タイトルとURLをコピーしました