Open6

Gitを使ってGithubにコミットするまで

Cr1staCr1sta

このスクラップは?

Githubとは何か、Gitとか何か、それを使用する利点をまとめたうえで実際にやってみるチュートリアル的なものです。これに似たような記事はたくさんありますが、部活内で共有するときのためにスクラップにしてまとめました。

スクラップの見方

いくつかのステップを段階に分けて、投稿しています。とりあえずはスクラップを追いながらやってみるといいでしょう。(🤖>だったらZennのBooksを使えばいいのに...)

本スクラップの目的

このスクラップは、初心者が最低限理解できることを目指し、GitとGithubに絞って説明しています。が、世の中にはこれ以外のサービス・ツールが存在します。
例えば、Gitと同じバージョン管理システムとして、「SVN」というものがあります。最近は聞く機会があまりないですが、もしかしたら今後使う可能性があります。
また、Githubと同じサービスにGitLab、bitbacket等もありますが、基本的な概念等は同じですのでそれぞれの使い方は各々調べてください。

誤植・間違い等

基本的にWikipedia等を参照しながら間違いがないことを確認していますが、万が一誤植や表現が不適切などがありましたら、私のXアカウントのDMにこのスクラップのリンクと修正すべき点を教えていただけますと幸いです。(スパム防止で、私のフォロワーである必要があるかもしれません。その場合は直接メンションを飛ばしていただいても大丈夫です。)

Cr1staCr1sta

Gitとは?

ざっくり言えば、「ソースコードの変更を記録して、管理するシステム」。
Wikipediaから引用すると、

プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。Linuxカーネルのソースコード管理に用いるためにリーナス・トーバルズによって開発され、それ以降ほかの多くのプロジェクトで採用されている。

なぜこれが世界中のシステムで使われているかというと、「チームでの開発をした際に誰がどの箇所を変更したかを確認できる」、「変更して不具合が発生した場合に変更する前のコードにロールバックできる」といった利点がある。他には、ネットワークがつながらない状況でもバージョン管理をローカルで行うことができる。ちなみにGitのリリースは2005年に行われ、今年で20年が経過する。(2025/02/01現在)

Githubとは?

ソフトウェアを開発するのにほぼ不可欠なプラットフォーム。ソースコードをWeb上でホスティングする。
Githubを簡単に言えば、OneDriveやGoogleドライブなどのクラウドサービスのようなものではあるが、ソースコードのバージョンを管理しながらホスティングができるという点においては異なる。ソフトウェア管理システムにGitが備わっているので、誰が変更したかがWeb上で見ることができる。(もちろんターミナル上でも可)
その他にも、Gitにはない機能も一部持っている。その例として、コードのレビュー機能や今後のロードマップをProjectsとして共有することができる。

GitとGithubの違い

同じGitという文字が入っているので同じものと思うかもしれないが、異なる。
Gitは、単に「バージョン管理システム」であって、ローカル環境で用いられる。つまり、個々のデバイス上で動作するソフトウェア(ツール)である。
Githubは、そのGitを利用したソースコードをホスティングするWebサービスで、Web上でのみ利用することができる。

Cr1staCr1sta

Git用語

Git・Githubでよく使われる用語をここで紹介する。今後はGit用語を踏まえて説明するため今はざっくりと理解できれば問題ない。

リポジトリ

要約すると「データやファイルなどの保管場所」を指す。リポジトリという用語は、いろいろな場所で聞くことが多いが、Gitではソースコードを保管する場所として使われる。
また、ローカルリポジトリ・リモートリポジトリの二つに分けることができる。

  • ローカルリポジトリ
    自分自身のみが参照できるリポジトリ(保管場所)。自身のデバイス内にあるリポジトリでもある。
  • リモートリポジトリ
    自分を含む他人も参照できるリポジトリ(保管場所)。リモートなので通常はサーバー上に格納されている。Github上のリポジトリもリモートリポジトリにあたる。

クローン(clone)

上の保管場所を自分自身のデバイスにコピーし保存(=clone)する。リポジトリのクローンは、リモートリポジトリを自分のデバイス上に持っていくときに使うことが多い。

フォーク(fork)

リモートリポジトリを自分のリモートリポジトリにコピーする。例えば、元のリポジトリがメンテナンスされていない(=更新されていない)ときに、フォークして修正するということがあります。

プル(pull)

リモートリポジトリの変更内容とローカルリポジトリの変更内容を比較し、その差分をリモートリポジトリからコピーする。(リモートリポジトリとローカルリポジトリを同期するようなもの)
他の人が変更した内容を、ローカルにも反映したい場合はこれを用いる。

プッシュ(push)

pullとは反対に、ローカルで変更した内容をリモートリポジトリにアップロードする。自分が変更した内容をリモートにも反映する場合に用いられる。

ブランチ(branch)

日本語で訳すと、「枝」。作業履歴等を枝分かれさせる機能。例えば、複数プラットフォーム用に開発していればMac用ブランチ、Win用ブランチ、Linux用ブランチのように分けることができ、リポジトリを作り直す必要がなくなる。
ブランチの大元を「mainブランチ(masterブランチ)」といい、ここからいくつかのブランチが作られる。[1]

マージ(merge)

別のブランチを元のブランチに結合する機能。例えば、ベータ版用のブランチを用意していて、リリース版(main)ブランチに反映させたい場合はマージすることで反映できる。

プルリクエスト(pull request)

略して「プルリク」ともいわれる。プルをする前に、他人に見てもらうためにプルリクエストを送ることでコードに問題がないか、改善できるところはあるかといったレビューを行ってからプルを行うことができる。事前にミスを減らしたり、規則に合っているかといった最終チェックに使われる。

コミット(commit)

作業内容のセーブを行うことができる。セーブを行うと、以降変更した内容に不備があった場合にセーブ時のデータをロールバックしたりできる。
コミットを行う場合には、必ずコメントをつける必要があり、なるべく短い内容で伝わるようにコメントを書く。例えば、readme.mdを編集した場合にはコメントは、「Update readme.md」というようにする。

コンフリクト(conflict)

他の人が変更した内容と自分が変更した内容が重複していた場合に発生するエラー。どちらを優先して変更するかどうかを編集する必要がある。チーム開発を行っている際にはあるあるのエラー。
コミット・プルする前に最新版をpullしておくと比較的エラーの発生を抑えることができる。

チェックアウト(checkout)

作業ブランチを切り替える際に使う。mainブランチを編集したのちに、別のブランチを編集する場合はmainブランチをcheckoutしてから切り替える。

ステージ(stage)

指定したファイルを次回のコミットに含める。git addをすることで指定したファイルをステージ上に保持し、次回のコミット時に含めるように指示している。

その他

ここでは、頻繁に目にする・使用するものをまとめたが、他にも気になる場合は次の記事が参考になる。文字だけではわからないという方も図があるので比較的理解しやすいと思う。
https://qiita.com/shinshingodmt/items/637cf9e5c6660509c460

脚注
  1. Githubでは、昔まではメインのブランチをmasterとしていましたが、2021年以降メインブランチはmainになりました。 ↩︎

Cr1staCr1sta

実際にGitを使ってみる

Gitを使うには、Gitというソフトウェアをインストールする必要がある。
https://git-scm.com/downloads
から、インストールするデバイスのOS(Windows/Mac/Linux...)を選びインストーラをダウンロードする。今のデバイスはほとんどが64bitなので64bitのStandalone Installerを選ぶとよい。
インストール画面は次のように進めるとインストールされる。
https://qiita.com/T-H9703EnAc/items/4fbe6593d42f9a844b1c

Githubのアカウントを作る

Gitを入れたからと言って、完全に使えるわけではない。リモートリポジトリを今回は作るのでそのためのGithubというサービスに登録する。
https://github.com

Gitの設定を行う

git bashというアプリケーションを実行し、Githubに登録したメールアドレスとユーザー名を設定します。

ユーザー名の登録
git config --global user.name "User Name"
メールアドレスの登録
git config --global user.email "Email Address"
Cr1staCr1sta

リモートリポジトリを作成する

Githubで、リポジトリを作成する。

リポジトリ名は任意の名前を入れる。Public・Privateは公開設定で、Publicにすると誰でも見ることができ、Privateにすると自分自身しか見れないようになる。
リポジトリを作成すると、次の画面が表示され、Git経由でファイルをアップロードする方法が紹介されている。

エディタからコミット・プルする

VSCodeなどのエディタで、フォルダを作成し、適当にファイルを作成する。
フォルダ内で、git initというコマンドをターミナル上で実行すると、Gitのシステムがそのフォルダ内で初期化され、Gitのシステムを使用することができる。
この状態で、上の画像の下「…or push an existing repository from the command line」に書いてあるコマンドを一行ずつ実行すればいいのだが、実はこの方法では失敗する。

Error
error: src refspec main does not match any
error: failed to push some refs to 'https://github.com/Crysta1221/aqualium.git'

次のように置き換えて、上から一行ずつ実行することで正しくコミット・プルされる。

git remote add origin https://github.com/Crysta1221/empty.git
git branch -M main
git checkout -b main
git add .
git commit -m ':tada:First Commit'
git push -u origin main

追加したこととして、メインブランチに移動し、フォルダ内のファイルをすべてステージ、コミットをしてプッシュするということをしている。
これで、晴れてGithub上でアップロードしたファイルを確認することができる。

Cr1staCr1sta

Gitを極める

Gitに付随するコマンドにはここにはないものがまだまだある。
https://www.tohoho-web.com/ex/git.html
とほほ氏によるGit入門があるのでGitを極めたい方はぜひ読んでみてほしい。