Upgrade to Pro — share decks privately, control downloads, hide ads and more …

高専プロコンのためのGit入門

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers. →
Avatar for Yukkku Yukkku
April 18, 2025

 高専プロコンのためのGit入門

高専競プロ鯖でのGitの勉強会用に作成したスライドです

Avatar for Yukkku

Yukkku

April 18, 2025

Other Decks in Programming

Transcript

  1. Git って? • バージョン管理システム • 簡単に言えば「変更履歴」のすごい版 📄 資料.docx 📄 資料(1).docx

    📄 資料 最終版(1).docx 📄 資料(2).docx 📄 資料 最終版 修正済.docx 📄 資料 提出用.docx
  2. Git って? • バージョン管理システム • 簡単に言えば「変更履歴」のすごい版 📄 資料.docx 📄 資料(1).docx

    📄 資料 最終版(1).docx 📄 資料(2).docx 📄 資料 最終版 修正済.docx 📄 資料 提出用.docx これをスタイリッシュにできる.
  3. GitHub? • Git を使う上で便利なサービス • Git にはデータをサーバーと共有する機能がある ‣ バックアップのため ‣

    他の端末との中継 ‣ 単純に中央サーバーがあると便利じゃん? GitHub はこれをするためのサーバーのサービス
  4. GitHub? • Git を使う上で便利なサービス • Git にはデータをサーバーと共有する機能がある ‣ バックアップのため ‣

    他の端末との中継 ‣ 単純に中央サーバーがあると便利じゃん? GitHub はこれをするためのサーバーのサービス • その他, 開発に便利な機能が色々ある ‣ issue ‣ pull request
  5. GitHub? • Git を使う上で便利なサービス • Git にはデータをサーバーと共有する機能がある ‣ バックアップのため ‣

    他の端末との中継 ‣ 単純に中央サーバーがあると便利じゃん? GitHub はこれをするためのサーバーのサービス • その他, 開発に便利な機能が色々ある ‣ issue ‣ pull request GitHub ではなく Git の入門なので, 今回は説明しない
  6. セットアップ まず, Git が入ってるかチェック $ git --version git version 2.49.0

    入ってなかった場合は, インストールしてください. (環境によってやることが違うのでインストール手順は略) 公式サイト: https://git-scm.com/
  7. セットアップ とりあえず以下を実行して, 秘密鍵/公開鍵を生成する $ ssh-keygen Generating public/private ed25519 key pair.

    Enter file in which to save the key (/(略)/.ssh/id_ed25519): ←とりあえず空欄にして Enter passphrase for "/(略)/.ssh/id_ed25519" (empty for no passphrase): ←パスワード Enter same passphrase again: ←パスワード(再入力) Your identification has been saved in /(略)/.ssh/id_ed25519 Your public key has been saved in /(略)/.ssh/id_ed25519.pub The key fingerprint is: (略)
  8. セットアップ とりあえず以下を実行して, 秘密鍵/公開鍵を生成する $ ssh-keygen Generating public/private ed25519 key pair.

    Enter file in which to save the key (/(略)/.ssh/id_ed25519): ←とりあえず空欄にして Enter passphrase for "/(略)/.ssh/id_ed25519" (empty for no passphrase): ←パスワード Enter same passphrase again: ←パスワード(再入力) Your identification has been saved in /(略)/.ssh/id_ed25519 Your public key has been saved in /(略)/.ssh/id_ed25519.pub The key fingerprint is: (略) • /(略)/.ssh/id_ed25519 に秘密鍵がある • /(略)/.ssh/id_ed25519.pub に公開鍵がある
  9. セットアップ GitHub の設定にアクセスして「New SSH key」から公開鍵を登録 https://github.com/settings/ssh • Title には端末の簡単な説明(「家のパソコン」とか) •

    Key type は Authentication Key を選択 • Key には公開鍵をコピペ 以下のように接続確認できる $ ssh -T [email protected] Enter passphrase for key '/(略)/.ssh/id_ed25519': ←パスワード入力 Hi Yukkku! You've successfully authenticated, but GitHub does not provide shell access.
  10. はじめる 端末から編集できるようにする $ git clone [email protected]:Yukkku/procon36-ube.git Cloning into 'procon36-ube'... Enter

    passphrase for key '/(略)/.ssh/id_ed25519': warning: You appear to have cloned an empty repository. # ディレクトリが作られたので, そこに移動 $ cd procon36-ube
  11. Git を使う とりあえずプログラムを書いた $ cat main.cpp #include <print> int main()

    noexcept { std::println("Hello, World!"); return 0; } $ g++ -std=gnu++23 main.cpp $ ./a.out Hello, World! 「このプログラムを作った」という履歴を残すことを考える
  12. コミット(commit) 履歴の最小単位 • 誰が編集したか • いつ編集したか • どういう変更をしたか • 一言コメント

    (コミットメッセージ) が記録されている 原則として作ったコミットはずっと残る
  13. コミットを作る どの変更をコミットに記録するか指定する $ git add main.cpp # 一括指定もできる $ git

    add *.cpp • a.out みたいな実行ファイルは普通はコミットに記録しない
  14. コミットを作る どの変更をコミットに記録するか指定する $ git add main.cpp # 一括指定もできる $ git

    add *.cpp • a.out みたいな実行ファイルは普通はコミットに記録しない git add を取り消したいときは git rm --cached git rm --cached main.cpp --cached が無いとファイルが消えます(一敗)
  15. コミットを作る どのファイルを git add したかは git stauts で確認できる $ git

    status On branch main No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: main.cpp Untracked files: (use "git add <file>..." to include in what will be committed) a.out
  16. GitHub と同期する git push でコミットを GitHub に送れる $ git push

    Enter passphrase for key '/(略)/.ssh/id_ed25519': (略) To github.com:Yukkku/procon36-ube.git * [new branch] main -> main
  17. GitHub と同期する git push でコミットを GitHub に送れる $ git push

    Enter passphrase for key '/(略)/.ssh/id_ed25519': (略) To github.com:Yukkku/procon36-ube.git * [new branch] main -> main GitHub にアクセスして, 反映されてることを確認する.
  18. GitHub と同期する 逆に, GitHub 上のコミットを反映するには git pull を使う $ git

    pull Enter passphrase for key '/(略)/.ssh/id_ed25519': (略) From github.com:Yukkku/procon36-ube * [new branch] main -> origin/main # 反映されているか確認 $ ls main.cpp
  19. GitHub と同期する 逆に, GitHub 上のコミットを反映するには git pull を使う $ git

    pull Enter passphrase for key '/(略)/.ssh/id_ed25519': (略) From github.com:Yukkku/procon36-ube * [new branch] main -> origin/main # 反映されているか確認 $ ls main.cpp push/pull はこまめにしましょう
  20. ブランチ(branch) 📄 📄 📄 📄 編集 編集 編集 📄 📄

    📄 編集 編集 編集 コミットの列は枝分かれできる
  21. ブランチ(branch) 📄 📄 📄 📄 編集 編集 編集 📄 📄

    📄 編集 編集 編集 コミットの列は枝分かれできる • ミスをしてやり直すとき • 試作とかしたいとき • 複数人が同時に編集したとき
  22. ブランチ(branch) 📄 📄 📄 📄 編集 編集 編集 📄 📄

    📄 編集 編集 編集 ◯◯実装 △△修正 枝はそれぞれ名前をつけて区別できる(ブランチ)
  23. ブランチ(branch) 📄 📄 📄 📄 編集 編集 編集 📄 📄

    📄 編集 編集 編集 ◯◯実装 △△修正 枝はそれぞれ名前をつけて区別できる(ブランチ) 名前を枝の最新のコミットと紐づけて枝を管理している
  24. ブランチ(branch) 📄 📄 📄 📄 編集 編集 編集 📄 📄

    📄 編集 編集 編集 📄 ◯◯実装 △△修正 他のブランチで行った変更を取り込むことができる(マージ)
  25. ブランチ(branch) 📄 📄 📄 📄 編集 編集 編集 📄 📄

    📄 編集 編集 編集 📄 ◯◯実装 △△修正 他のブランチで行った変更を取り込むことができる(マージ) 普通は自動で変更点を取り込めるが, 手動での調整が必要なときも
  26. ブランチを使う git branch <ブランチ名> でブランチを作れる $ git branch sample-branch ブランチの一覧は

    git branch で表示できる $ git branch * main sample-branch main は最初からあるブランチ (master って名前のときも)
  27. ブランチを使う git branch <ブランチ名> でブランチを作れる $ git branch sample-branch ブランチの一覧は

    git branch で表示できる $ git branch * main sample-branch main は最初からあるブランチ (master って名前のときも) 📄 📄 main sample-branch
  28. ブランチを使う 読み込むブランチを切り替えるには git checkout $ git checkout sample-branch # 現在読み込んでるブランチに*がついている

    $ git branch main * sample-branch sample-branch にコミットしてみる # (予めfizzbuzz.cppを用意) $ git add fizzbuzz.cpp $ git commit
  29. ブランチを使う 現時点でこういう関係になっている 📄 📄 📄 main sample-branch main は変更されてないので, 切り替えると

    fizzbuzz.cpp が無い $ git checkout main $ ls a.out main.cpp # sample-branchに戻ってくるとfizzbuzz.cppが復活する $ git checkout sample-branch $ ls a.out main.cpp fizzbuzz.cpp
  30. ブランチを使う main ブランチの main.cpp を編集する $ git checkout main #

    (ここでmain.cppを編集する) $ git add main.cpp $ git commit
  31. ブランチを使う main ブランチの main.cpp を編集する $ git checkout main #

    (ここでmain.cppを編集する) $ git add main.cpp $ git commit こういう状態になる 📄 📄 📄 📄 main sample-branch ←fizzbuzz.cpp あり, main.cpp の編集なし ←fizzbuzz.cpp なし, main.cpp の編集あり
  32. ブランチを使う git merge <otherbranch> で変更をマージできる $ git checkout main $

    git merge sample-branch # ここでgit commitと同様にコミットメッセージの入力が求められる. デフォルトのメッセージで十分
  33. ブランチを使う git merge <otherbranch> で変更をマージできる $ git checkout main $

    git merge sample-branch # ここでgit commitと同様にコミットメッセージの入力が求められる. デフォルトのメッセージで十分 このようになる 📄 📄 📄 📄 📄 main sample-branch main を操作したので, sample-branch には変化なし
  34. ブランチを使う マージされて用済みのブランチは git branch -d で削除できる # 今読み込んでいるブランチは削除できないので, mainに避難しておく $

    git checkout main # sample-branchを削除する $ git branch -d sample-branch # 削除されたことを確認する $ git branch * main
  35. ブランチを使う マージされて用済みのブランチは git branch -d で削除できる # 今読み込んでいるブランチは削除できないので, mainに避難しておく $

    git checkout main # sample-branchを削除する $ git branch -d sample-branch # 削除されたことを確認する $ git branch * main -d ではなく-D にすればマージしていなくても消せるが, あんまりやる もんではない
  36. GitHub Flow 📄 📄 📄 main feature/◯◯ 2. やること 1

    つにつきブランチを 1 つ作ってそこで開発を行う.
  37. GitHub Flow 📄 📄 📄 📄 📄 📄 main feature/◯◯

    3. きちんと動作することが確認できたら, main にマージする main には常に安定して動作するようにする
  38. GitHub Flow 📄 📄 📄 📄 📄 📄 main 4.

    feature/◯◯は用済みなので削除する. ブランチ一覧は「やっていることリスト」になる.
  39. 法的表示 Git Logo | by Jason Long | CC BY

    3.0 https://git-scm.com/downloads/logos 色を変更して背景に使用しました.