LoginSignup
1
0

More than 3 years have passed since last update.

リモートリポジトリへプッシュする時に詰まった話

Posted at

はじめに

今回はLaravelの新規プロジェクトをGitで管理するのを目的としています。
リモートリポジトリにプッシュする際に詰まった時の話をまとめます。

環境

ProductName:    Mac OS X
ProductVersion: 10.14.6
BuildVersion:   18G2022

ホスティングサービス: GitHub
通信プロトコル: SSH通信

目次

  1. ローカルリポジトリを作成
  2. ステージエリアにファイルaddする
  3. コミットする
  4. リモートリポジトリを登録する
  5. Gitの設定をする
  6. 秘密鍵公開鍵を作成し、GitHubへ登録する。
  7. プッシュする

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_rsaid_rsa.pubがそれぞれ秘密鍵公開鍵である。
両者が作成されたディレクトリに移動する。

$cd ~/.ssh 
$ls
authorized_keys id_rsa      known_hosts
config      id_rsa.pub

見つけた。ここで公開鍵の中身をコピーする

$pbcopy < id_rsa.pub

・GitHubのSettingsSSH 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-2lsコマンドで出てきた一覧に
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ファイルが明示的に追加で設定するファイルだからだと思います。

スクリーンショット 2020-01-22 0.13.26.png

GitHubを確認するとプッシュできていました。fa6f554が実行結果の方にも書かれているのが確認できました。

さいごに

commitが3日前になっていることもわかりますが、問題の解決・記事の作成に3日かかってしまいましたが、SSH通信での秘密鍵公開鍵の仕組みを学ぶ良い機会になりました。まだまだ学ぶことが多いですが、今回はこれで。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0