ゆるおたノート

Tomorrow is another day.

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

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

はじめに

基本の流れ

www.yuru-wota.com

凡例

記号・用語 意味 使い方
$ 「"コマンドライン"で使えるコマンド」のしるし。
通常、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 '<リモートリポジトリ>'

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

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

GitHubの場合は、アカウント作成後にメアドの設定もしておくことをオススメします! qiita.com

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

HTTPS接続の場合

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

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

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

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

SSH接続の場合

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

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

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

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

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

GitHubの場合、<>部分は以下の文字列です。

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

7. リモートリポジトリにプッシュする

そのままプッシュすると、リモート側のデータとコンフリクトしてしまいます。
初めてのプッシュのはずなのでちょっと腑に落ちないのですが…)

<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オプションについては、詳しくは過去記事をご覧ください。

8. 完了。

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

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

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

使用するサービスによって手順が異なるため、(略)
メアドについてはこちらのリンクを参照してください。

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

こちらを参照してください。

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

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

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

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

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

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

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

5. 完了。

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

参照

qiita.com qiita.com qiita.com qiita.com qiita.com qiita.com