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する
やったね!
成功だ!!!
この記事が気に入ったらサポートをしてみませんか?