Che cos'è "origine" in Git?


583

Quando corro:

git push origin branchname

Che cos'è esattamente origine perché devo digitarlo prima del nome del ramo?


63
"origine" è il nome del repository remoto in cui si desidera pubblicare i commit. Per convenzione, il repository remoto predefinito si chiama "origine", ma è possibile lavorare con più telecomandi (con nomi diversi) contemporaneamente. Maggiori informazioni qui (ad esempio): gitref.org/remotes
Benoit Courtine

1
Si noti anche che l'origine è un "a monte" pronti contro termine: vedi stackoverflow.com/questions/2739376/...
VonC


Ma poi quando si usa git fetch e poi git branch -r i rami locali sono anteposti con origin / ugh: - / atlassian.com/git/tutorials/syncing/git-fetch
brat

Verifica il file .git \ config che contiene i mapping degli alias agli URL, la cartella .git è nascosta per impostazione predefinita.
Abhijeet Patel

Risposte:


569

originè un alias sul tuo sistema per un particolare repository remoto. In realtà non è una proprietà di quel repository.

Facendo

git push origin branchname

stai dicendo di spingere nel originrepository. Non è necessario nominare il repository remoto origin: in effetti lo stesso repository potrebbe avere un alias diverso per un altro sviluppatore.

I telecomandi sono semplicemente un alias che memorizza l'URL dei repository. Puoi vedere quale URL appartiene a ciascun telecomando usando

git remote -v

Nel pushcomando puoi usare i telecomandi oppure puoi semplicemente usare direttamente un URL . Un esempio che utilizza l'URL:

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

1
Un singolo telecomando può essere un alias per più telecomandi? E se volessi che un telecomando spingesse su più telecomandi? Ad esempio, passare a un repository primario e a un repository di backup? Sarebbe una cosa ragionevole desiderare in alcune situazioni? EDIT: ci sono diverse soluzioni qui .
Yankee,

1
Che cosa succede se ometto la parola chiave "origine"? Quando diciamo "git push", non spingerà comunque tutti i commit nel repository remoto? L'aggiunta della parola chiave "origine" sembra ridondante.
Mugen,

@Mugen Nei documenti per git pushpuoi vedere che controlla prima la configurazione di quel repository (che puoi controllare git config --list) per una chiave chiamata branch.<branchname>.remote. Se non impostato, "l'impostazione predefinita è origin" - git-scm.com/docs/git-push
Kenmore,

157

originnon è il nome del repository remoto. È piuttosto un alias locale impostato come chiave al posto dell'URL del repository remoto.

Evita che l'utente debba digitare l'intero URL remoto quando richiede un push.

Questo nome è impostato di default e per convenzione da Git quando si clona per la prima volta da un telecomando.

Questo nome alias non è codificato e può essere modificato utilizzando il seguente prompt dei comandi:

git remote rename origin mynewalias

Dai un'occhiata a http://git-scm.com/docs/git-remote per ulteriori chiarimenti.


1
Che cosa succede se ometto la parola chiave "origine"? Quando diciamo "git push", non spingerà comunque tutti i commit nel repository remoto? L'aggiunta della parola chiave "origine" sembra ridondante.
Mugen,

74

Git ha il concetto di "telecomandi", che sono semplicemente URL di altre copie del tuo repository. Quando cloni un altro repository, Git crea automaticamente un nome remoto "origine" e lo indica.

È possibile visualizzare ulteriori informazioni sul telecomando digitando git remote show origin.


1
I comandi git sono molto confusi per i principianti. Immagino che abbia a che fare con la storia di questo sistema di controllo delle versioni. Quindi, domanda: invece di git remote show origin, perché non semplicemente git show origin? Ci deve essere una ragione, che cos'è? Grazie.
Stack0verflow

5
@ Stack0verflow: questa è probabilmente una domanda migliore, in modo che le persone possano fare la ricerca se sei curioso. 'git show' è già un altro comando che mostra un commit, e tecnicamente nulla ti impedirebbe di avere un ramo chiamato 'origine' oltre ad avere un remoto chiamato origine ...
Jason Malinowski


24

Semplice! "origine" è proprio quello che hai soprannominato il tuo repository remoto quando hai eseguito un comando come questo:

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

Da quel momento in poi Git sa che "origine" punta a quel repository specifico (in questo caso un repository GitHub). Avresti potuto chiamarlo "github" o "repo" o come desideri.


19

Sono stato anche confuso da questo, e di seguito è quello che ho imparato.

Quando si clona un repository, ad esempio da GitHub:

  • originè l'alias per l'URL da cui è stato clonato il repository. Si noti che è possibile modificare questo alias.

  • C'è un masterramo nel repository remoto (aliasato da origin). C'è anche un altro masterramo creato localmente.

Ulteriori informazioni possono essere trovate da questa domanda SO: Git branching: master vs. origin / master vs. remote / origin / master


11

Quando si clona un repository con git clone, crea automaticamente una connessione remota chiamata che originpunta al repository clonato. Ciò è utile per gli sviluppatori che creano una copia locale di un repository centrale poiché fornisce un modo semplice per eseguire il pull up delle modifiche o pubblicare commit locali. Questo comportamento è anche il motivo per cui la maggior parte dei progetti basati su Git chiama l'origine del repository centrale.



0

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

In Git, "origine" è un nome abbreviato per il repository remoto da cui un progetto è stato originariamente clonato. Più precisamente, viene utilizzato al posto dell'URL del repository originale e quindi rende molto più semplice il riferimento.

Nota che l'origine non è affatto un nome "magico", ma solo una convenzione standard. Sebbene abbia senso lasciare intatta questa convenzione, è possibile rinominarla perfettamente senza perdere alcuna funzionalità.

Nell'esempio seguente, il parametro URL del comando "clone" diventa "origine" per il repository locale clonato:

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

Quando copi contenuti scritti da altri, devi chiarire che lo stai facendo e devi sempre includere un link alla fonte. Altrimenti è plagio, ed è un motivo per eliminare la risposta. Inoltre, la tua risposta era già stata pubblicata .
Fabio dice Reintegrare Monica l'

0

Le altre risposte dicono che originè un alias per l' URL di un repository remoto che non è del tutto accurato. Va notato che un indirizzo che inizia con httpè un URL mentre uno che inizia con git@è un URI o Universal Resource Identifier.

Tutti gli URL sono URI, ma non tutti gli URI sono URL.

In breve, quando digiti git remote add origin <URI>stai dicendo al tuo git locale che ogni volta che usi la parolaorigin intendi effettivamente l'URI che hai specificato. Pensalo come una variabile che contiene un valore.

E proprio come una variabile, è possibile assegnare un nome che quello che vuoi (ad es. github, heroku, destination, Ecc).


0

remoto (alias dell'url del repository) → origine (alias a monte) → master (alias del ramo);

  • remote, Livello uguale working directory, index, repository,

  • originRepository ramo locale mappa in ramo repository remoto

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.