Save 37% off PRO during our Black Friday Sale! »

Git入門

Ca26d099cfbe54faeaf86a6f551c56a1?s=47 mina
July 23, 2021

 Git入門

大学サークルのイントロ用資料です
Gitに入門します
resetやrevertも入れたらよかった気がしています

Ca26d099cfbe54faeaf86a6f551c56a1?s=128

mina

July 23, 2021
Tweet

Transcript

  1. Git入門 SecPrj Intro-phase

  2. Gitとは Gitとは、オープンソースの分散バージョン管理システムの一つ。複数の 開発者が共同で一つのソフトウェアを開発する際などに、ソースコード やドキュメントなどの編集履歴を統一的に管理するのに用いられる。 Gitとは - IT用語辞典 e-Words https://e-words.jp/w/Git.html

  3. ソフトウェアのバージョン管理 Gitがない世界 ファイル名 最終変更日 app.py 2021/03/01 app_ver2.py 2021/05/20 app_ver3.py 2021/05/10

    app_latest.py 2021/06/02 app_latest2.py 2021/05/30 で,結局どれが 最新なんすか?
  4. ソフトウェアのバージョン管理 Gitがない世界 Gitがある世界 ファイル名 最終変更日 app.py 2021/03/01 app_ver2.py 2021/05/20 app_ver3.py

    2021/05/10 app_latest.py 2021/06/02 app_latest2.py 2021/05/30 で,結局どれが 最新なんすか? ファイル名 最終変更日 .git/ 2021/06/02 app.py 2021/06/02 変更履歴(コミットログ) 機能Bを実装 関数bを実装 機能Aを修正 関数aを実装 機能Aを実装 任意の変更点を 打ち消したり 戻したりできる
  5. 複数人での作業 Gitがない世界 ファイル名 変更点 app.py 機能A,B app_func1.py 機能A app_func2.py 機能B

    app_func1.py 機能A実装 app_func2.py 機能B実装 app_func1.py app.py app_func2.py A B A B 機能A,B統合
  6. 複数人での作業 Gitがない世界 Gitがある世界 ファイル名 変更点 app.py 機能A,B app_func1.py 機能A app_func2.py

    機能B app_func1.py 機能A実装 ファイル名 変更点 .git/ -- app.py 機能A,B app_func2.py 機能B実装 app_func1.py app.py app_func2.py A B ブランチによる管理 main func1 func2 commit ブランチ merge A B 機能A,B統合
  7. Gitの基本的な操作 - ステージング(add) - コミット(commit) - ステータス(status) - ブランチ(branch) -

    移動(switch) - マージ(merge) - プッシュ(push) - プル(pull) - クローン(clone)
  8. Gitでコミットする コミットツリー 未コミットの変更点A,B があるファイル群 ステージ A B

  9. Gitでコミットする コミットツリー 未コミットの変更点A,B があるファイル群 ステージ A B A B ステージング

  10. Gitでコミットする コミットツリー 未コミットの変更点A,B があるファイル群 ステージ A B コミット A B

    ステージング コミットするとGitに 変更が記録される (コミットオブジェクトの生成)
  11. Gitのコミット(コミットオブジェクト) A2 A1 A3 コミットはスナップショット(その時点のディレクトリ/ファイルのコピー) コミットしたファイルと各種情報を持つオブジェクトがコミットオブジェクト

  12. Gitのコミット(コミットオブジェクト) A2 A1 A3 コミット(コミットオブジェクト)にはそれぞれコミットハッシュとよばれる SHA1ハッシュ(40文字)が振られる コミットハッシュでコミット(コミットオブジェクト)を一意に指定できる 87e9293cefb2a50ba945 7f5c79553d74eeb360fc 5b9e980753180e96ab40

    41cb43c507d86bfff3f6 66e5c0862066a1c0809a 5ff693a8123ea3f6e6e5
  13. Gitにおけるファイルのステータス ファイルには4つの状態がある Untracked(追跡されてない)/Unmodified(変更なし)/ Modified(変更あり/ステージングされていない)/Staged(ステージングされている) Git - 変更内容のリポジトリへの記録 https://git-scm.com/book/ja/v2/Git-の基本-変更内容のリポジトリへの記録

  14. Gitでブランチを使う a b コミット ブランチ c それぞれのコミット(変更)が 他のブランチに影響していない ブランチはいわば「世界線」。あるブランチは他ブランチの変更に影響されない ex)

    関数Aを実装した世界線/関数Bを実装した世界線 実装する機能やバージョンごとにブランチを切るのが一般的
  15. ブランチを 移動して作業 Gitでブランチを使う ブランチはいわば「世界線」。あるブランチは他ブランチの変更に影響されない ex) 関数Aを実装した世界線/関数Bを実装した世界線 実装する機能やバージョンごとにブランチを切るのが一般的 a b コミット

    ブランチ c それぞれのコミット(変更)が 他のブランチに影響していない
  16. ブランチを 割振って作業 Gitでブランチを使う a b コミット ブランチ c それぞれのコミット(変更)が 他のブランチに影響していない

    ブランチはいわば「世界線」。あるブランチは他ブランチの変更に影響されない ex) 関数Aを実装した世界線/関数Bを実装した世界線 実装する機能やバージョンごとにブランチを切るのが一般的
  17. 実装する機能 によって分離 Gitでブランチを使う a b コミット ブランチ c それぞれのコミット(変更)が 他のブランチに影響していない

    ブランチはいわば「世界線」。あるブランチは他ブランチの変更に影響されない ex) 関数Aを実装した世界線/関数Bを実装した世界線 実装する機能やバージョンごとにブランチを切るのが一般的 A B
  18. ブランチをマージする a b コミット マージ あるブランチの変更と別のブランチを統合/反映する 反映は基本自動で行われるが,変更の重複点のみコンフリクトを起こす コンフリクトは手動で解消する必要がある.

  19. ブランチをマージする あるブランチの変更と別のブランチを統合/反映する 反映は基本自動で行われるが,変更の重複点のみコンフリクトを起こす コンフリクトは手動で解消する必要がある. a b コミット マージ 変更が重複すると コンフリクト

  20. リポジトリ Git管理されているディレクトリをリポジトリ(repository)と呼ぶ ローカルリポジトリ - 手元(ローカル)にあるリポジトリ リモートリポジトリ - インターネット上などのサーバ上にあるリポジトリ リモートリポジトリ 開発者A

    開発者B 複製/反映 複製/反映 変更 変更
  21. リポジトリ Git管理されているディレクトリをリポジトリ(repository)と呼ぶ ローカルリポジトリ - 手元(ローカル)にあるリポジトリ リモートリポジトリ - インターネット上などのサーバ上にあるリポジトリ 複製がどこかにあればリモートリポジトリが死んでもある程度は復元可能 リモートリポジトリ

    開発者A 開発者B 複製/反映 複製/反映 変更 変更
  22. リポジトリ Git管理されているディレクトリをリポジトリ(repository)と呼ぶ ローカルリポジトリ - 手元(ローカル)にあるリポジトリ リモートリポジトリ - インターネット上などのサーバ上にあるリポジトリ GitHubやGitLabなどはリモートリポジトリの実装の1つ リモートリポジトリ

    開発者A 開発者B 複製/反映 複製/反映 変更 変更
  23. リモートリポジトリへの操作 リポジトリを複製(Clone) リモートリポジトリ clone ローカルの変更反映/リモートの変更反映 リモートリポジトリ pull push cloneはデフォルトで デフォルトブランチを複

    製する push/pullは任意の ブランチに対して実行 (b1だけpush...など)
  24. ハンズオン1 ローカルリポジトリを作成する

  25. リポジトリを初期化する ディレクトリにあるファイルはそのままで, カレントディレクトリをGit管理下に置く .git/ が生成され,既にあるファイルは 追跡されていない未コミットファイルとなる $ git init $

    git status
  26. Gitでコミットする 未コミットの変更点A があるファイル ステージ A $ git diff コミットツリー Untrackedなファイルは差分表示されない

  27. Gitでコミットする 未コミットの変更点A があるファイル ステージ A A ステージング $ git add

    <filename> コミットツリー
  28. Gitでコミットする ユーザ情報の設定 コミットユーザの情報として利用される $ git config --global user.email “your email”

    $ git config --global user.name “your name” $ git config --global core.editor “nano”
  29. Gitでコミットする 未コミットの変更点A があるファイル ステージ A コミット A $ git commit

    $ git commit -m “...” or コミットツリー ステージング
  30. Gitでコミットする コミットツリー 未コミットの変更点A があるファイル ステージ A A コミット $ git

    log ステージング
  31. Trackedなファイルであれば差分が表示される

  32. Gitでブランチを使う master ブランチを確認する $ git branch

  33. Gitでブランチを使う master b1 ブランチを作成する 作成したカレントブランチの情報を引き継ぐ $ git branch b1

  34. Gitでブランチを使う master b1 カレントブランチを移動する master → b1 $ git switch

    b1 $ git switch -c b1 で作成&移動も可能
  35. Gitでブランチを使う master b1 b1で何かを変更し、コミットする このコミットはmasterに続く形になる (b1はmasterから切られているので) $ git add <filename>

    $ git commit -任意の編集-
  36. Gitでブランチを使う master b1 b1で何かを変更し、コミットする このコミットはmasterに続く形になる (b1はmasterから切られているので) $ git log

  37. Gitでブランチを使う master b1 カレントブランチをmasterに移動 1つめのコミットしかみえない $ git switch master

  38. Gitでブランチを使う master b1 b1ブランチをmasterブランチにマージ 変更がb1でコミットした変更が反映されている $ git merge b1

  39. ハンズオン2 リモートリポジトリの作成/Clone/Push/Pull

  40. リモートリポジトリのクローン,プッシュ,プル まず自分のGitHubページで新しいリポジトリを作る

  41. リモートリポジトリのクローン,プッシュ,プル

  42. 最初のコミットがされた状態でリモートリポジトリが生成される リモートリポジトリのクローン,プッシュ,プル

  43. $ git clone https://github.com/silmin/git-test.git リモートリポジトリのクローン,プッシュ,プル

  44. リモートリポジトリのクローン,プッシュ,プル cloneしてきたリポジトリに変更点を加えて,コミットする

  45. リモートリポジトリのクローン,プッシュ,プル

  46. helloが追加されている $ git push origin main リモートリポジトリのクローン,プッシュ,プル

  47. $ git push origin main リモートリポジトリ ブランチ

  48. リモートリポジトリのクローン,プッシュ,プル WebUIから直接変更してみる

  49. リモートリポジトリのクローン,プッシュ,プル リモートでの変更をローカルにプルして反映

  50. ハンズオンおわり

  51. gitconfigについて それぞれのリポジトリにはその設定ファイルとして .git/config がある 全てのリポジトリに適用されるグローバルな設定 ~/.gitconfig もある さっきGitHubで作った リポジトリの.git/config originはリモートリポジトリに

    つけられた名前
  52. Gitのブランチ main ブランチポインタ カレントブランチ(HEAD) ブランチの実態はただのコミットへの参照(ポインタ) ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している

  53. Gitのブランチ temp main ブランチの実態はただのコミットへの参照(ポインタ) ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している ブランチポインタ カレントブランチ(HEAD)

    $ git switch -c temp
  54. Gitのブランチ temp main ブランチポインタ カレントブランチ(HEAD) $ git commit ... ブランチの実態はただのコミットへの参照(ポインタ)

    ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している
  55. Gitのブランチ temp main ブランチポインタ カレントブランチ(HEAD) $ git switch main ブランチの実態はただのコミットへの参照(ポインタ)

    ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している
  56. Gitのブランチ temp main ブランチポインタ カレントブランチ(HEAD) $ git commit ... ブランチの実態はただのコミットへの参照(ポインタ)

    ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している
  57. Gitのブランチ temp main ブランチポインタ カレントブランチ(HEAD) $ git merge temp ブランチの実態はただのコミットへの参照(ポインタ)

    ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している
  58. Gitのブランチ a 2 a 1 a 3 temp main b

    1 a 4 a 5 ブランチポインタ カレントブランチ(HEAD) a 1 a 2 a 3 b 1 a 4 a 5 main temp