GitHubでレポジトリを作成すると、自分のローカルでコピペする用のコードが表示されます。
コピペすれば一瞬で済んでしまいますが、これらのコードの中にはgithubを理解するには欠かせない重要なコードがたくさん含まれています。
今後のgit操作でも頻出するコードが多いです。
ここでは、GitHubでレポジトリ作成時に表示される各コードについて解説しています。
4つのセクション
Githubでレポジトリを作成したときは以下のような画面が表示されます。
大きく4つのセクションに分かれています。
- Quick setup — if you’ve done this kind of thing before
- …or create a new repository on the command line
- …or push an existing repository from the command line
- …or import code from another repository
それぞれの内容は以下のようになっています。
セクション | 内容 |
---|---|
Quick setup | Github Desktopに自動でレポジトリを作成する。あるいは、レポジトリのURLを使って自分でローカルのgitにremoteの情報を追加・変更する場合に使用します。 |
create a new repository | ローカル環境に新たにgitのレポジトリを作成する場合に使用するコマンドです。 |
push an existing repository | ローカルに既にgitを含むプロジェクトが存在する場合に、このレポジトリを追加して強制的にmainブランチ(あるいはmaster)を作成してプッシュします。 |
import code | Git以外のバージョン管理システム(Subversion, Mercurial, TTSなど)を使っている場合に、コードをインポートするときに使います。 |
いずれも新たに作成したGithub上のレポジトリにコードをpushするための処理です。
基本的には、1つ目の「Quick setup」と2つ目の「create a new repository」のどちらかを使います。
3と4はあまり使う機会はないかと思います。
以下で各セクション毎の詳細をまとめています。
Quick setup
Quick setupとは何か?
Quick setup(クイックセットアップ)は、レポジトリのURLが表示されます。
ある程度gitを使い慣れている人など、自分でリモートレポジトリ(Github上のレポジトリ)の情報を管理できる人はここを使います。
なお、Quick setupの後ろの、if you’ve done this kind of thing beforeはgitやgithubのレポジトリの設定をやったことあるなら、これ使ってねという意味です。
表示される選択肢は「set up in Desktop」と「URL(またはSSH)」の2種類です。
Set up in Desktopとは何か?
GithubはWEBブラウザからアクセスする意外に、デスクトップ版のアプリを使う方法があります。
デスクトップ版のGithubが既にPCにインストール済みの場合は「Set up in Desktop」をクリックします。
なおデスクトップ版のGithubのことを、Github Desktopと呼びます。
Github Desktopのインストール先
以下のようにダウンロードボタンが表示されます。
HTTPSとSSHとは何か?
「Set up in Desktop」の横には、他の選択肢として「HTTPS」「SSH」というタブが表示されています。
HTTPSはhttps://~といった通常のURLです。
SSHはHTTPSよりもセキュリティの高いアクセス方法で、タブをクリックするとSSH専用のパスが表示されます。
既にローカルレポジトリが存在する場合に、これらのURLをpush先のリモートブランチとして登録するときに使います。
接続方法 | パスの例 |
---|---|
HTTPS | https://github.com/xxxxx/レポジトリ名.git |
SSH | git@github.com:xxxxx/レポジトリ名.git |
SSHとは何か?
SSHは秘密鍵と公開鍵を使って通信をする方法です。SSHとはSecure Shell(セキュア シェル)の略です。
企業などのプロジェクトの場合SSHでアクセスするのが一般的です。
SSHを使うには、ローカルで秘密鍵&公開鍵を作成する必要があります。
公開鍵のコードをgithubに登録することで使用が可能になります。githubへの公開鍵登録は、settings > SSH and GPG keys > New SSH keyの流れで登録可能です。
create a new repository on the command line
2つ目のセクションは「create a new repository on the command line」です。
「コマンドライン(黒画面)を使って新たなレポジトリを作成する」という意味です。
各コードを実行する前(コマンドをコピペする前)に、ローカル環境でプロジェクトがあるディレクトリに移動しておく必要があります。
以下で各コードの内容について解説しています。
echo “# test” >> README.md
echo “# test” >> README.mdは、READMEファイルを作成するコマンドです。
echo "# test" >> README.md
この処理で、今いるディレクトリにREADME.mdファイルを作成し、中身に「# test」を書き込んでいます。
「>>」はリダイレクト(追記)を指示する記号で、指定したファイルに内容を出力する指示です。指定したファイルがない場合はファイルを新規作成します。
README.mdの拡張子「.md」はマークダウン形式のファイルであることを表しています。
マークダウンはHTMLをより簡単に記述する書き方です。例えばh1タグで囲む場合、冒頭に「#」を記述するだけでh1タグになります。
git init
2行目のgit init
は自分のPCにローカルレポジトリを作成するためのコマンドです。
gitが存在していないプロジェクトで、gitを使用するために使用します。initはinitializeの略で初期化という意味です。
git init
コード実行例
コードを実行すると以下のように表示されます。
$ git init
Initialized empty Git repository in 現在のディレクトリパス/.git/
現在のディレクトリ配下に「.git」という隠しディレクトリを作成し、空のGitレポジトリーを初期化しましたという内容です。
フォルダ名の前の「.(ドット)」は隠しフォルダであることを表しています。
中にはフォルダやファイルなど、gitを使うために必要なもの一式が入っています。
ここら辺のファイルを直接いじることはあまりありません。変更が発生しやすい処理はコマンドが用意されています。
.gitというフォルダが作成され、その中にGitの関連ファイルが入っていることを認識してれば問題ありません。
git add README.md
3行目のgit add README.md
は、1行目のecho "# test" >> README.md
で作成したreadmeファイルをステージに追加する処理です。
git add とは何か?
Gitの中でも最もよく使うコードの一つgit add
が使われています。
git add パス
Gitではコードやファイルに作成や変更があった場合に、いきなりローカルレポジトリに反映させず、まずはステージング(またはインデックス)という状態を挟みます。
本番前といったニュアンスで、ステージングの段階ではまだコードの変更履歴には何も追加されません。
リモートレポジトリ(Github)
↑ push
ローカルレポジトリ
↑ commit
ステージ(インデックス)
↑ add ← ココ
作業中のディレクトリ
git addすると指定したファイルやディレクトリがステージに追加されます。ステージに追加することを動名詞でステージングと呼びます。
git commit -m “first commit”
4行名はgit commit -m "first commit"
です。git commit
もGitの中でも最もよく使うコードの一つです。
git commitはステージにあるコードをレポジトリに反映する処理です。この処理にGitのコード履歴に変更内容が反映されます。
リモートレポジトリ(Github)
↑ push
ローカルレポジトリ
↑ commit ← ココ
ステージ(インデックス)
↑ add
作業中のディレクトリ
git commitの「-m」オプションも非常によく使います。これは「message」の略で、 コードの変更履歴にメッセージをつけます。
コミットに対するメッセージなので、コミットメッセージと呼びます。
ここでは、3行目の処理 git add README.md
でステージングした変更内容(README.mdの新規追加)をGitのコード履歴に反映しています。
その際、コミットメッセージを「first commit」としています。
first commitは、慣習的に第1回目のコミットで使われるメッセージです。ここは空欄でなければfirst commit以外でも問題ありません。(誰が見ても作業内容がわかる端的なメッセージをつけるのが一般的です)
なお、メッセージが空だと「Aborting commit due to empty commit message.」というエラーが発生し、コミットできません。
コード実行例
$ git commit -m "first commit"
[master (root-commit) dc53f35] first commit
1 file changed, 1 insertion(+)
create mode 100644 README.md
git branch -M main
5行目はgit branch -M main
です。これは、作業中のブランチの名前をmainに強制変更するコマンドです。
git branchはブランチに関するコマンドで、オプションによってブランチの作成、移動、名前変更などができます。
「-M」オプションは、強制的にブランチ名を変更するというオプションです。
git branch -M <ブランチ名>
コード実行例
$ git branch -M main
コードを実行しただけでは何も表示されません。現在のブランチ名を確かめるには、git branch
コマンドを実行します。
$ git branch
* main
ブランチ名が「main」になっていることがわかります。
なお、「*」は現在のブランチを表しています。
git remote add origin https://github.com/~/レポジトリ名.git
6行目のコマンドは git remote add origin https://github.com/~/レポジトリ名.git
です。
これまでの作業はすべて自分が作業しているローカルレポジトリで行ったものです。まだ他のユーザーたちと共有できるGithub上のレポジトリ(リモートレポジトリ)には何も変更を加えていません。
リモートレポジトリにGitのコード履歴をプッシュするためには、まずリモートレポジトリをローカル環境に登録する必要があります。
それが、git remote addの処理です。
git remote add <任意のリモートレポジトリ名> <リモートレポジトリのURL>
リモートレポジトリのURLを毎回指定してプッシュするのは大変なので、リモートレポジトリ名いわゆる、ニックネームをつけます。
慣習的に「origin」が使われるのが一般的ですが、origin以外でもなんでもかまいません。名前を変えれば、push先のリモートレポジトリを複数設定することもできます。
詳細については 【Git】リモートレポジトリ(origin)を変更・削除・上書き・追加する方法 をご参考ください。
コード実行例
$ git remote add origin https://github.com/~/レポジトリ名.git
コードを実行しただけでは何も表示されていません。リモートレポジトリが登録されているかを確認するには、git remote -v
コマンドを実行します。
$ git remote -v
origin https://github.com/〜/レポジトリ名.git (fetch)
origin https://github.com/〜/レポジトリ名.git (push)
originというリモートレポジトリ名で指定したURLが登録されていることがわかります。
git push -u origin main
最後の7行目はgit push -u origin main
です。ローカルレポジトリのGitのコード履歴をリモートレポジトリ(Github)にプッシュする処理です。
リモートレポジトリ(Github)
↑ push ← ココ
ローカルレポジトリ
↑ commit
ステージ(インデックス)
↑ add
作業中のディレクトリ
git pushも最も頻繁に使用するコードの一つです。git pushは以下のように使います。
git push [オプション] <リモートレポジトリ名> <ブランチ名>
git push -u origin main
は、6行目で登録したリモートレポジトリにmainブランチの内容をプッシュするという処理です。
ブランチ名の省略
git push origin main
という記述はよく使いますが、一つ知っておくべき重要なことがあります。それはブランチ名が省略されているということです。
git pushは本来次のように使います。
$ git push <リモートレポジトリ名> <ローカルブランチ名>:<プッシュ先のリモートレポジトリ名>
ブランチ名はローカルレポジトリのブランチ名と、push先のリモートレポジトリ名を記述します。
ローカルレポジトリのブランチ名と、push先のリモートレポジトリ名が同じ場合に、「:リモートレポジトリ名」の記述を省略することができます。
git push origin main
↓↑ 同じ
git push origin main:main
仮に、ローカルレポジトリのmainブランチの内容を、リモートレポジトリのtestブランチに送りたい場合は以下のように記述します。
git push origin master:test
「-u」オプションと上流ブランチ
「-u」は、指定したリモートレポジトリのブランチを上流ブランチ(upstream)として設定するオプションです。
上流ブランチとして設定すると、git push するときにリモートレポジトリ名とブランチ名を省略できます。
すなわちgit push
だけでプッシュできるということです。
上流ブランチがある場合とない場合のpushの違い
上流ブランチを指定していない場合はpushは以下のようになります。
git push <リモートレポジトリ名> <ブランチ名>
↓ 上流ブランチが設定してある場合
git push
上流ブランチの確認方法
上流ブランチが設定してあるかどうかはgit remote -vv
コマンドを実行することで確認できます。
#上流ブランチがない場合
$ git branch -vv
* main dc53f35 first commit
#上流ブランチある場合
$ git branch -vv
* main dc53f35 [origin/main] first commit
上流ブランチがある場合は、[リモートレポジトリ名/リモートレポジトリのブランチ名] が表示されます。
よって、このローカルレポジトリのmainブランチでgit push
を実行すると、リモートレポジトリ名originのmainブランチにpushを行います。
なお、ブランチ名の横の 数値(例 dc54f35)は最新のコミット番号、末尾の「first commit」はコミットメッセージです。
–set-upstream
なお「-u」オプションは「--set-upstream
」オプションの省略形です。
オプションの前にハイフンが2つ「--
」つくものをロングオプションと呼びます。冗長な書き方でオプションの実行内容が記載されている場合がほとんどです。
オプションの前にハイフンが1つ「-」つくものをショートオプションと呼びます。ハイフンの後にアルファベット1文字が続く、省略形の記述方法です。
git push -u origin main
↓↑ 同じ
git push --set-upstream origin main
同じ処理でも人によってショートオプションとロングオプションのどちらを使うかが分かれたりしますが、驚く必要はありません。
コード実行例
「-u」つきのgit pushを実行すると以下のようになります。
$ git push -u origin main
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 228 bytes | 228.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/〜/レポジトリ名.git
* [new branch] main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
・*[new branch] main -> main
ローカルブランチmainのデータを、リモートブランチmainにプッシュしていることを示しています。
その際、リモートブランチに新たにブランチを作成してことを明示しています。
・Branch 'main' set up to track remote branch 'main' from 'origin'.
ローカルレポジトリのmainブランチに、リモートレポジトリ名originのmainブランチを上流ブランチとしてセットしたことを示してます。
push an existing repository from the command line
3つ目のセクションは「push an existing repository from the command line」です。
既にGit管理されたローカルレポジトリがある場合に、コマンドライン経由でリモートレポジトリ(Github)にプッシュします。
処理内容は2つ目のセクションの5~7行目と同じです。
import code from another repository
4つ目のセクションは「import code from another repository」です。
他のレポジトリのコードをインポートするという意味です。
これは、Git以外のコードのバージョン管理システムを使った既存プロジェクトのレポジトリをプッシュする場合に使用します。
Githubはバージョン管理システムとしてGitを使っていますが、実は世の中にはGit以外にもバージョン管理システムがあります。
主要なところでは、Subversion, Mercurial, TFSがあります。
GithubではこれらのGit以外のバージョン管理システムを使ったレポジトリをインポートすることができます。
なお、インポートするプロジェクトはURLで指定します。
上記のURL入力窓に移管元のレポジトリのURLを入れると、そのレポジトリの内容がGithubにインポートされます。