Gitの「起源」とは何ですか?


583

私が走ると:

git push origin branchname

正確には何ですか?originなぜブランチ名の前に入力する必要があるのですか?


63
「origin」は、コミットを公開するリモートリポジトリの名前です。慣例により、デフォルトのリモートリポジトリは「origin」と呼ばれますが、同時に複数のリモート(名前が異なる)を操作できます。詳細はこちら(例):gitref.org/remotes
Benoit

1
注また、原点は「上流」レポであること:参照stackoverflow.com/questions/2739376/...を
VonC


/ - :しかし、その後地元の支店を原点/ぐふ前に付加され-rフェッチして、gitのブランチGitの使用している場合atlassian.com/git/tutorials/syncing/git-fetch
ガキ

エイリアスとURLのマッピングが含まれている.git \ configファイルをチェックアウトします。.gitフォルダーはデフォルトで非表示になっています。
Abhijeet Patel

回答:


569

origin特定のリモートリポジトリのシステム上エイリアス です。実際にはそのリポジトリのプロパティではありません。

することによって

git push origin branchname

あなたはoriginリポジトリにプッシュすることを言っています。リモートリポジトリに名前を付ける必要はありませんorigin。実際、同じリポジトリが別の開発者に異なるエイリアスを持つ可能性があります。

リモートは、リポジトリのURLを格納する単なるエイリアスです。を使用して、各リモートにどのURLが属しているかを確認できます

git remote -v

ではpushコマンドは、使用することができますリモコンのか、単に使用できるURLを直接。URLを使用する例:

git push git@github.com:git/git.git master

1
単一のリモートを他の複数のリモートのエイリアスにすることはできますか?1つのリモートを他の複数のリモートにプッシュしたい場合はどうなりますか?たとえば、プライマリリポジトリにプッシュし、バックアップリポジトリにプッシュしますか?状況によっては、それが適切なことでしょうか。編集:ここにはいくつかの解決策があります
ヤンキー

1
「origin」キーワードを省略するとどうなりますか?「git push」と言うと、とにかくすべてのコミットをリモートリポジトリにプッシュしませんか?キーワード「origin」を追加することは冗長に思われます。
ムゲン

@Mugenのドキュメントでgit pushは、最初にそのリポジトリの構成を確認します(これはで確認できますgit config --listbranch.<branchname>.remote。それが設定されていない場合、「デフォルトでオリジンに」-git-scm.com/docs/git-push
Kenmore

157

originリモートリポジトリ名ではありません。これは、リモートリポジトリURLの代わりにキーとして設定されるローカルエイリアスです。

これにより、ユーザーはプッシュを要求するときにリモートURL全体を入力する必要がなくなります。

この名前はデフォルトで設定され、リモートから初めて複製するときのGitによる規則に従います。

このエイリアス名はハードコーディングされておらず、次のコマンドプロンプトを使用して変更できます。

git remote rename origin mynewalias

詳細については、http://git-scm.com/docs/git-remoteご覧ください


1
「origin」キーワードを省略するとどうなりますか?「git push」と言うと、とにかくすべてのコミットをリモートリポジトリにプッシュしませんか?キーワード「origin」を追加することは冗長に思われます。
ムゲン

74

Gitには「リモート」という概念があります。これは、リポジトリの他のコピーへの単なるURLです。別のリポジトリのクローンを作成すると、Gitは自動的に「origin」という名前のリモートを作成し、それを指します。

と入力すると、リモコンの詳細情報を表示できますgit remote show origin


1
gitコマンドは初心者には非常に混乱します。このバージョン管理システムの歴史と関係があると思います。だから、質問:の代わりにgit remote show origin、なぜ単純にではないのですgit show originか?理由があるに違いありませんが、それは何ですか?ありがとう。
Stack0verflow 2015

5
@ Stack0verflow:これはおそらく新しい質問としてよりよく尋ねられるので、興味があれば、人々は調査を行うことができます。'git show'はすでにコミットを表示する別のコマンドであり、技術的には、リモートと呼ばれるoriginに加えて 'origin'と呼ばれるブランチを持つことを止めるものはありません...
Jason Malinowski


24

シンプル!"origin"は、次のようなコマンドを実行したときにリモートリポジトリにニックネームを付けたものです。

git remote add origin git@github.com:USERNAME/REPOSITORY-NAME.git

それ以降、Gitは「origin」がその特定のリポジトリ(この場合はGitHubリポジトリ)を指していることを認識します。「github」や「repo」など、好きな名前を付けることができます。


19

私もこれに混乱しました、そして以下は私が学んだことです。

GitHubなどからリポジトリを複製する場合:

  • originリポジトリのクローン元のURLのエイリアスです。このエイリアスは変更できることに注意してください。

  • masterリモートリポジトリには1つのブランチがあります(別名origin)。masterローカルに作成された別のブランチもあります。

詳細については、このSOの質問から見つけることができます:Gitブランチ:マスターvs.オリジン/マスターvs.リモート/オリジン/マスター


11

を使用してリポジトリを複製するとgit clone、複製されたリポジトリをorigin指すというリモート接続が自動的に作成されます。これは、アップストリームの変更をプルしたり、ローカルコミットを公開したりする簡単な方法を提供するため、中央リポジトリのローカルコピーを作成する開発者に役立ちます。この動作は、ほとんどのGitベースのプロジェクトが中央リポジトリオリジンを呼び出す理由でもあります。



0

https://www.git-tower.com/learn/git/glossary/originから:

Gitでは、「origin」は、プロジェクトのクローン元であるリモートリポジトリの省略名です。より正確には、元のリポジトリのURLの代わりに使用されるため、参照がはるかに簡単になります。

起源は決して「魔法の」名前ではなく、単なる標準的な規則であることに注意してください。この規則をそのままにしておくことは理にかなっていますが、機能を失うことなく完全に名前を変更できます。

次の例では、「clone」コマンドのURLパラメータが、複製されたローカルリポジトリの「origin」になります。

git clone https://github.com/gittower/git-crash-course.git

他の人が書いたコンテンツをコピーするときは、それを行っていることを明確にし、常にソースへのリンクを含める必要があります。そうでなければ、それは盗作であり、それが答えを削除する理由です。その上、あなたの答えはすでに投稿されていました
ファビオはモニカを復活させる

0

他の答えoriginは、それが完全に正確ではないリモートリポジトリのURLのエイリアスであると言います。で始まるアドレスhttpはURLであるのに対し、で始まるアドレスgit@URIまたはUniversal Resource Identifier であることに注意してください。

すべてのURLはURIですが、すべてのURIがURLであるとは限りません。

要するに、タイプgit remote add origin <URI>するとき、あなたはあなたのローカルgitに、あなたが単語originを使うときはいつでも、あなたが実際にあなたが指定したURIを意味することを伝えています。値を保持する変数のようなものと考えてください。

そして、ちょうど変数のように、あなたが望むものは何でもそれに名前を付けることができ(例えばgithubherokudestination、など)。


0

リモート(リポジトリURLエイリアス)→ オリジン(アップストリームエイリアス)→ マスター(ブランチエイリアス);

  • remote同様に、レベルworking directoryindexrepository

  • origin、ローカルリポジトリブランチからリモートリポジトリブランチへのマッピング

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.