はじめに
今回はLaravelの新規プロジェクトをGitで管理するのを目的としています。
リモートリポジトリにプッシュする際に詰まった時の話をまとめます。
環境
ProductName: Mac OS X
ProductVersion: 10.14.6
BuildVersion: 18G2022
ホスティングサービス: GitHub
通信プロトコル: SSH通信
目次
-
ローカルリポジトリ
を作成 -
ステージエリアにファイル
をadd
する -
コミット
する -
リモートリポジトリ
を登録する -
Git
の設定をする -
秘密鍵
と公開鍵
を作成し、GitHub
へ登録する。 -
プッシュ
する
1.ローカルリポジトリを作成
Laravelのルートディレクトリに移動し、次のように実行します。
#イニシャライズ(ここをローカルリポジトリとします)
$git init
#実行結果
Initialized empty Git repository in ルートディレクトリのパス/.git/
#状態を確認
$git status
#実行結果(箇条書きで書かれているものがルートディレクトリにあるファイルとフォルダです。)
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.editorconfig
.env.example
.gitattributes
〜
(略)
〜
storage/
tests/
webpack.mix.js
ログの説明
・On branch master
作業ブランチがmasterであると書かれています。
・No commits yet
コミットがまだないと書かれています。
・Untracked files:
(use "git add <file>..." to include in what will be committed)
未追跡ファイルが先ほどの箇条書きで書かれていたものがステージエリアに追加されていないと書かれています。git add <file>
使って変更部分(新規追加)をadd
しましょう
2.ステージエリアにファイルをaddする
1.git add <file>
を実行します。
#-Aオプションをつけることによって変更があった全てのファイルがaddされます。
$git add -A
#状態を確認
$git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: .editorconfig
new file: .env.example
new file: .gitattributes
new file: .gitignore
〜
(略)
〜
new file: tests/TestCase.php
new file: tests/Unit/ExampleTest.php
new file: webpack.mix.js
・(use "git rm --cached <file>..." to unstage)
ステージエリアから外したい場合はgit rm --cached <file>
を使用してくださいと書かれています。
3.コミットする
git commit
を-m
オプションを使用して実行します。
#addされたものをコミットします。-mオプションをつけ、「"」で囲むことでコメントを残せます。
$git commit -m "create new project"
#実行結果
[master (root-commit) 71a1d0a] create new project
87 files changed, 8435 insertions(+)
create mode 100644 .editorconfig
create mode 100644 .env.example
create mode 100644 .gitattributes
〜
(略)
〜
create mode 100644 tests/Feature/ExampleTest.php
create mode 100644 tests/TestCase.php
create mode 100644 tests/Unit/ExampleTest.php
create mode 100644 webpack.mix.js
4.リモートリポジトリを登録する
git remote add
を実行し、リモートリポジトリを登録する。
#originの後の文字列は使用するリモートリポジトリにある「Clone or download」で入手。
$git remote add origin git@github.com:GitHubのユーザー名/リモートリポジトリ名.git
5.Gitの設定をする。
git config
を使用し、Gitの設定を行う。
$git config -global user.name "GitHubのユーザー名"
$git config -global user.email "メールアドレス"
6.秘密鍵と公開鍵を作成し、GitHubへ登録する。
6-1ssh-keygen
で秘密鍵
と公開鍵
を作成する。
# -t で鍵の暗号化形式を指定。 -b でbit数を指定。2048以上がいいみたいです。
# -C でコメントを指定できる。
$ssh-keygen -t rsa -b 4096 -C "メールアドレス"
#実行結果
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/ユーザー名/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/[ユーザー名]/.ssh/id_rsa.
Your public key has been saved in /Users/[ユーザー名]/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:==========[作成されたキー]========== [メールアドレス]
The key's randomart image is:
+---[RSA 4096]----+
| ~~======|
| ================|
| ========|
| =======|
| =======|
| ================|
| ========|
| =======|
| =======|
+----[SHA256]-----+
・Enter file in which to save the key (/Users/ユーザー名/.ssh/id_rsa):
この()内のディレクトリにキーを作成するという確認。(Enterを入力)
・Enter passphrase (empty for no passphrase):
パスワードを入力。
・Enter same passphrase again:
もう一度同じパスワードを入力。
6-2 作成した公開鍵
をGitHubに登録する。
id_rsa
とid_rsa.pub
がそれぞれ秘密鍵
と公開鍵
である。
両者が作成されたディレクトリに移動する。
$cd ~/.ssh
$ls
authorized_keys id_rsa known_hosts
config id_rsa.pub
見つけた。ここで公開鍵
の中身をコピーする
$pbcopy < id_rsa.pub
・GitHubのSettings
でSSH and GPG keys
タブに移動、
・New SSH key
をクリックする。Title
を任意でつけ、Key
にコピーしたものを貼り付ける。
・Add SSH key
をクリック。これで公開鍵
は登録完了です。
7.プッシュする
7-1git push origin master
を実行する。
ここでやっと本題に入ります。
#originはリモートリポジトリ、 masterはoriginのどこのブランチへプッシュするかを指定。
$git push origin master
#実行結果
何も反応しない。6-2
のls
コマンドで出てきた一覧に
known_hosts
,authorized_keys
,config
ファイルがあったと思います。
ここでは書いていませんでしたが、色々調べながらこれらのファイルも調べながら色々触っていました。
ここでそれぞれのファイルの役割について簡単に書いていきます。
・known_hosts
一度接続したことがあるサーバーを記録しているファイル
・authorized_keys
接続を許可する公開鍵を登録しておくサーバー側のファイル
・config
SSH接続の情報を書くファイル
調べると、configファイルの指定方法は下記のようになっているようです。
他にも設定できる項目はあります。
Host GitHub //Host名
HostName github.com //接続先のIPアドレス
IdentityFile ~/.ssh/id_rsa //秘密鍵のファイルパス
User git //SSH接続するユーザー名
IdentityFile
のファイルパスが間違っていた為、うまく接続できませんでした。config
ファイルを削除し、ローカルリポジトリへ戻り、git push origin master
を実行しました。
$git push origin master
#実行結果
Enter passphrase for key '/Users/[ユーザー名]/.ssh/id_rsa':
Enumerating objects: 117, done.
Counting objects: 100% (117/117), done.
Delta compression using up to 4 threads
Compressing objects: 100% (97/97), done.
Writing objects: 100% (115/115), 59.17 KiB | 1.23 MiB/s, done.
Total 115 (delta 12), reused 0 (delta 0)
remote: Resolving deltas: 100% (12/12), done.
To github.com:[GitHubユーザー名]/[ローカルディレクトリ名].git
54d630d..fa6f554 master -> master
成功しました。config
ファイルを削除したのに、プッシュが成功したのはconfigファイルが明示的に追加で設定するファイルだからだと思います。
GitHubを確認するとプッシュできていました。fa6f554
が実行結果の方にも書かれているのが確認できました。
さいごに
commit
が3日前になっていることもわかりますが、問題の解決・記事の作成に3日かかってしまいましたが、SSH通信での秘密鍵
・公開鍵
の仕組みを学ぶ良い機会になりました。まだまだ学ぶことが多いですが、今回はこれで。