見出し画像

Gitなんもわからん人がハーバードのGit講義動画を見て取った講義ノート

目的

学ロボで複数人開発を行うにあたって、プロジェクト管理とバージョン管理を行うために導入するよ!今まではいちいちzip形式でgoogleドライブに上げて共有してたよ!あほくさいね!

Gitって?

ソースコードを追跡してくれるもの。
今までファイルに日付をつけて複製保存してたものが、1つのファイルで履歴管理できるようになるよ!
しかも複数人で同じファイルを弄れるようになるよ!
この時、AさんとBさんが1つのファイルを編集しても、それらを融合して最新版を保存できるよ!
あとはブランチ切って変更を試すとかできるよ!

GitHubって?

Gitで管理されるリポジトリを置いておくためのオンラインストレージみたいなものだよ!

さぁ!はじめよう!

ひとまずチュートリアルどおりに、リモートを先に作成してローカルに落とす方法を学ぶ

1.リポジトリ作成

名前つけて、公開範囲設定して、READMEつけて、Createします。

2. git clone

リモートリポジトリをcloneするようのローカルフォルダをコンピュータに作成する。
1.で作ったリモートリポジトリのURLをHTTP形式で取得
さっき作ったローカルフォルダで

git clone <URL>

して、リモートの状況をローカルに反映させる

3.編集

クローンするとリモートと同じ名前のフォルダができるので、その中に新規ファイルを作成する。main.cppを作った。

4.GitにCommitする

Gitはリポジトリ単位で管理するので、保存したい状態=(セーブポイント=Commit)のローカルフォルダをGitちゃんに伝える。

4.1Commitのためのgit add

git addはGitに指定したファイルと追跡対象に加えることを要請するコマンド。addした(過去にされてた)ファイルのみが次回のCommitで保存される。
(Tips:なぜaddとCommitが分かれているか→10個の新規ファイルを弄っていて、そのうち成功した3つだけ保存したい(のこりの7は未完で編集途中)とき、10個すべてを保存するコマンドだけだと不便だから。全部保存するコマンドもある)
さっき新規作成したファイルがあるディレクトリで

git add <ファイル名>

すると、ターミナルは何も返事しないけど、addされている。
さぁこれでcommitの準備は整ったぞ!
この間でファイルが増えてれば、それもaddしてあげる。

4.2 git commit -m "massage"

VSCodeなら、stageの部分に自分がaddしたすべてのファイルが存在することを確認し、

git commt -m "mssage"

すると、

[main cac6bb7] First commit. add main.cpp and a.exe
 2 files changed, 6 insertions(+)
 create mode 100644 a.exe
 create mode 100644 main.cpp

こんな感じで返事が返ってくる。今回は2つのファイルを作成、stageしたので、それが正常にcommitされたらしい。
この段階ではローカルのgitリポジトリのみが更新されているので、これをクラウドと同期する必要がある。

5. git status

git statusを実行すると、いろいろ返事が返ってくる。
"originバージョンのリポジトリ"とは、現在GitHubにある最新バージョンのリポジトリで、それよりローカルリポジトリがcommit何個分進んで(遅れて)いるか知ることができる。また、作業中のブランチがどこか知ることができる。

On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

こんな感じ。

6. git push

git push

すると、ローカルcommit(ローカルリポジトリに加えたすべての変更)がGitHubと同期される。
実行時、本当に初めてのpushだとGitHubの認証が入るので、ブラウザ認証なりで認証する。

ここまでで、一連の動作を追うことができた

ファイルに変更を加えよう!

git add, git commit -mをまとめる

では、先ほど作成したmain.cppを編集する。
無意味に追加したmath.hをincludeから外す。
ファイルを変更したら、ファイルをstage(add)して、commitする。
ここで、

git commit -am "massage"

を実行すると、その回でリポジトリに加えた全て(All)の変更を一括でaddし、commitまで行える。
addしていない状態のファイルはVSCode上では"changes"の下に表示される。

$> git commit -am "delete math.h"
[main 237f274] delete math.h
 1 file changed, 1 deletion(-)

push する

コマンドプロンプトでgit pushしてもいいが、VSCodeにはpushボタンがあるので、それを押すことでも同様にGitHubと同期することができる。

オンラインの最新バージョンをローカルに落とす

git pull

GitHub上のファイルがローカルよりも新しいバージョンの時、例えば誰かがファイルに変更を加えたときなどに、最新バージョンをローカルに落とす必要がある。
そこで git pushすると、ローカルが最新バージョンと置き換わる。
この時、git statusで状態を確認しても、ローカルがリモートから遅れていることはわからない。

$> git pull
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 653 bytes | 21.00 KiB/s, done.
From https://github.com/TMPI5235/git_lecture
   237f274..b61ce03  main       -> origin/main
Updating 237f274..b61ce03
Fast-forward
 new_.h | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 new_.h

競合が発生したらどうする?

ローカルで変更を加えてpushせずに最新情報をpullすると競合して> る場合がある。

$>git pull
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 720 bytes | 34.00 KiB/s, done.
From https://github.com/TMPI5235/git_lecture
   b61ce03..3125da3  main       -> origin/main
Auto-merging main.cpp
CONFLICT (content): Merge conflict in main.cpp
Automatic merge failed; fix conflicts and then commit the result.

こんなメッセージと共に、

競合発生

こうなる。
この競合は人間が編集することで解決する。
GitHubには最新のpushが保存されるので、pushする前に変更がないかpullして確認し、自分のローカルファイルが最新ばんであることが確認できたらmainブランチにpushする。

競合の解決

VSCodeにはマージビューなるものが存在するので、そこでポチポチしてもいい。今回は双方の変更を採用した。
これを再度commitしてpushする。

正常にできた。

git logとgit reset

戻せる

ブランチ

git branch

リポジトリに存在するブランチを表示する

git branch branch_name

ローカルにブランチを作成する

git checkout

作業ブランチを変更する

git checkout -b branch_name

ブランチを作成する

git merge branch_name

mainブランチ、あるいは統合先のブランチで実行すると、branch_nameが作業ブランチに統合される。

いざMbedStudioでGitHub連携してみる

ここまではGitHubに先にリポジトリがあって、それをローカルにcloneして初めていた。
ローカルにもともとあるファイルをGitHubに投げるにはどうすればいいだろう?

git init

カレントディレクトリをローカルリポジトリとしてgitに登録するよ!

git add -a

ローカルリポジトリの全てのファイルを追跡対象にするよ!

git commit -m "massage"

追跡したファイルを初めてcommitするよ!

GitHubに空のリポジトリ=受け皿をつくる

ローカルリポジトリを紐づけるために受け皿をつくる
READMEは作らなかった。
プライベートでもいけた

git remote add origin URL

ローカルとリモートを連携する
アカウント認証とかあるかも

git push origin master

初めてpushする

やったね!
成功だ!!!

この記事が気に入ったらサポートをしてみませんか?