概要
新しくリポジトリーを作成してリモート~ローカルの連携を始めるには、以下の2つの方法がある。何れの方法でも、まずリモートリポジトリーを作成しておく必要がある。
- リモートのリポジトリーをローカルにcloneする方法
- リモートのリポジトリーにローカルリポジトリーをpushする方法
また、その後の接続・認証方法(https/SSH)に応じて、URLの指定方法が異なる。
リモートリポジトリー作成
いずれにしてもリモート上に新たなリポジトリーを作成し、リモートリポジトリー本体とそのURLを確定させておく必要がある。
ここではGitHub上に新たなリポジトリーtest
を作成する。
方法1:Gitでclone
流れ
リモートで作成したリポジトリーをローカルでcloneして変更を加えていく。リポジトリーに対して、プロジェクトディレクトリーなどを加えていく。
最初のcloneで指定したURLによって、その後のアクセスがhttpsかSSHが決まる。
git cloneコマンドの実行
リポジトリーのワーキングツリーの「親ディレクトリーで」、リモートリポジトリーをclone。リモートリポジトリー作成直後では、「空のリポジトリーをcloneしている」旨の警告が表示される。リモートでREADME.md
を作成していればこの警告は出ない。
cloneの際のURLの指定方法によって、その後のアクセス方法がhttpsかSSHかが決まる。ここではSSH認証になるようにURLを指定している。
git@github.com:アカウント/リポジトリー名.git
1 2 3 4 |
[vagrant@localhost git]$ git clone git@github.com:taustation/test.git Cloning into 'test'... Enter passphrase for key '/home/vagrant/.ssh/id_rsa': warning: You appear to have cloned an empty repository. |
ワーキングツリーへの移動
cloneの結果作成されたワーキングツリーに移動する(意外にこれを忘れる)。
1 |
[vagrant@localhost git]$ cd test |
空のリモートリポジトリーをcloneした状態ではディレクトリーは空で、ブランチも定義されていない。リモートでREADME.md
を作成していればディレクトリーにはファイルが存在し、GitHubならブランチ名はmain
になっている。
1 2 |
[vagrant@localhost test]$ ls [vagrant@localhost test]$ git branch |
ローカルでの作業・コミット
ここではテキストファイルtest.txtを1つ作ってコミットする。
1 2 3 4 5 6 7 8 |
[vagrant@localhost test]$ vi test.txt [vagrant@localhost test]$ cat test.txt test text [vagrant@localhost test]$ git add . [vagrant@localhost test]$ git commit -m "initial commit" [master (root-commit) 24633ec] initial commit 1 file changed, 1 insertion(+) create mode 100644 test.txt |
プッシュ
cloneの際にSSH認証のURLを指定しているので、以後はSSHによるpush/pull
になる。
1 2 3 4 5 6 7 8 |
[vagrant@localhost test]$ git push Enter passphrase for key '/home/vagrant/.ssh/id_rsa': Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Writing objects: 100% (3/3), 217 bytes | 217.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To github.com:taustation/test.git * [new branch] master -> master |
方法2:Gitからのpush
リモートリポジトリーを作成しておき、そこにGitで作成したローカルリポジトリーをプッシュする。プロジェクトディレクトリーそのものをリポジトリーとしてpush可能。
ローカルリポジトリー作成
ワーキングツリーのディレクトリーを作成し、そこでgit init
。
1 2 3 |
[vagrant@localhost git]$ mkdir test && cd test [vagrant@localhost test]$ git init Initialized empty Git repository in /home/vagrant/git/test/.git/ |
ローカルリポジトリーで作業・コミット
ここではテキストファイルtest.txt
を1つ作ってコミットする。
1 2 3 4 5 6 7 8 |
[vagrant@localhost test]$ vi test.txt [vagrant@localhost test]$ cat test.txt test text [vagrant@localhost test]$ git add . [vagrant@localhost test]$ git commit -m "initial commit" [master (root-commit) c0f030d] initial commit 1 file changed, 1 insertion(+) create mode 100644 test.txt |
単にpushするとエラー
このままpushしようとしても、相手先のリモートの所在がわからないためエラーになる。
1 2 3 4 5 6 7 8 9 |
[vagrant@localhost test]$ git push fatal: No configured push destination. Either specify the URL from the command-line or configure a remote repository using git remote add <name> <url> and then push using the remote name git push <name> |
リモートリポジトリー追加
リモートリポジトリーのURLを指定して追加。
git remote add リモート名 URL
URLはhttpsとSSHで異なってくるが、ここではSSH認証のURLを指定。
git@github.com:アカウント/リポジトリー
追加されたリモートリ名は以下で確認できる。
git remote -v
1 2 3 4 |
[vagrant@localhost test]$ git remote add origin git@github.com:taustation/test.git [vagrant@localhost test]$ git remote -v origin git@github.com:taustation/test.git (fetch) origin git@github.com:taustation/test.git (push) |
プッシュ
ブランチ名のmainへの変更
git init
直後にブランチ名がmaster
になっている場合、リモートがGitHubのデフォルトならmain
に変更する必要がある。
1 2 |
[vagrant@localhost test]$ git branch * master |
ブランチ名をmain
に変更する。カレントブランチのブランチ名変更はgit branch
コマンドで-m/-M/--move
オプションを使う。
git branch -m/-M/--move 変更後ブランチ名
1 |
[vagrant@localhost test]$ git branch -move main |
初期プッシュ
最初のみ上流ブランチを指定してプッシュ
git push -u/--set-upstream リモート リモートブランチ
上流ブランチを指定しないとpushのたびにリモートとリモートブランチを指定する必要がある。
これ以後はgit push/pull
のみで可能となる。
1 2 3 4 5 6 7 8 9 |
[vagrant@localhost test]$ git push -u origin main Enter passphrase for key '/home/vagrant/.ssh/id_rsa': Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Writing objects: 100% (3/3), 216 bytes | 216.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To github.com:taustation/test.git * [new branch] main -> main Branch 'main' set up to track remote branch 'main' from 'origin'. |
プッシュ結果の確認
方法1・方法2とも、GitHubなどのリモートでプッシュの反映を確認できる。