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

ビジュアルでわかる最初のGit (第一部)

ビジュアルでわかる最初のGit (第一部)

【オンライン】Git/GitHubをもっと知りたい!いまさら聞けない実用セミナー

https://algyan.connpass.com/event/208747/

解説動画があります: https://www.youtube.com/watch?v=47tv5d74ZAE

Gitを、論理的な視点から捉えた良書はたくさんあります。なので、今回は別の切り口、「視覚的に捉える」という方法で解説を試みたいと思います。

解説に含む内容: Gitを使う上で、知っておきたい概観の知識 (→知らないと困ること)
解説に含まない内容: Gitコマンドの具体的な使用方法。Gitの内部構造

924d7de2a5a7102a597728e5edbbff78?s=128

Kouji Matsui
PRO

May 08, 2021
Tweet

Transcript

  1. (c) 2021 Kouji Matsui ビジュアルでわかる 最初のGit (第一部) 2021.5.8 GIT/GITHUBをもっと知りたい! いまさら聞けない実用セミナー

    - KOUJI MATSUI @KEKYO2
  2. (c) 2021 Kouji Matsui Kouji Matsui – kozy, kekyo •

    NAGOYA city, AICHI pref., JP • Twitter – @kekyo2, @kozy_kekyo • Self employed (I’m looking for a job) • Microsoft Most Valuable Professional VS and DevTech 2015- • Center CLR organizer. • .NET/F#/IL/metaprogramming or like… • Bicycle rider
  3. (c) 2021 Kouji Matsui はじめに 今日はGitの話をします。 Gitを、論理的な視点から捉えた良書はたくさんあります。 なので、ここでは別の切り口、 視覚的に捉える という方法で解説を試みたいと思います。

  4. (c) 2021 Kouji Matsui はじめに この解説に含む内容: ◦ Gitを使う上で、知っておきたい概観の知識 → 知らないと困ること

    この解説に含まない内容: ◦ Gitコマンドの具体的な使用方法 ◦ Gitの内部構造 ◦ 公式の解説があります: https://git-scm.com/book/ja/v2 ◦ 各種Gitクライアント(触れる程度に) ◦ 各種Gitサービス
  5. (c) 2021 Kouji Matsui はじめに 特にお勧めの方: ◦ Gitの何が良いのかわからない。 ◦ 見よう見まねでGitを使ってるけど、良くわかってない。

    ◦ これから覚えたいけど、使用方法以外の部分を補完したい。 ◦ コマンドの使い方は他の資料を見れば分かるので、考え方を理解した い。
  6. (c) 2021 Kouji Matsui (c) 2021 Kouji Matsui Agenda ファイルを保存したい

    変更の蓄積をどうやってやる? 歴史の改ざんと並行世界 札の正体 みんなで開発をやりたい 第二部: マージの真実
  7. (c) 2021 Kouji Matsui ファイルを保存したい 今まで、ソースコード管理とかしたことない… Copying metaphor: Microsoft Windows

    2000 in Feb 2000
  8. (c) 2021 Kouji Matsui ファイルを保存したい だって、こうするしかないじゃない

  9. (c) 2021 Kouji Matsui ファイルを保存したい 我々の世界でもこうですよ…

  10. (c) 2021 Kouji Matsui ファイルを保存したい 何が知りたい?

  11. (c) 2021 Kouji Matsui ファイルを保存したい 何が知りたい? どれが最新? どれとどれが関連している? どう違う?

  12. (c) 2021 Kouji Matsui ファイルを保存したい 「難しいのはいいや。ディレクトリ配下の全てのファイルを コピって保存しておけばええやろ」 結局、全部コピーして バックアップすれば安全

  13. (c) 2021 Kouji Matsui ファイルを保存したい 感じる問題: ◦ 手順が明確じゃない ファイル名のつけ方とか ◦

    堅牢じゃない コピー間の関連性が失われてしまう可能性 後からしれっと変更出来てしまう ◦ 共同作業がやりにくい たまたま、同じファイル名を付けようとした
  14. (c) 2021 Kouji Matsui ファイルを保存したい 感じる問題: ◦ 手順が明確じゃない ファイル名のつけ方とか ◦

    堅牢じゃない コピー間の関連性が失われてしまう可能性 後からしれっと変更出来てしまう ◦ 共同作業がやりにくい たまたま、同じファイル名を付けようとした 問題を回避するために、複雑な手順を導入 vs. 全てをあきらめ、間違ってもまあいいや
  15. (c) 2021 Kouji Matsui ファイルを保存したい 大丈夫大丈夫、最悪日付を見ればわかる 間違えて削除しちゃったので バックアップからコピー

  16. (c) 2021 Kouji Matsui ファイルを保存したい 大丈夫大丈夫、最悪日付を見ればわかる… ギャーーー もはや忘却の彼方 CVSの頃にやらかした…

  17. (c) 2021 Kouji Matsui (c) 2021 Kouji Matsui Agenda ファイルを保存したい

    変更の蓄積をどうやってやる? 歴史の改ざんと並行世界 札の正体 みんなで開発をやりたい 第二部: マージの真実
  18. (c) 2021 Kouji Matsui 変更の蓄積をどうやってやる? Gitにおいては、”.git”ディレクトリ配下に保存される “git init” コマンドで そのディレクトリ配下に

    .gitが作られる
  19. (c) 2021 Kouji Matsui 変更の蓄積をどうやってやる? 全てのファイル群を一意に識別できるIDを振る 6a28fb753eb4c9…

  20. (c) 2021 Kouji Matsui 変更の蓄積をどうやってやる? 全てのファイル群を一意に識別できるIDを振る 6a28fb753eb4c9… b1ff9de048ca952… ファイル追加・削除 内容の変更

    をすると、まったく違うIDになる (連番じゃない)
  21. (c) 2021 Kouji Matsui 変更の蓄積をどうやってやる? 全てのファイル群を一意に識別できるIDを振る 6a28fb753eb4c9… b1ff9de048ca952… ファイルの内容の他に、 誰が作成したか・いつ作成したか

    の情報も含む
  22. (c) 2021 Kouji Matsui 変更の蓄積をどうやってやる? 全てのファイル群を一意に識別できるIDを振る 6a28fb753eb4c9… b1ff9de048ca952… b1ff9de048ca952… 仮に、まったく同じ条件なら

    まったく同じIDになる
  23. (c) 2021 Kouji Matsui 変更の蓄積をどうやってやる? 「コミット」する (git commit) 6a28fb753eb4c9… .git

    IDが付く
  24. (c) 2021 Kouji Matsui 変更の蓄積をどうやってやる? 一部変更して「コミット」する b1ff9de048ca952… .git 違うIDが付く ファイル変更

    した
  25. (c) 2021 Kouji Matsui 変更の蓄積をどうやってやる? .gitディレクトリには、沢山のコミットが存在する: .git 6a28fb753eb4c9… b1ff9de048ca952… 663ca52f97b3ce87…

  26. (c) 2021 Kouji Matsui 変更の蓄積をどうやってやる? コミットした順に関連付けられる .git 6a28fb753eb4c9… b1ff9de048ca952… 663ca52f97b3ce87…

  27. (c) 2021 Kouji Matsui 変更の蓄積をどうやってやる? 実際は親のコミットIDを覚えている .git 6a28fb753eb4c9… 親: なし

    b1ff9de048ca952… 親: 6a28fb753eb4c9… 663ca52f97b3ce87… 親: b1ff9de048ca952…
  28. (c) 2021 Kouji Matsui 変更の蓄積をどうやってやる? コミットIDの付与に関係する情報: 情報 詳細 Author ファイル作成者

    “Kouji Matsui <kekyo@example.com>" Date コミット日時 Parent 親のコミットのID File structures and blobs ディレクトリやファイルの構造と内容 6a28fb753eb4c9… コミットIDを計算する (ハッシュ関数)
  29. (c) 2021 Kouji Matsui 変更の蓄積をどうやってやる? 補足: ディレクトリ構造・ファイルの内容は、実際には変更さ れたファイルだけが保存の対象になります。 ファイル内容の差分ではなく、ファイル全体が保存されます。

  30. (c) 2021 Kouji Matsui 変更の蓄積をどうやってやる? ファイル内容の差分(例えばdiff/patch形式)を保存する方が、 ストレージ容量を削減出来て良さそうですが: ◦ あるコミットをチェックアウトするときに、ファイルの再現計算に時 間がかかる(過去の差分をすべてpatchする…)

    ◦ 途中の差分が壊れていると、以降のコミットが全滅する Gitの場合は、可逆圧縮(zlib)を使うことで、サイズを減らして います。
  31. (c) 2021 Kouji Matsui (c) 2021 Kouji Matsui Agenda ファイルを保存したい

    変更の蓄積をどうやってやる? 歴史の改ざんと並行世界 札の正体 みんなで開発をやりたい 第二部: マージの真実
  32. (c) 2021 Kouji Matsui 歴史の改ざんと並行世界 ファイルの一部だけ変更して、直したい… c5da2b979d1156… .git 一部だけ変更 元ID:6a28fb753eb4c9…

  33. (c) 2021 Kouji Matsui 歴史の改ざんと並行世界 ファイルの一部だけ変更して、直したい… .git 6a28fb753eb4c9… 親: なし

    b1ff9de048ca952… 親: 6a28fb753eb4c9… 663ca52f97b3ce87… 親: b1ff9de048ca952…
  34. (c) 2021 Kouji Matsui 歴史の改ざんと並行世界 ファイルの一部だけ変更して、直したい… .git 6a28fb753eb4c9… 親: なし

    b1ff9de048ca952… 親: 6a28fb753eb4c9… 663ca52f97b3ce87… 親: b1ff9de048ca952… c5da2b979d1156… 親: 6a28fb753eb4c9…
  35. (c) 2021 Kouji Matsui 歴史の改ざんと並行世界 ファイルの一部だけ変更して、直したい… .git 6a28fb753eb4c9… 親: なし

    b1ff9de048ca952… 親: 6a28fb753eb4c9… 663ca52f97b3ce87… 親: b1ff9de048ca952… c5da2b979d1156… 親: 6a28fb753eb4c9… 違うIDになるので どうやっても 「変更」はできない
  36. (c) 2021 Kouji Matsui 歴史の改ざんと並行世界 どのコミットを親とするか? 6a28fb753eb4c9… 変更中

  37. (c) 2021 Kouji Matsui 歴史の改ざんと並行世界 どのコミットを親とするか? 6a28fb753eb4c9… 現在のコミットID: 6a28fb753eb4c9… 変更中

    付箋のようなもの (札)が必要
  38. (c) 2021 Kouji Matsui 歴史の改ざんと並行世界 どのコミットを親とするか? c5da2b979d1156… 親: 6a28fb753eb4c9… 6a28fb753eb4c9…

    現在のコミットID: c5da2b979d1156… コミット 付け替える (IDが変わる)
  39. (c) 2021 Kouji Matsui 歴史の改ざんと並行世界 現在のコミットを示す札を「HEAD」と呼びます c5da2b979d1156… 6a28fb753eb4c9… “HEAD” c5da2b979d1156…

  40. (c) 2021 Kouji Matsui 歴史の改ざんと並行世界 コミットするとHEAD札はどんどん移動します: .git 6a28fb753eb4c9… b1ff9de048ca952… 663ca52f97b3ce87…

    “HEAD” 663ca52f97b3ce87… コミット コミット
  41. (c) 2021 Kouji Matsui 歴史の改ざんと並行世界 途中で改ざんすると? .git 6a28fb753eb4c9… 親: なし

    b1ff9de048ca952… 親: 6a28fb753eb4c9… 663ca52f97b3ce87… 親: b1ff9de048ca952… “HEAD” 6a28fb753eb4c9… 今はここを指している
  42. (c) 2021 Kouji Matsui 歴史の改ざんと並行世界 途中で改ざんすると、改ざんした方を指します: .git 6a28fb753eb4c9… 親: なし

    b1ff9de048ca952… 親: 6a28fb753eb4c9… 663ca52f97b3ce87… 親: b1ff9de048ca952… c5da2b979d1156… 親: 6a28fb753eb4c9… “HEAD” c5da2b979d1156… こっちを指す
  43. (c) 2021 Kouji Matsui 歴史の改ざんと並行世界 コミットは改ざん出来ない: ◦ 改ざんすると、違うコミットIDになる。 ◦ 改ざんすると、同じ親を指す異なるコミットになる。

    ◦ 親の追跡が「HEAD」で行われる。 元のコミットを削除すれば、変更したことになる? ◦ コミットIDが変わっても良いなら。 ◦ それはもはや異なる歴史。 ◦ 並行世界の誕生?
  44. (c) 2021 Kouji Matsui (c) 2021 Kouji Matsui Agenda ファイルを保存したい

    変更の蓄積をどうやってやる? 歴史の改ざんと並行世界 札の正体 みんなで開発をやりたい 第二部: マージの真実
  45. (c) 2021 Kouji Matsui 札の正体 ID覚えるの大変だし何かいい方法は? 名前つけてみる? .git 6a28fb753eb4c9… b1ff9de048ca952…

    663ca52f97b3ce87… c5da2b979d1156… “foobar” b1ff9de048ca952… 名前を付けた 札
  46. (c) 2021 Kouji Matsui 札の正体 ID覚えるの大変だし何かいい方法は? 名前つけてみる? .git 6a28fb753eb4c9… b1ff9de048ca952…

    663ca52f97b3ce87… c5da2b979d1156… “foobar” b1ff9de048ca952… “HEAD” c5da2b979d1156… 何だか、HEADに 似てる?
  47. (c) 2021 Kouji Matsui 札の正体 名前の札とHEAD札は、ほぼ同じ扱いです。 これらの札の事を、「ブランチ」と呼びます。 これで混乱した人は、多分SubversionやTFS(TFVC)を触ったこと があるかも知れません(すぐ説明します)。

  48. (c) 2021 Kouji Matsui 札の正体 名前の札は複数付けられるので: .git “foobar” b1ff9de048ca952… “HEAD”

    c5da2b979d1156…
  49. (c) 2021 Kouji Matsui 札の正体 ブランチが複数存在する状態: .git “foobar” b1ff9de048ca952… “HEAD”

    c5da2b979d1156… “main” 594f2bacae342b7… “devel” 993e92d68c31d25… “baz” 993e92d68c31d25…
  50. (c) 2021 Kouji Matsui 札の正体 ブランチが複数存在する状態: .git “foobar” b1ff9de048ca952… 末端のコミット

    でなくてもOK
  51. (c) 2021 Kouji Matsui 札の正体 ブランチが複数存在する状態: .git “devel” 993e92d68c31d25… “baz”

    993e92d68c31d25… 同じコミットを 指していてもOK
  52. (c) 2021 Kouji Matsui 札の正体 ブランチの真実: もし、札がこのように付いていれば: .git “main” 594f2bacae342b7…

    “devel” 993e92d68c31d25… “foobar” cf1e5eb778ad6c9…
  53. (c) 2021 Kouji Matsui 札の正体 ブランチの真実: もし、札がこのように付いていれば: .git “main” 594f2bacae342b7…

    “devel” 993e92d68c31d25… “foobar” cf1e5eb778ad6c9… main
  54. (c) 2021 Kouji Matsui 札の正体 ブランチの真実: もし、札がこのように付いていれば: .git “main” 594f2bacae342b7…

    “devel” 993e92d68c31d25… devel “foobar” cf1e5eb778ad6c9…
  55. (c) 2021 Kouji Matsui 札の正体 ブランチの真実: もし、札がこのように付いていれば: .git “main” 594f2bacae342b7…

    “devel” 993e92d68c31d25… foobar “foobar” cf1e5eb778ad6c9…
  56. (c) 2021 Kouji Matsui 札の正体 ブランチの真実: もし、札がこのように付いていれば: .git “main” 594f2bacae342b7…

    “devel” 993e92d68c31d25… という「分岐」が 存在しているように見える… “foobar” cf1e5eb778ad6c9…
  57. (c) 2021 Kouji Matsui 札の正体 Gitのブランチは、札による「ツリーの様」を表していて、分 岐構造を識別するものではありません。

  58. (c) 2021 Kouji Matsui 札の正体 コミットで動かない名前の札:「タグ」 .git “release2157” c5da2b979d1156… “devel”

    c5da2b979d1156… コミット 同じコミットを 指しているブランチ 同じコミットを 指しているタグ
  59. (c) 2021 Kouji Matsui 札の正体 コミットで動かない名前の札:「タグ」 .git “release2157” c5da2b979d1156… “devel”

    c5da2b979d1156… ブランチは移動するが タグは移動しない
  60. (c) 2021 Kouji Matsui 札の正体 HEADの真の姿: .git “HEAD” devel ブランチをチェックアウトすると

    HEADはブランチを指す “devel” c5da2b979d1156… コミット
  61. (c) 2021 Kouji Matsui 札の正体 HEADの真の姿: .git “devel” c5da2b979d1156… “HEAD”

    devel ブランチは移動するが HEADはdevelを指したまま
  62. (c) 2021 Kouji Matsui 札の正体 HEADの真の姿: .git “HEAD” devel “devel”

    c5da2b979d1156… コミット “foobar” c5da2b979d1156… ブランチが複数あったとしても
  63. (c) 2021 Kouji Matsui 札の正体 HEADの真の姿: .git “devel” c5da2b979d1156… “HEAD”

    devel HEADが指している ブランチが移動する “foobar” c5da2b979d1156… 移動しない
  64. (c) 2021 Kouji Matsui 札の正体 札の種類についてのまとめ: ◦ ブランチは、コミットによって移動する。 ◦ タグは、コミットによって移動しない。

    ◦ HEADは、現在のチェックアウトを保持する。 → 札は、コミットIDやブランチを示すポインタでしかない。 注意: 「札」はこの解説固有の呼称です。 “main” “release2157” “HEAD”
  65. (c) 2021 Kouji Matsui 札の正体 以上から、少し前に話題になった件: ◦ ”main”または“master”という名称に、特別な意味はない。 ◦ “master”を”main”に置き換え(変更)しても、Git上特に不都合はない。

    ◦ 何なら、“master”と”main”が同居しても良い。 ◦ それどころか、”master”や”main”が存在しなくても問題ない。 事もわかると思います。 なお、“main”または”master”は、Gitのデフォルトのブランチ名 です。 “main” “master” VS
  66. (c) 2021 Kouji Matsui 札の正体 TIPS: グチャグチャになったら: .git “devel” ブランチが意図しないところに…

  67. (c) 2021 Kouji Matsui 札の正体 TIPS: グチャグチャになったら: .git “devel” git

    reset --hard で、強制的に 指定したコミットIDに移動
  68. (c) 2021 Kouji Matsui (c) 2021 Kouji Matsui Agenda ファイルを保存したい

    変更の蓄積をどうやってやる? 歴史の改ざんと並行世界 札の正体 みんなで開発をやりたい 第二部: マージの真実
  69. (c) 2021 Kouji Matsui みんなで開発をやりたい 今まではローカルリポジトリでGitを使ってきました: .git 1 2 3

    4 5 6 7 8
  70. (c) 2021 Kouji Matsui みんなで開発をやりたい 他の人のリポジトリとやり取りすると、共同作業できます: .git だれかの .git 1

    2 3 9 7 5 1 2 3 4 5 6 7 8
  71. (c) 2021 Kouji Matsui みんなで開発をやりたい コミットIDは、内容が同じなら同じID: .git だれかの .git 1

    2 3 9 7 5 1 2 3 4 5 6 7 8 簡略化のため IDを連番で説明
  72. (c) 2021 Kouji Matsui みんなで開発をやりたい コミットIDは、内容が同じなら同じID: .git だれかの .git 1

    2 3 9 7 5 1 2 3 4 5 6 7 8 同じコミットIDなら 中身も同じ
  73. (c) 2021 Kouji Matsui みんなで開発をやりたい コミットIDは、内容が同じなら同じID: .git だれかの .git 1

    2 3 9 7 5 1 2 3 4 5 6 7 8 相互に存在しない コミット
  74. (c) 2021 Kouji Matsui みんなで開発をやりたい 右のリポジトリを取り込む (git fetch) : .git

    だれかの .git 1 2 3 9 7 5 1 3 4 5 6 7 8 親のコミットIDは2 存在しないコミット 2 9
  75. (c) 2021 Kouji Matsui みんなで開発をやりたい もし、逆にfetchした場合: .git だれかの .git 1

    2 3 4 5 6 7 8 存在しないコミット 9 1 2 3 7 4 8 5 6
  76. (c) 2021 Kouji Matsui みんなで開発をやりたい 両者は同一になるはず。 .git だれかの .git 9

    1 2 3 7 4 8 5 6 1 3 4 5 6 7 8 2 9
  77. (c) 2021 Kouji Matsui みんなで開発をやりたい “git fetch”コマンドを実行すると、相手から足りないコミット を取り込むことができる。 ◦ データベースの同期機能(レプリケーション)のようなもの。

    片方向のみ(双方向ではない)。 .gitディレクトリ内のデータが処理されるため、今手元で編集 中のファイルやディレクトリには影響しない。
  78. (c) 2021 Kouji Matsui みんなで開発をやりたい つまり、勝手にマージされたりしない。 札類は動かない。 マージ操作は、常に手動によってのみ発生する (ので、安心していつでもfetchして良い)

  79. (c) 2021 Kouji Matsui みんなで開発をやりたい 変更点を送信する (git push): .git だれかの

    .git 1 2 3 4 5 6 7 8 mainに関係のある コミット 9 1 2 3 7 5 “main”
  80. (c) 2021 Kouji Matsui みんなで開発をやりたい 変更点を送信する (git push): .git だれかの

    .git 1 2 3 4 5 6 7 8 mainに関係のある コミット 9 1 2 3 7 4 5 “main” “main” ID:4が転送され ブランチが移動
  81. (c) 2021 Kouji Matsui みんなで開発をやりたい 変更点を送信する (git push): .git だれかの

    .git 1 2 3 4 5 6 7 8 9 1 2 3 7 4 5 “main” “main” 相手のブランチが 勝手に変わるのは まずいのでは??
  82. (c) 2021 Kouji Matsui みんなで開発をやりたい 普通は直接fetch/pushしたりしません(出来ません): .git だれかの.git fetch push

  83. (c) 2021 Kouji Matsui みんなで開発をやりたい リモートサーバー .git だれかの.git Gitサーバー サーバーを介します

  84. (c) 2021 Kouji Matsui みんなで開発をやりたい リモートサーバー .git だれかの.git .git Gitサーバーにも

    .gitディレクトリがある
  85. (c) 2021 Kouji Matsui みんなで開発をやりたい リモートサーバー .git .git つまり、こういう状態

  86. (c) 2021 Kouji Matsui みんなで開発をやりたい 変更点を送信する (git push): .git Gitサーバー

    1 2 3 4 5 6 7 8 9 1 2 3 7 4 5 “main” “main” Gitサーバーの mainブランチが移動 OK!
  87. (c) 2021 Kouji Matsui みんなで開発をやりたい リモートサーバー .git だれかの.git .git mainが移動

  88. (c) 2021 Kouji Matsui みんなで開発をやりたい リモートサーバー .git だれかの.git .git 競合する??

    → ブランチの順方向移動ならOK mainが更に移動?
  89. (c) 2021 Kouji Matsui みんなで開発をやりたい ブランチの順方向の移動: .git Gitサーバー .git 1

    2 3 4 5 6 7 8 9 1 2 3 7 5 “main” “main” push
  90. (c) 2021 Kouji Matsui みんなで開発をやりたい ブランチの順方向の移動: .git Gitサーバー .git 1

    2 3 4 5 6 7 8 9 1 2 3 7 5 “main” “main” 4 順方向
  91. (c) 2021 Kouji Matsui みんなで開発をやりたい ブランチの順方向ではない移動: .git Gitサーバー .git 1

    2 3 4 5 6 7 8 9 1 2 3 7 5 “main” “main” push
  92. (c) 2021 Kouji Matsui みんなで開発をやりたい ブランチの順方向ではない移動: .git Gitサーバー .git 1

    2 3 4 5 6 7 8 9 1 2 3 7 5 “main” 4 “main” 順方向ではない
  93. (c) 2021 Kouji Matsui みんなで開発をやりたい 順方向の移動であれば、最新のブランチをpushできる。 ◦ 順方向とは、より新しいコミット(小孫)方向。 順方向ではない場合は、push時にエラーになる。 ◦

    親方向への移動を行った。 ◦ まったく関係のないコミットに移動している。 そんなことあるの? ◦ 例: git reset --hardで逆方向に移動したブランチ ◦ 例: 誰かがマージしたために、ブランチが移動していた → 一旦fetchして、ローカルでマージしてからpush ◦ 例: リベースで新たなコミットIDを指すことになったブランチ
  94. (c) 2021 Kouji Matsui みんなで開発をやりたい エラーを無視して強制するのが、巷で言う”git push --force” ◦ force

    pushはサーバーでエラーとなるように設定されている場合がある。 ◦ 出来た方が自由度が高いので、誤用は運用で回避した方が良いです。 pushの逆とも言えるfetchでは、勝手にブランチは移動しない: ◦ 前に触れた通り。 ◦ 但し、“git pull”は別。pullは、fetchしてmergeするのと同じ。
  95. (c) 2021 Kouji Matsui みんなで開発をやりたい GitのGUIクライアントには 定期的にfetchする機能があります ツリー表示は勝手に更新されます。 ブランチやタグは動きません!

  96. (c) 2021 Kouji Matsui みんなで開発をやりたい リモートサーバーの特定 .git Gitサーバー .git https://github.com/kekyo/...

    長い…
  97. (c) 2021 Kouji Matsui みんなで開発をやりたい リモートサーバーの特定 .git .git “origin”という名前を付ける “git

    remote add origin https://github.com/kekyo/...”
  98. (c) 2021 Kouji Matsui みんなで開発をやりたい リモートサーバーの特定 .git .git リモートサーバーは いくつでも追加できる

    .git .git
  99. (c) 2021 Kouji Matsui みんなで開発をやりたい リモートサーバーの特定 .git .git neko .git

    .git “git fetch origin” → originからfetchする
  100. (c) 2021 Kouji Matsui みんなで開発をやりたい リモートサーバーの特定 .git .git neko .git

    .git “git push origin main” → originのmainにpushする “main” “main”
  101. (c) 2021 Kouji Matsui みんなで開発をやりたい リモートサーバーの特定 .git .git .git sumo

    .git “git push neko main” → nekoのmainにpushする “main” “main”
  102. (c) 2021 Kouji Matsui みんなで開発をやりたい 複数のリモートリポジトリ .git .git .git 他の人が同じ名前を付けて

    いるとは限らない
  103. (c) 2021 Kouji Matsui みんなで開発をやりたい 複数のリモートリポジトリ .git .git .git .git

  104. (c) 2021 Kouji Matsui みんなで開発をやりたい 複数のリモートリポジトリ .git .git .git .git

  105. (c) 2021 Kouji Matsui みんなで開発をやりたい 複数のリモートリポジトリ .git .git .git .git

  106. (c) 2021 Kouji Matsui みんなで開発をやりたい .git .git .git .git

  107. (c) 2021 Kouji Matsui みんなで開発をやりたい .git .git .git .git

  108. (c) 2021 Kouji Matsui みんなで開発をやりたい .git だれかの.git .git .git

  109. (c) 2021 Kouji Matsui みんなで開発をやりたい .git だれかの.git .git .git 自分の作業用リポジトリを持ちつつ

    他のリポジトリにfetch/pushしたり出来ます
  110. (c) 2021 Kouji Matsui みんなで開発をやりたい 複数のリモートリポジトリが 合成されて表示されます

  111. (c) 2021 Kouji Matsui 第二部へ続く… 素材: いらすとや さん 素材: Vincent

    Le Moignさん他 (CC-BY)