Git と  GitHub  とは



######　はじめに
プログラミング初心者です。
Gitや GitHub をこちらにまとめます。
お気付きの点はご指摘ください。
# Git と  GitHub  

Git と　GitHub を簡単にいうと
Gitという履歴管理機能　と　みんなが簡単に使えるサイトです

facebook　と　[facebook公式ページ](https://ja-jp.facebook.com/)　とか
ふるさと納税　と　ふるさと納税サイト（[ふるなび](https://furunavi.jp/)、[さとふる](https://www.satofull.jp/)etc）とか
みんなの知恵　と　[yahoo知恵袋](https://chiebukuro.yahoo.co.jp)、おしえてgooとかそんなような感じ

GithHub Desktop　という便利なアプリが提供されますます利用者を増やしています。


<details>
<summary>難しくいうと　Git とは</summary>
<pre>
<code>
Gitとは ソースコードやプロジェクトファイルの変更履歴を記録・追跡するために開発された便利な機能のことです。（難しい言い方だと分散型バージョン管理システムといいます。）
もともとはLinuxのソースコードを効果的に管理するために開発されたのが「Git 」です。
Linuxカーネルの初期の開発と最終的な調整役を務めたフィンランド出身のリーナス・ベネディクト・トーバルズ氏（以下リーナス氏）によって 2005年にわずか2週間で開発されました。
（当時のLinux開発の現場で用いていたソースコードバージョン管理システム「BitKeeper」が 無償提供をやめると発表したことにより同様のシステムが必要になったため）
リーナス氏は、「分散型バージョン管理の大きなメリットは、全員のローカル環境にリポジトリを置くことで、『誰に変更を許可するのか』という政治的対立が生じていたSCMの問題が解消できることです」と語っています。（いろいろあったのでしょう）  
「Git」は英語のスラングで**「ばか」「間抜け」「ろくでなし」**という意味です。
リーナス氏によれば「僕は自己中心的な奴だから、自分のプロジェクトには自分にちなんだ名前を付けるようにしているんだ。最初はLinuxで、今度はGitだ。」と語っています。
実は「Linux」は、当初は「freak」「free」「Unix」を合成して「 Freax  （フリークス）」とするべくすべてのファイルを「 Freax 」というディレクトリに保存されていました。
しかし当時そのサーバの責任者であった彼の知人が「Freax」という名前を良く思わず（「Freax」と語感が酷似している「Freaks」は英語で変人・奇人の意味を持つため） リーナス氏 に相談することなくサーバ上のプロジェクトに勝手に「Linux」という名前をつけてしまったそうです。
読み方はギットです。アルファベットの「G」はジー、ファイルフォーマットの「Gif」はジフ、ですがギットと読みます。
[GitHub の発音 英語](https://ja.forvo.com/word/github/）
ちなみに「Linux」の発音は公式に定められておらず、リヌックス、ライナックスなどがある。リーナス氏は「どのように発音してもらっても構わない」と発言しています。（本人はリヌックスと発音しています）
</code>
</pre>
</details>

<details>
<summary>難しくいうと GitHub とは</summary>
<pre>
<code>
幅広い開発者が情報を共有管理できるように 2008年 に提供されたチーム開発に特化したWebサービスのことです。
Gitでの「リモートリポジトリ」をクラウド上で提供しています。
GitHub ではこのGitを利用してソースコードの修正や変更、バージョンの管理や復元を複数の開発者同士で簡単に行うことができます。
2018年には米Microsoftは米GitHubを75億ドル（約8200億円）で買収すると発表されました。
世界で2,700万人にのぼる開発者および180万の組織に利用されています。
2018年11月時点でGitHub 上でのリポジトリが1億件を達成したことが発表されました。
プルリクエストは2億件を超えるそうです。
プルリクエストはGit自身の機能ではなくGitHubが最初に提供した機能です。
プルリクエストによって多くの開発者がオープンソース開発に参加しやすくなり、結果として品質の高いコードを作ることが可能になりました。
GitHub に限らず主要なGitホスティングサービス(BitBucket等)やツールでも利用されています。
こうして広まったGitHubですが今では当初予想もしなかったような使い方もされています。
例えば新しいブログを投稿するときにpull requestでブログを修正したり、税金管理。
中には、ドイツの法律をGitHubにホスティングし、「どうしたらドイツの法律を良くできるか」と議論しているユーザーもいるそうです。 
2008年から2013年まで GitHub 社では社員がひとりも辞めていないそうです。
</code>
</pre>
</details>

# Gitと GitHub の違い

Git は、当時のLinux開発の現場で用いていたソースコードバージョン管理システムが 無償提供をやめると発表したためまったく新しいシステムを作る必要がありました。

GitHubは、2008年4月に「コラボレーションできる環境を作りたい」という夢を持った3人（ ピージェー・ハイヤット  クリス・ワンストラス トム・プレストン・ワーナー ）の想いが集まり始まったプロジェクトです。


<img src="https://img.icons8.com/metro/104/000000/github.png">
<details>
<summary>GitHubのキャラクター「Monalisa」:octocat:</summary>
<pre>
<code>
GitHubのキャラクター「Monalisa」octcatという種族です。
社員のお嬢さんが学校の課題で
「猫が海に潜ってサンゴを食べたら足がタコのように伸びた」
というお話をつくったのがきっかけだそうです。
</code>
</pre>
</details>

##　Gitと GitHub はこんなときに便利

もしも、社内BBQの企画を部署のメンバーと進めるという場合

GitHub を使用することで自分の作業が他の開発者に影響を及ぼしたり、*(:flushed:やばファイルぜんぶ消しちゃった…)*
反対に他の開発者の作業が自分に影響を及ぼすこと*（:cry:あファイルがぜんぶ消えてる…）*を避けて効率的にチーム開発を進めることができます。(とつぜんの部長チェックにも即対応)


<details>
<summary>参考</summary>
<pre><code>
参考（ フォルダにファイルが次々に次々に増えてゆく状態）
└BBQ参加者リスト情報フォルダ
　├ BBQ 参加者リスト_20190401.xls
　├ BBQ 参加者リスト_20190401_backup.xls
　├ BBQ 参加者リスト_20190404.xls
　├ BBQ 参加者リスト_20190404_2.xls
　├ BBQ 場の候補_20190404.docs
　├ BBQ 場の候補_20190403_1.docs
　├ BBQ 場の候補_20190409_1(1).docs
　├ BBQ 場の候補_20190410_追記.docs
　├ BBQ 持ち物のリスト_20190411.docs
　├ BBQ 持ち物のリスト_20190412最新.docs
　*
　Gitを使わなければ
「最新の参加者リストはどれ？」「あのファイルどこにいった？」 
といった問題が起こります。
→　GitHubを使うと
A：「参加者追加しました」
B：「場所の候補変更です」
C：「持ち物リスト作成と追記しました」
上司：「いま企画どうなってる？」
ABC：「最新はこちらです！」
</code></pre>
</details>

# Gitと GitHub 　頻出用語


リポジトリ (英: repository) 
    ：共有ファイルなどを保存する場所　容器、貯蔵庫、集積所という意味


クローン ( 英:  clone)
： リモートリポジトリの内容を変更履歴も含めてすべてローカルリポジトリにコピーすること


ローカルリポジトリ  (英: local repository) 　
    ：リポジトリを新規作成、またはリモートリポジトリをクローンして各個人がPC上で作業を行う場所


インデックス  (英:  index） 
    : ファイルの状態を記録するためコミットを実行する前に、一時的にファイルを保存する場所（必要ないファイルを含めずにコミットを行ったり、ファイルの一部の変更だけをインデックスに登録してコミットすることができます）


リモートリポジトリ  (英: remote repository) 　
    ：専用サーバに保存された共有ファイルを保存する場所　複数人で共有することができます


アド  (英:  add）　
    ： commitを行う前に変更点をインデックスに追加する　


コミット  (英:  commit）　
    ：リモートにpushを行う前に更新履歴をローカルリポジトリに保存する


アンドゥ (英:  undo）　
：「取り消し」 「元に戻す」という意味　コミットを間違えたときに取り消しを行う


プッシュ (英:  push）　 
    ：ローカルリポジトリの更新履歴をリモートリポジトリに反映させる


プル (英:  pull）　 
    ：  リモートリポジトリからローカルリポジトリに最新の更新履歴を更新する


 マージ(英:  merge）
    ： 変更履歴を統合する　
＊最後にpullを実行してから次のpushをするまでの間に、他の人がpushを行ってしまった場合、マージを行って他の履歴での変更を取り込むまでは 自分のpushは拒否されます。 （ほかの人がpushした変更を上書きしてしまうことを防ぐため ）また、ファイル内の同じ箇所を変更していた場合は手動で修正する必要があります。


 プルリクエスト(英:  pullrequest）
：  コードのレビューリクエスト　 変更箇所を表示するとともに関係者に通知すること

<details>
<summary>参考（社内BBQの企画をメンバーABCで企画）</summary>
<pre>
<code>
A　がリモートリポジトリを作成しクローン、Aのブランチを作成してから作業する
A：「リポジトリ作成しました」
→BCもリモートリポジトリからクローンしてBCそれぞれのブランチにクローンして作業
A：追加したファイルをコミットしてプッシュ、「参加者追加しました」とプルリクエストをだす
→BC確認「マージしてください」
→A　マージした後、各自プルしておく
B：追加したファイルをコミットしてプッシュ、「場所の候補変更です」とプルリクエストをだす
→AC確認「マージしてください」
→B　マージした後、各自プルしておく
C：「持ち物リスト作成と追記しました」
→AB確認「マージしてください」
→C　マージした後、各自プルしておく
上司：「いま企画どうなってる？」
ABC：「最新はこちらでございます！どうかよしなに」
</code>
</pre>
</details>




# Gitと GitHub   実際に使ってみよう
まずは登録
https://github.com/
GitHubデスクトップもダウンロード
https://desktop.github.com/


使い方
リポジトリの作成、クローン、プッシュ、プル、プルリクエスト

###### 最後に
Git開発者のリーナス氏はインタビューにおいて
「Gitを学ぶよい方法は、最初はあまり多くに手を出さずに基本的なことだけを使い、自信が持てるようになった時に別のことを行うことでしょう」と語っています。まずは基本を学習しましょう。


ご覧いただきありがとうございました。
誰かの役に立てば幸いです。


###### 参考：
[サルでもわかるgit入門](https://backlog.com/ja/git-tutorial/intro/intro1_1.html)
[VSCodeでのGitの基本操作まとめ](https://qiita.com/y-tsutsu/items/2ba96b16b220fb5913be#%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%82%92%E3%83%9E%E3%83%BC%E3%82%B8%E3%81%99%E3%82%8B)　
[GitHub超初心者入門](http://www.plowman.co.jp/blog/?p=60　)
[Git誕生10周年を記念した開発者のリーナス・トーバルズ氏のインタビュー - GIGAZINE](https://gigazine.net/news/20150407-10-years-git-linus-torvalds/ )
[Git-Wikipedia](https://ja.wikipedia.org/wiki/Git)
[Linusが2週間でgitを作った話。](http://hyoshiok.hatenablog.com/entry/20140729/p1　)
[【GitHub超初心者入門】この前初めてGitHubを使い始めたエンジニア見習いが書くGitHubの使い方と実践～とりあえず一緒に動かしてみようぜ！～](https://qiita.com/nnahito/items/565f8755e70c51532459)　
[GitHubが実践するオープンソース式マネジメント法](https://www.atmarkit.co.jp/ait/articles/1302/12/news024.html)
[Gitとは？入門向け基礎知識のまとめ](http://www-creators.com/archives/768)　
[いまさら聞けないGitとGitHubの違いって何？](https://www.i3design.jp/in-pocket/3111)
[Qiita Markdown で折りたたみを表現する方法 - Qiita](https://qiita.com/matagawa/items/31e26e9cd53c3e61ae07)
[GitHubのキャラクターの足がタコなのは「サンゴ」を食べたからだった！　正式名称は「Octocat」ではなく「Monalisa」](https://nlab.itmedia.co.jp/nl/articles/1506/09/news113.html)
参考にさせていただきました。感謝