pyてよn日記

一寸先は闇が人生

GitHub:新しいレポジトリを作るときの手順 - ssh接続の設定まで


概要

自分用メモ。新しいレポジトリを作成するときの流れを書いた。特に ssh 認証周りの設定を毎回調べるのが手間であるためそこをまとめた。まとめてて思ったのは、GitHub側でレポジトリ作ってgit cloneでやった方が普通に早いやん?ということ。随時加筆・修正していく。

情報が整理されている訳では無いのでご承知を。

環境

手順


1. GitHubの自分のアカウントページにて新しいレポジトリを作成

省略。

2. 公開鍵・秘密鍵の生成

  • 鍵の生成
    まず公開鍵・秘密鍵を生成する。KEYNAME は識別のため入力した方が良い。設定しないと元々存在するid_rsaが上書きされてしまうので要注意。id_rsa_hogeとするのが普通だろうか?
$ cd ~/.ssh  # 公開鍵を保存するディレクトリに移動
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa): [KEYNAME]
Enter passphrase (empty for no passphrase):[入力しなくても良い]
Enter same passphrase again:[入力しなくても良い]
# これにより.sshディレクトリに KEYNAME と KEYNAME.pub という鍵が生成する

$ pbcopy < ~/.ssh/[KEYNAME].pub  # クリップボードに公開鍵をコピー
# $ pbcopy < ~/.ssh/id_rsa_hoge.pub  # KEYNAMEをid_rsa_hogeとした場合

3. 作成したレポジトリに公開鍵を登録

レポジトリページ > Settings > Deploy keys
公開鍵を指定欄にペーストして、公開鍵の登録を済ます。

4. configの編集

ssh 接続の設定ファイル~/.ssh/configを編集する。これは ssh 接続するときにどの秘密鍵を使うのかを設定するファイルである。角括弧[]内の HostName は自由で良い。Identityfile にはそのレポジトリに ssh 接続するときに使う秘密鍵のパスを指定。id_rsa_hogeと言う名前で作った場合下記のように記述する。

Host [HostName]
  HostName github.com
  User git
  Identityfile ~/.ssh/id_rsa_hoge

5. ssh接続の確認

ssh接続ができるか確認を行う。configファイルに記述したHostNameを使う。

$ ssh -T [HostName]
Hi ACCOUNT_NAME/REPOSITORY_NAME! You've successfully authenticated, but GitHub does not provide shell access.

接続の設定がうまくいくと、上記のようにHi~~から始まる文が出力される。

6. リモートレポジトリの登録

ローカルレポジトリとリモートレポジトリを対応させる。

$ git remote add origin HostName:ACCOUNT_NAME/REPOSITORY_NAME.git
  • リモートレポジトリの設定を変更する場合?(FIX ME)
    config で設定している場合?
$ git remote set-url origin HostName:ACCOUNT_NAME/REPOSITORY_NAME.git

7. リモートレポジトリの情報を取得(fetch)

$ git fetch

fetchに関しては下記を参考。

8. ローカルディレクトリに取得した更新を反映

$ git merge origin/master

originというレポジトリのmasterブランチに、fetch で取得した情報を統合 (merge) する。

9. ファイル更新後、commit&push

$ git status  # 更新情報の確認
$ git add .
$ git commit -m “commit message”
$ git push origin master(branch name) 

originというリモートリポジトリのmasterというブランチにプッシュするという意味。

その他のtips


commiterの変更

git config ―global user.name [ACCOUNT_NAME]
git config ―global user.email [e-mail@address]
git config —global —list  # 変更内容の確認

初回push時のエラー処理

README.mdファイルをレポジトリ作成時に作っていると食い違い?が起きてエラーが発生する?

エラー処理1:error: failed to push some refs to 'KEYNAME:ACCOUNT_NAME/REPOSITORY.git'

エラーメッセージ

 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'github_essence:nukopy/Essence_of_ML.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

自分がリモートの変更をpullしてから、pushするまでの間に、他からのpushがあるなどしてリモートが変更されている状況。エラーメッセージが教えてくれているように、あなたのブランチの先端はリモートのより後ろになっている。リモートの変更をマージしてから、改めてpushする。

エラー処理2: fatal: refusing to merge unrelated histories

初回git merge origin/masterでエラー。
さらにググってみたらmergeのオプションに「--allow-unrelated-histories」をつければOKと書いてあったので試してみる → merge OK!

git fetch
git merge —allow-unrelated-histories origin/master

git addの取り消し

git resetgit addを取り消す。addを取り消すというかステージングにあがっているものを取り消すといったほうが良いか。

  • addしたファイルを取り消す
$ git reset HEAD [ファイルパス]
  • addをまるっと取り消す
    HEADは省略可能。全部取り消して良いならgit resetで。
$ git reset HEAD
# git reset で可

ポイント
当然だが、ステージング情報の取り消しのため、 ファイルの変更内容そのものは残る。 ブランチ そのものが変更されるためファイルの状態も前回のcommit時に戻る??情報が正確で無いのでgit reset する場合は注意する。吹っ飛ぶ可能がある。

下記を参考。

git pushの取り消し

手順としては、logの確認(commit ハッシュの確認)、commit の取り消し、再 push という流れ。

commit ログを確認

$ git branch  # branchの確認
$ git log --oneline  # commit のログ

commit の取り消し&再 push

revertで取り消してリモートに push。
revertだと commit を取り消した履歴が残る。

$ git revert [コミットハッシュ]
# ファイル編集
$ git add .
$ git commit -m 'modified commit'
$ git push

下記を参考。

参考