今頃になってお恥ずかしい話ですが、GitHubを使おうとして悪戦苦闘していました。初めてローカルで作成したリポジトリをリモートリポジトリ(サーバー側ですね)にPushする方法です。
(「おいおいおい!!木澤君わかってないぞ」という突込みは大歓迎ということで)
GitHubに登録というのはVisual Studioから何となくなっていたのですが、コマンドラインで打ち込んでやったことはないのでやってみました。
Gitのインストール
まずは、WindowsでもMacでもgitをインストールしました。Windows版は下記からインストールしました。
GitHubに新しいリポジトリを追加する
- github.comで”New repository”ボタンをクリックする。
- Repository nameに名前を付ける。(ここではEdgeExtGoogleSearch)
- Descriptionに適当にメモを書く。
- Publicを選択(Privateは有料で使用可)
- Initialize this repository with a READMEはとりあえずチェックを入れる。
↑実はこれが(このケースにおいては)よくなかった。(^_^;)詳しくは文末に書きます。 - [Create repository]ボタンをクリックする。
- URLの取得
作成したリポジトリのリンクをクリックして”Clone or download”をクリック
Clone with HTTPSを選択 https:から始まるURLをコピーしておくここからコマンドラインでローカルディスクに作成したファイルをサーバー(リモートリポジトリにアップする)
失敗例
ここからコマンドラインでgitのコマンドを打ち込んでリモートリポジトリにPushするのですが、Pushの段階で失敗してしまいました。たいていのGit入門的な記事では問題なくできているのですが、うまくいきませんでしたので失敗例と成功例を書きます。
- コマンドプロンプトを開き、登録したいソースコードがあるフォルダに移動する。
- 初期化
git init - ソースを追加
git add .
これでフォルダ配下のファイルは全て追加対象となります。 - ローカルリポジトリにコミット
git commit -m “新規追加”
何かコメントを書きます。 - リモートリポジトリの登録
git remote add origin https://github.com/tkizawa/EdgeExtGoogleSerch.git
(https:からの内容は上記7でコピーしたURL)
ここでURLがoriginという名前に登録される。エイリアス的なものと考えてください。 - git push origin master
デフォルトのブランチ(master)にアップする。
※ ここで問題
rejectedなんとかというエラーメッセージが出ます。
私の解釈ですが、すでに作成済みのリポジトリがありpull(ダウンロード)していないにも関わらず、ローカル側の内容をpush(アップロード)しようとしたということになります。でも、いろいろとサイトを見るとこの方法が多く書かれています。
ではでは、理屈からすると一旦、サーバ(リモートリポジトリ)の内容をpull(ダウンロード)してしまえばつじつまが合うのではないかと。
ということで下記の操作を行いました。
成功例
最初から書きます。
- コマンドプロンプトを開き、登録したいソースコードがあるフォルダに移動する。
- 初期化
git init - すでにリモートリポジトリに初期登録している内容をPullします。(ここがポイント)
git pull https://github.com/tkizawa/EdgeExtGoogleSerch.git - リモートリポジトリの登録
git remote add origin https://github.com/tkizawa/EdgeExtGoogleSerch.git - git push origin master
空の内容をデフォルトのブランチ(master)にアップする。 - ソースを追加
git add . - ローカルリポジトリにコミット
git commit -m “新規追加” - git push origin master
デフォルトのブランチ(master)にアップする。
空の内容をpushする必要はないかもしれませんが、これでうまくいきました。GitHubのサイトを見に行っても更新できています。
追記:本当に失敗したこと
GitHubで新規リポジトリを作成した際に下記の操作をしていました。
Initialize this repository with a READMEはとりあえずチェックを入れる。
ここでリポジトリの初期化をした上にローカルでもgit initを実行していました。上記操作はgit initに相当するとのことでローカルでgit initしているので不要でした。(教えていただきました。ありがとうございました。)既にリモートリポジトリで更新処理がされているのに、それを反映せずローカルのリポジトリをリモート側にPushしたためエラーとなったと考えています。
よって、上記の”Initialize…”のチェックを入れなければ失敗例と書いたとおりにやってもエラーとなりません。確認済みです。