Try   HackMD

ギトギトのGitHub勉強会 基礎編ノート

Gitとはなにか

  • Git・・・プロジェクト丸ごとセーブ機能
  • 好きなタイミングでプロジェクトを丸ごとセーブできる
  • セーブデータ一つのことをコミットと呼ぶ

Gitのメリット

  • セーブしておくことで後から元に戻せること.

GitHubとはなにか

  • リポジトリをアップロードするサイト
  • リポジトリ・・・ひとつのプロジェクトのコミットがまとまっているもの.
  • つまり,GitHubはセーブデータ(ソースコード)アップロードサイトと言える.
  • アップロードしたソースコードは(過去のバージョンも含めて)見ることができる.

GitHubのメリット

  • チーム開発が捗る・・・チームみんなでソースコードが共有できるため,捗る.
  • みんなに自分のソースコードを見てもらえる・・・自分のソースコードを企業の人に見てもらえば,就職の役に立つかもしれない.

GitHubのアカウントを作ろう

  • Chromeでやるのがおすすめ

GitHubのアカウントを作る

  • ここにアクセス→ https://github.com/
  • Sign Upを押す
  • Username, Email, passwordを入れ,下のクイズに答える.
  • アンケートに答える・・・何の言語が好きですか?とか学生さんですか?とか色々聞かれる.
  • FreeかProか聞かれた場合,Free(無料)を選ぶ.
  • 登録したメールアドレスにメールが届くので,メールの「Verify email address」を押す.

Gitの初期設定をする

  • 以下のコマンドを実行
git config --global user.email (あなたのメールアドレス)
git config --global user.name (あなたのユーザー名)

ユーザー名はさっき「Username」で入力したアレのこと.

  • 具体例(筆者の場合)
git config --global user.email sonarmikumiku@gmail.com
git config --global user.name sonarAIT

パソコンを買う度に以上2つのコマンドを実行する.

SSH鍵を登録する

  • SSH鍵を登録するという行為をしないといけない.(理由はここでは書かない)
  • 何も考えずに以下のコマンドを入力する(ssh-keygenの時はreturn(Enter)を連打する.3回ぐらい.)
cd
mkdir .ssh
ssh-keygen -t rsa
cat id_rsa.pub | pbcopy
  • Windowsの人は上手くいかないので,講師に相談すること.
  • これが終わったら,GitHubの設定画面を開く.
  • GitHubのメインページの右上の方にある自分のアイコン(初期だと変な図形のアイコン)を押すと,メニューが出てくる.
  • そのメニューの下の方にある「Setting」を押す.
  • 左のメニューにある「SSH and GPG keys」を選択.
  • New SSH key」を押す
  • Titleを入力・・・「学校でもらったMacbookの鍵」という感じで,そのパソコンに関する情報を入れる.詳しければ詳しいほどよい.
  • Keyを入力・・・⌘キーとVを同時押しして,謎の文字列が出てきたら成功.
  • Add SSH keyを押したら完了.

設定ができているかどうか確認する方法

  • ターミナルで以下のコマンドを入力する.
ssh -T git@github.com
  • (y/n)と言われるので,yと入力.
  • Hi (あなたのUsername)! You've successfully authenticated,・・・といった感じのメッセージが表示されたら,SSH鍵の登録は完了.

SSH鍵の登録もパソコンを買う度にやらないといけない.

リポジトリを作ろう

  • リポジトリとは・・・ひとつのプロジェクトのコミットがまとまっているもの.
  • GitHub上のリポジトリ(リモートリポジトリ)とあなたのパソコン上のリポジトリ(ローカルリポジトリ)を作らないといけない.

リポジトリの初期設定をする

  • まずはGitHubのメインページの左の方から「New」を選択.
  • Repository name」にリポジトリの名前を入力する(プロジェクトの名前)
  • Private」を選択すると,自分と自分が選んだ人しか見えなくなる.
  • Public」を選択すると,誰もが見えるようになる.
  • Add a README file」にチェックを入れる.
  • 最後に「Create repository」を押す.

これでリモートリポジトリが完成した.
これを自分のパソコンにコピーする.

ローカルリポジトリの作成

  • ターミナルを開いて,ローカルリポジトリを作る場所にcdで移動する.

どこでもいいが,どうしてもわからなかったら以下のコマンドを実行すればいい.

mkdir ~/src
cd ~/src

これは,srcというディレクトリ(フォルダ)を作って,そのsrcに移動するという意味.この中に更にローカルリポジトリのディレクトリが入る.

  • ターミナルで以下のコマンドを入力.
git clone git@github.com:(リポジトリオーナー名)/(リポジトリ名).git
  • リポジトリオーナーとは,初期設定ではリポジトリを作った人のことである.(後から変更可能)
    今回はあなたがリポジトリオーナー.

  • 具体例

git clone git@github.com:sonarAIT/test_repository.git

これでリモートリポジトリからローカルへのコピーが行われる.

コミットをしよう

cdでローカルリポジトリの中に移動するのを忘れないように.
cd (リポジトリ名)で移動.

  • コミットの流れは,Addして,Commitして,Push.

Addする

  • git add (ファイル名) でCommitに含むファイルを選ぶ.・・・つまり,セーブするファイルを選ぶ
  • 具体例
git add file1.c
  • git add -Aを実行すると,全てのファイルをaddできる.
    一部のファイルだけをaddする方が稀なので,基本的にはこちらを使う.

Commitする

  • git commit -m (コミットメッセージ)でCommitする.
  • コミットメッセージには,具体的にそのコミットまでに何をしたかを書く.
  • 具体例
git commit -m "〇〇のバグを修正"
git commit -m "〇〇機能を実装"
  • これでセーブしたことになる

Pushする

  • git pushリモートリポジトリにアップロードする.

mainかmasterか知りたければ

git remote show origin | grep 'HEAD branch' | cat

で確認できる.

  • これで,GitHubのリポジトリと自分のパソコンのリポジトリが一致する.・・・つまり,セーブデータをアップロードした.

Add, Commit, Pushまとめ

  • addでセーブするファイルを選び
  • commitで実際にセーブをして
  • pushでセーブデータをアップロードする

注意点

  • commitする単位は大きくなりすぎないように.
    ・例えば,コミットメッセージが「〇〇と△△をした」だったらダメ.
    ・〇〇のcommitと,△△のcommitとしてそれぞれコミットするべき.
    ・こだわりすぎても面倒なので,ちょっと気を使う程度でよい.

  • pushしたcommitは基本的に取り消せない.
    ・取り消せるけど,基本的には無理.
    ・取り消したいミスが見つかった場合,それを修正するコミットを作成する.

コミットは積み重ね

  • コミットにはそれぞれ(最初のコミットを除いて)親コミットというものがある.
    親コミットは,基本的には,そのコミットの一つ前のコミットを指す.
  • コミットは時系列順に全部揃っていなければならない.(ただし同ブランチ上に限る.)
    ブランチについては次回やる.
  • pushする時に,他者のコミットが自分のローカルに無いためにpushできないことがある.

    (この場合,Cが他者のコミット.)

このままではpushできないので,git pullを行う.


すると,全部揃うため,pushできるようになる.

コンフリクトについて

  • コンフリクト・・・コミット同士の衝突.
  • 上記の例をそのまま使う.
    コミットB, C, Dの中身が以下のようだったと仮定する.
コミットB・・・test.cを追加
#include <stdio.h>
int main() {
    printf("Hello B!");
    return 0;
}
コミットC・・・test.cを編集(printfの中身を変更)
#include <stdio.h>
int main() {
    printf("Hello C!");//ここを変更
    return 0;
}
コミットD・・・test.cを編集(printfの中身を変更)
#include <stdio.h>
int main() {
    printf("Hello D!");//ここを変更
    return 0;
}
  • コミットCは他者のコミット,コミットDを自分のコミットとする.
    この場合,編集箇所が重なっているため,gitはどちらを採用すればよいかわからなくなる.このことをコンフリクトと呼ぶ.
  • 対処法としては,どちらを採用するかを決め,もう一度コミットするしかない.
  • コンフリクトが発生したら,先輩に相談することを推奨する.

まとめ

  • ぶっちゃけaddしてcommitしてpushだけ理解できていればなんでもよい.