LogoMark.png

Git の変更点


#author("2019-09-25T10:29:37+09:00","default:inoue.ko","inoue.ko")
*Git
Git + Gitクライアント + OSSホスティングサービス
~


Git(ギット)とは、プログラムソースなどの変更履歴を管理する分散型のバージョン管理システム(VCS:Version Control System)のことで、もともとはLinuxの開発で使用されていたものですが、近年では世界中で利用される標準的な技術となっています。
~

***CONTENTS
#contents2_1
~

**はじめに
従来のバージョン管理システムは、サーバー上にある1つのリポジトリ(データの溜池)を共同で使っており、利用者が増えると変更内容が衝突するなどの問題もありましたが、GitではローカルPCに変更履歴を含む完全なリポジトリの複製が作成できることで、オフラインでの作業も可能になるなど、分散的な共同作業がやりやすくなっています。

Gitそのものは、ターミナル(コンソール)からコマンドを入力して利用するものなのですが、一般にはこれをGUI操作できる SourceTree や、 [[GitHub Desktop>https://desktop.github.com/]] といったアプリケーションを利用してバージョン管理を行います。

-Windowsの場合
Gitの公式サイトからGitインストーラーをダウンロードしてインストールして使います。以下のツールがあわせてインストールされます。
--GitGUI:Gitをマウス等で操作できるツール
--GitBash:Gitをコンソールで操作するツール

-Macの場合
Git自体は標準でインストール済みです。[[Macのターミナル>Google:Mac ターミナル]]からコマンド操作で利用したい場合は、コマンドライン・ディベロッパー・ツールのインストールが必要です。

-Git 公式サイト https://git-scm.com/
-サルでもわかるGit入門 https://www.backlog.jp/git-guide/
~
~

**Gitのキーワード
#image(Fig03.png,right,30%)
右図は分散型バージョン管理システムのイメージです。Gitを利用するには、図中にある用語の理解が重要です。
~

***リモートリポジトリ
分散型バージョン管理システムのリポジトリは、リモートリポジトリとローカルリポジトリの2種類に分けられます。リモートリポジトリは、ファイルを複数のメンバーで共有するために、ホスティングサーバに設置された場所のことです。後述する GitHub や Bitbucket というのは、リモートリポジトリのホスティングサービスです。Gitは管理するためのソフト、GitHubは管理されるデータを置くためのサービスです。初心者の方は、これを混同してわけがわからなくなることが多いので、注意しましょう。
~

***ローカルリポジトリ
ファイルを個人で管理するために自分のPC上に設置された場所のことです。
 リポジトリをリモートとローカルの2種類に分けることで、普段の作業はローカルリポジトリを使ってPC上で行う、作業内容を公開したい時は、リモートリポジトリにアップロードする。また、リモートリポジトリを通して他のメンバーの作業内容を取得する・・といったことができるようになります。

#image(Fig08.png,right,30%)
右図(クリックで拡大)は、SourceTree(後述)でローカルリポジトリを作成した例です。通常のフォルダ閲覧では、作業ファイルが見えるだけですが、ターミナルを用いてフォルダ内の隠しファイルを表示すると、そこに .git というディレクトリが見えます。更新履歴はその中に格納されています。     
~

***Commit コミット
#image(Fig08.png,right,30%)
ファイルやディレクトリの追加・変更を、リポジトリに記録する操作をコミットと言います。右図(クリックで拡大)は、SourceTree(後述)上でのファイルの変更からコミットまでの様子です。
~

***WorkTree ワークツリー
Gitの管理下に置かれた、作業ディレクトリ(フォルダ)のことです。
~

***Index インデックス
リポジトリとワークツリーの間に存在して、リポジトリにコミットするための索引を準備する場所のこと。コミット対象のファイルを索引に追加する操作は、「ステージング」「コミット予定」「管理対象」などと言います。

 Gitでは、コミットを実行した時にワークツリーから直接リポジトリ内に状態を記録するのでなく、その間に設けられているインデックスの設定された状態を記録するようになっているので、コミットしてファイルの状態を記録するには、はじめにインデックスにファイルを登録する必要があります。
~

***Push プッシュ
ローカルリポジトリ内の変更履歴をリモートリポジトリにアップロードすることを Push といいます。Pushを実行すると、リモートリポジトリ内の変更履歴がローカルリポジトリの変更履歴と同じ状態になります。
~

***Pull プル
リモートリポジトリを複数人で共有すると、メンバー全員がそこへプッシュしてきます。当然、自分のローカルリポジトリにも、ほかの人がプッシュした変更内容を取り込む必要があります。それが、Pull操作です。これを実行すると、リモートリポジトリから最新の変更履歴をダウンロードしてきて、ローカルリポジトリにそれを反映させます。
~

***Clone クローン
リモートリポジトリの内容をローカルリポジトリに複製する操作。ローカルには新しいものが追加される・・という点で Pull とは異なります。

~
~





**Gitクライアント

***GitHub Desktop
[[GitHub Desktop>https://desktop.github.com/]]は、GitHub が提供しているデスクトップアプリケーションで、 GitHub を利用した開発を簡単にするための Git のフロントエンドツールです。個人のプロジェクトをGitHub公開とローカルPCとで連携するには、これが最も使いやすいと思います。
参考:[[Google: GitHub Desktop 使い方]]
~

***Atom
[[Atom>https://atom.io/]] は GitHub社で開発されているオープンソースのテキストエディタです。バージョン1.18以降、Git / GitHub 連携機能が標準で使えるようになっています。日常的にAtomエディターを使っている方は、これも検討候補になるかと思います。
参考:[[Google: Atom Git 連携]]
~

***SourceTree
[[SourceTree>https://ja.atlassian.com/software/sourcetree]]は、Bitbucketの提供を行っているAtlassian社が提供する無料のGitクライアントソフトで、Gitクライアントの定番です。グラフィカルなインターフェイスを備えており、リポジトリの操作を視覚的に行う・・つまりGUI操作でGitコマンドを実行してくれるソフトです。
 バージョン管理システムとしては、Gitだけでなく、Mercurial(hg)にも対応しています。
参考:[[Google: SourceTree 使い方]]

~
~



**OSSホスティングサービス
リモートリポジトリを提供するサービス。当然ですが、その利用にはアカウント登録が必要です。
~

***GitHub
[[GitHub(ギットハブ)>https://github.com/]]は、GitHub社という会社によって運営されているOSSホスティングサービスで、Gitの仕組みを利用して、自分の成果物を保存、公開することができるようにしたものです。
 オープンな開発、つまり公開されてもよい・・というものであれば、無料で利用することができます(非公開リポジトリの利用は有料)。
-記事を独立させました。> [[GitHub]]
~

***Bitbucket
[[Bitbucket(ビットバケット)>https://bitbucket.org/]]は、オーストラリアのソフトウェア会社Atlassianによって運営されている GitHub と同様のホスティングサービスで、バージョン管理システムとしては Git 以外に Mercurial を選ぶこともできます。
デフォルトは非公開で、5ユーザーまでであれば、非公開レポジトリの数は無制限で利用できます。Web開発では、こちらの方が向いていると言われます。
~

***その他のOSSホスティングサービス
-[[SourceForge.net(ソースフォージ・ドットネット)>https://sourceforge.net/]]
オープンソースの開発において管理と制御の中心的役割を担うサイト
-[[OSDN(オーエスディーエヌ)>https://ja.osdn.net/]]
日本のオープンソースプロジェクト向けのホスティングサイト
[[PukiWiki]]はここで公開されています。> https://pukiwiki.osdn.jp/
-[[Google Developers>https://developers.google.com/]]
Googleが関連するソフトウェアやオープンソースのソフトウェア開発者向けに立ち上げたサイト。オープンなコードや、標準のAPIをサポートするサービス群があります。

~
~

**Git の基本的なコマンド

-リポジトリの作成およびメンテナンス
git init:リポジトリを作成する
git clone:既存のリポジトリの複製を作る
git fsck:リポジトリの正当性チェックを行う
git gc:リポジトリ内の不要なオブジェクトを削除し、最適化を行う

-作業ツリーやブランチの操作・管理
git status:変更が加えられたファイルを表示する
git diff:ファイルに加えられた変更点をdiff形式で表示する
git add:コミットするファイルを指定する(ステージへの移動)
git commit:変更点をコミットする
git log:コミットログを閲覧する
git reset:直前のコミットを取り消す
git revert:作業ツリーを指定したコミット時点の状態にまで戻す
git branch :ブランチ情報の表示およびブランチの作成
git checkout:ブランチの切り替え
git show-branch:ブランチの作成/変更/マージ履歴を表示
git merge:ローカルブランチのマージを行う
git tag:コミットにタグを付ける
git stash:現在の作業ツリーの状態を一時的に保管する
git rebase:ブランチの派生元(上流)を変更する

-他のリポジトリとの連携
git pull:ほかのリポジトリの変更点をローカルリポジトリにマージする
git push :公開リポジトリに自分のリポジトリの内容を送信する

~
~

***付記:Gitの語源
'''''git'': イギリス英語のスラングで「バカ」という意味'''
Linus Torvaldsは「愚かなコンテンツトラッカー」と説明しています。
 The name "git" was given by Linus Torvalds when he wrote the very
 first version. He described the tool as "the stupid content tracker"
 and the name as (depending on your way):
 
 - random three-letter combination that is pronounceable, and not actually
 used by any common UNIX command. 
 The fact that it is a mispronunciation of "get" may or may not be relevant.
 - stupid. contemptible and despicable. simple.
 Take your pick from the dictionary of slang.
 - "global information tracker": 
 you're in a good mood, and it actually works for you. 
 Angels sing, and a light suddenly fills the room.
 - "g*dd*mn idiotic truckload of sh*t": when it breaks

一般的なUNIXコマンドでは、「発音可能で、実際にはないランダムな2〜4文字の組み合わせ」がよく使用されます。Global information Tracker の略・・と考えると気持ちがいいですね。

~
~