ゆるおたノート

Tomorrow is another day.

【Git勉強中】リポジトリの作成と接続

たぶん、手順的にはリモートリポジトリを先に作る方が楽で簡単だと思います。
思うんですが、なぜかローカルで作業始めちゃってから気付くんです…

はじめに

基本の流れ

Git自体はじめての方は、まずはこちらからどうぞ。

【Git勉強中】操作に慣れてきたので、流れを整理してみました。 - ゆるおたノート

凡例

記号・用語 意味 説明
$ コマンドライン」で使えるコマンド 通常、Gitを始めとする「シェルスクリプト」系の説明では、コマンドの文頭に$をつけて表現されることが多いようです。
当記事でもそれに倣って記載しています。

実際にコマンドを入力するときは、git~以下をコピペしてください。
# コメント 補足事項など。
(対話モードでは使えません、、、)
<> 編集点(という表現で良いのかな…?) 任意の値(名前、識別子など)を入力してください。
(コミットの)識別子 コミットごとに付与される半角英数字7桁の番号。 SHA-1というハッシュ値だそうです。
当記事では<コミット>と表記します。
ディレクト ファイルの入れ物、つまりフォルダのこと。 当記事では、(特に言及がない限りは)絶対パス相対パスどちらの指定でも可です。

▼選択してください

リポジトリを…

ローカルリポジトリを作成し、リモートリポジトリに接続する場合

【1】任意のディレクトリに移動

cdchange directoryの略ですね。

$ cd <任意のディレクトリ>

【2】ローカルリポジトリの作成

Initialize(初期化)して、現在のディレクトリでGit管理を始めます。

$ git init

.gitというディレクトリが作成されますが、名前が.始まりなので自動的に隠しファイル扱いになります。
つまり最初は「見えない」ので、「え!どこ行った!?」と混乱すると思います。笑

Gitに慣れてきたら、その中にあるCONFIGファイル等の設定データを触る必要も出てきます。
必要に応じて、WindowsエクスプローラーやmacOSのFinderで隠しファイルを表示するように設定しておくことをオススメします。

【3】ローカルリポジトリで1度コミットしておく

後ほどリモートリポジトリにプッシュしますが、その時にコミット履歴無しのままだとエラーが出て怒られます。

error: src refspec master does not match any
error: failed to push some refs to '<リモートリポジトリ>'

そこで、プッシュの前に1度ステージングからコミットまでを行っておきます。
詳しくは下記記事をご参照ください。

【Git勉強中】ステージに上げたり下げたり。 - ゆるおたノート 【Git勉強中】ステージした変更を記録する - ゆるおたノート

【4】リモートリポジトリを作成する

通常はGitHub(もしくはBitBucket)が選択肢になるかと思います。
リポジトリの作成手順は、使用するサービスによって異なるため割愛します。

GitHubの場合は、アカウント作成後にメアドの設定もしておくことをオススメします!
(詳しい手順は下記のサイトが参考になるかと思います。) GitHub でダミーのメールアドレスを使用する - Qiita

【5】ローカルリポジトリリモートリポジトリに紐付ける

HTTPS接続の場合

リポジトリのURLを指定して呼び出します。

git remote add origin <リモートリポジトリのHTTPS接続用アドレス>

GitHubの場合、アドレスは下記のような文字列です。

https://github.com/ユーザー名/リモートのリポジトリ名.git

SSH接続の場合

初期設定がちょっとめんどくさいけど、HTTPS接続よりちょっと安全(のはず)です。

(1) 端末でSSHキーを作成し、リモートリポジトリのアカウントに登録する

GitHub向けの記事ですが、SSHキーの作成についてはこちらが参考になると思います。 GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita

秘密鍵は、心情的に別の場所に保存したいところなのですが、移動しない方が良いみたいですね…?
参考:[SSH]秘密鍵の保存場所はどこがいいのか? | 東京伊勢海老通信
<2020/10/10追記>
その後、こちらのページはアクセスできなくなったようです…

(2) ローカルリポジトリをリモートリポジトリに紐付ける
$ git remote add origin <リモートリポジトリのSSH接続用アドレス>

GitHubの場合、アドレスは下記の文字列です。

git@github.com:ユーザー名/リモートのリポジトリ名.git

【6】リモートリポジトリにプッシュする

そのままプッシュすると、リモート側のデータとコンフリクトしてしまいます。
初めてのプッシュのはずなのでちょっと腑に落ちないのですが…)
<2019/12/20 追記>
README.mdなど「何かしらのファイル」がリモートリポジトリにある場合に、ローカルリポジトリとの差分が発生してしまうようです。

<2019/07/03 追記>
エラーメッセージを追加しました。

# 入力
$ git push origin master
 
#エラーメッセージ
To github.com:xxxxxxxx.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:xxxxxxxx.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.

「git@github.com:xxxxxxxx.git」へのプッシュは失敗しました。
ローカル端末に無い変更履歴がリモート側に保存されているため、更新が拒否されました。
~以下略~

そうならないためには、(あくまで最終手段として)-fオプションをつけてローカル側の内容で強制的に上書きします。

$ git push -f origin master

-fオプションについては、詳しくは過去記事をご参照ください。

【7】完了。

あとは、コミットとプッシュ・プルの繰り返し。

関連記事は、こちら

リモートリポジトリを作成し、ローカルにクローンのリポジトリを作成する場合

【1】リモートリポジトリを作成する

使用するサービスによって手順が異なるため、(略)。

メールアドレスの登録については、前述のリンク先を参照してください。

【2】(SSH接続の場合は)端末でSSHキーを作成し、リモートリポジトリのアカウントに登録する

詳しくはこちら

【3】ローカルで任意のディレクトリに移動

$ cd <任意のディレクトリ>

【4】リモートリポジトリのクローンをローカルに作成する

アドレスはHTTPS用、SSH用、どちらでも可能です。

$ git clone <リモートリポジトリのアドレス>

cloneで以下4つのコマンドを兼ねます。

  • init(≒ローカルリポジトリの初期化)
  • pull(≒リモートリポジトリからダウンロード)
    • fetch(≒リモートと同期)
    • merge(≒ローカル内での同期)

【5】完了。

あとは、コミットとプッシュ・プルの繰り返し。

このシリーズについて

Gitのコマンドについて、勉強しつつ記事にまとめています。

誤り、分かりづらい等ありましたら、ぜひコメント欄Twitterお問い合わせフォーム等でご教示ください!

連載目次

  1. 【Git勉強中】操作に慣れてきたので、流れを整理してみました。 - ゆるおたノート
  2. 【Git勉強中】ブランチの移動を使い分けたい - ゆるおたノート
  3. 【Git勉強中】ステージに上げたり下げたり。 - ゆるおたノート
  4. 【Git勉強中】ステージした変更を記録する - ゆるおたノート
  5. 【Git勉強中】あっ!そのコミット訂正させてください! - ゆるおたノート
  6. 【Git勉強中】自分のコミット履歴を提出する - ゆるおたノート
  7. 当記事【Git勉強中】リポジトリの作成と接続 - ゆるおたノート

参照

Gitでローカルリポジトリを作成して、後にリモートリポジトリへ反映する - Qiita error: src refspec master does not match anyが出る時(解決済み) - Qiita いまさら聞けないgitの使い方 - Qiita git fetchの理解からgit mergeとpullの役割 - Qiita git clone と git pull の違い(メモ) - Qiita githubの複数アカウントを使い分けるためにHTTPとOAuthTokenをつかう - Qiita