ゆるおたノート

Tomorrow is another day.

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

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

はじめに

基本の流れ

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

凡例

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

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

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

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

cdchange directoryの略ですね。

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

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

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

$ git init

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

Gitに慣れてきたら中にあるCONFIGファイル等の設定データを触りたくなると思うので、必要に応じてエクスプローラー(Windows)やFinder(macOS)で隠しファイルを表示するように設定しておくと良いでしょう。

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

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

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

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

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

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

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

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

HTTPS接続の場合

URL指定して呼び出します。

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

GitHubの場合は、以下の文字列です。

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

SSH接続の場合

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

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

GitHub向けの記事ですが、SSHキーの作成についてはこちらが参考になると思います。

心情的に秘密鍵は別の場所に保存したいところなのですが、移動しない方が良いみたいですね…?
参考:[SSH]秘密鍵の保存場所はどこがいいのか? | 東京伊勢海老通信

(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勉強中】リポジトリの作成と接続 - ゆるおたノート

参照