プロジェクトにGitに2つ(またはそれ以上)の「オリジン」を含めることはできますか?
1つのプロジェクトをgithubとHerokuサーバーの両方にプッシュしたいと思います。
具体的には、このエラーはgithubリポジトリを追加するときに表示されます。
$ git remote add origin https://github.com/Company_Name/repository_name.git
fatal: remote origin already exists.
プロジェクトにGitに2つ(またはそれ以上)の「オリジン」を含めることはできますか?
1つのプロジェクトをgithubとHerokuサーバーの両方にプッシュしたいと思います。
具体的には、このエラーはgithubリポジトリを追加するときに表示されます。
$ git remote add origin https://github.com/Company_Name/repository_name.git
fatal: remote origin already exists.
リモコンはいくつでも持つことができますが、「origin」という名前のリモコンは1つしか持てません。「origin」と呼ばれるリモートは、既存のリポジトリのクローンを作成するときにGitによって作成されるデフォルトのリモートであることを除いて、特別なものではありません。2番目のリモートを構成し、そのリモートにプッシュ/プルし、オリジンではなくそのリモートからのブランチを追跡するようにいくつかのブランチを設定できます。
代わりに「github」というリモコンを追加してみてください。
$ git remote add github https://github.com/Company_Name/repository_name.git
# push master to github
$ git push github master
# Push my-branch to github and set it to track github/my-branch
$ git push -u github my-branch
# Make some existing branch track github instead of origin
$ git branch --set-upstream other-branch github/other-branch
注目すべきは、オリジンを一度に複数のgitリポジトリサーバーにプッシュすることです。
これを実現するには、次のコマンドを使用して、オリジンリモートに別のURLを追加します。
git remote set-url --add origin ssh://git@bitbucket.org/user/myproject.git
これは、複数のリモート、GitHubとGitLabを使用したサンプルプロジェクトです。
GitHubのリモートリポジトリを追加する
$ git remote add github https://github.com/Company_Name/repository_name.git
GitLabのリモートリポジトリを追加する
$ git remote add gitlab https://gitlab.com/Company_Name/repository_name.git
これで、プロジェクトに複数のリモートがあります。で再確認してくださいgit remote -v
$ git remote -v
github https://github.com/Company_Name/repository_name.git (fetch)
github https://github.com/Company_Name/repository_name.git (push)
gitlab https://gitlab.com/Company_Name/repository_name.git (fetch)
gitlab https://gitlab.com/Company_Name/repository_name.git (push)
複数のリポジトリにどのようにプッシュしますか?
$ git push github && git push gitlab
git remote set-url --add --push origin git@github.com:user/my-project.git
git remote set-url --add --push origin git@bitbucket.org:user/my-project.git
今、あなたは2つの起源を持っています。
ローカルリポジトリは、複数のリモートリポジトリにリンクできます。
ただし、これらのリンクの1つだけを呼び出すことができますorigin
。残りのリンクには異なる名前を付ける必要があります。
したがって、この質問に適切に答えるためには、起源が何であるかを理解する必要があります。
例を挙げて説明しましょう。
がremote repository
呼び出されamazing-project
、そのリモートリポジトリをローカルマシンに複製して、を作成するとしますlocal repository
。次に、下の図に示すようなものがあります。
リポジトリのクローンを作成したためです。リモートリポジトリとローカルリポジトリはリンクされています。
コマンドを実行するgit remote -v
と、ローカルリポジトリにリンクされているすべてのリモートリポジトリが一覧表示されます。ここで、リモートリポジトリからコードをプッシュまたはフェッチするために、短縮名「origin」
を使用することがわかります。
さて、これは少し混乱するかもしれません。GitHub(またはリモートサーバー)では、プロジェクトは「amazing-project」と呼ばれているからです。では、なぜリモートリポジトリに2つの名前があるように見えるのでしょうか。
リポジトリに付けられている名前の1つは、GitHubまたはどこかのリモートサーバーにある名前です。これは、プロジェクト名のようなものです。そして私たちの場合、それは「amazing-project」です。
リポジトリに付けられているもう1つの名前は、リポジトリのURLに関連するローカルリポジトリにある短い名前です。これは、そのリモートリポジトリからコードをプッシュまたはフェッチするときに使用するショートネームです。そして、この短い名前の種類はURLのエイリアスのように機能します。これは、コードをプッシュまたはフェッチするために長いURL全体を使用する必要がないようにするための方法です。上記の例では、と呼ばれていorigin
ます。
それで、何origin
ですか?
基本的に、originは、リモートリポジトリのクローンを作成するときにGitがリモートリポジトリに使用するデフォルトの短縮名です。したがって、これは単なるデフォルトです。
多くの場合、ローカルリポジトリ内の複数のリモートリポジトリへのリンクがあり、それぞれに異なる短縮名が付けられます。
最後の質問ですが、同じ名前を使用しないのはなぜですか?
その質問に別の例で答えます。私たちのプロジェクトで私たちを助けてくれるように、私たちのリモートリポジトリをフォークする友人がいるとしましょう。そして、リモートリポジトリからコードをフェッチできるようにしたいとします。このコマンドを使用してgit remote add <shortname> <url>
、ローカルリポジトリ内のリモートリポジトリへのリンクを追加できます。
上の画像ではfriend
、友人のリモートリポジトリを参照するために短縮名を使用したことがわかります。また、両方のリモートリポジトリのプロジェクト名が同じamazing-project
であることがわかります。これは、リモートサーバーのリモートリポジトリ名とローカルリポジトリの短縮名が同じであってはならない理由の1つです。
オリジンの代わりに別の名前を付けることで、リポジトリに別のリモートアカウントを追加できます。origin2などの名前を使用できます。したがって、gitコマンドは次のように変更できます。
git remote add origin2 https://github.com/Company_Name/repository_name.git
git remote add origin2 https://github.com/Company_Name/repository_name.git
およびプッシュ使用の場合:
git push -u origin2 master
オリジンの代わりにGitHubまたはGitLabを使用できます
オリジンの代わりにgithubの場合はgithubを使用します
git remote add github https://github.com/repository_name.git
git push github branchname
オリジンの代わりにgitlabを使用する場合はgitlabを使用します
git remote add gitlab https://github.com/repository_name.git
git push gitlab branchname
次の手順に従って、既存のリポジトリから新しいリモートに変更をプッシュできます。
cd existing_repo
現在のリモートの名前を変更します(オプション)
git remote rename origin old-origin
新しいリモートを追加します(ここで使用されるオリジン)
git remote add origin https://github.com/repository_name.git
origin
これで、コードを新しいリモコンにプッシュできます
git push -u origin --all
git push -u origin --tags