GitHub:新しいレポジトリを作るときの手順 - ssh接続の設定まで
概要
自分用メモ。新しいレポジトリを作成するときの流れを書いた。特に ssh 認証周りの設定を毎回調べるのが手間であるためそこをまとめた。まとめてて思ったのは、GitHub側でレポジトリ作ってgit clone
でやった方が普通に早いやん?ということ。随時加筆・修正していく。
情報が整理されている訳では無いのでご承知を。
環境
- macOS Mojave 10.14.1
手順
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) する。
- masterとorigin/masterは違う(?)
- すぐ分かる! git の origin と master ってなんだ? - Qiita
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 reset
でgit 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
下記を参考。