Git'te “köken” nedir?


582

Koştuğumda:

git push origin branchname

Tam olarak nedir originve neden şube adından önce yazmam gerekir?


63
"origin", taahhüt ettiğiniz yayımlamak istediğiniz uzak deponun adıdır. Kural olarak, varsayılan uzak depoya "orijin" denir, ancak aynı anda birkaç uzaktan kumanda (farklı adlarla) ile çalışabilirsiniz. Daha fazla bilgi burada (örneğin): gitref.org/remotes
Benoit Courtine

1
Ayrıca, bu kaynağın bir "yukarı akış" repo olduğuna dikkat edin: bkz. Stackoverflow.com/questions/2739376/…
VonC


Ama sonra git getirme ve git git şubesini kullanırken -r yerel şubeleri başlangıç ​​/ ugh ile eklenir: - / atlassian.com/git/tutorials/syncing/git-fetch
brat

Takma adların URL'lerle eşlemelerini içerdiği .git \ config dosyasına bakın, varsayılan olarak .git klasörü gizlidir.
Abhijeet Patel

Yanıtlar:


568

originsisteminizdeki belirli bir uzak depo için bir takma addır. Aslında o deponun malı değildir.

Yaparak

git push origin branchname

originhavuza itmeyi söylüyorsun . Uzak deposu adlandırmaya gerek yoktur origin: aslında aynı deponun başka bir geliştirici için farklı bir takma adı olabilir.

Uzaktan kumandalar, yalnızca depoların URL'sini saklayan bir takma addır. Düğmesini kullanarak her bir uzaktan kumandaya hangi URL'nin ait olduğunu görebilirsiniz.

git remote -v

Gelen pushkomutla kullanabileceğiniz uzaktan kumandalarını veya sadece bir kullanabilirsiniz URL'yi doğrudan. URL'yi kullanan bir örnek:

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

1
Tek bir uzaktan kumanda, birden çok uzaktan kumanda için bir takma ad olabilir mi? Bir uzaktan kumandanın birden fazla uzaktan kumandaya itmesini istersem ne olur? Örneğin, birincil bir repoya ve yedek bir repo'ya mı? Bazı durumlarda bu makul bir şey mi olur? EDIT: Burada birkaç çözüm var .
Yankee

1
"Orijin" anahtar kelimesini atlarsam ne olur? "Git push" dediğimizde, zaten tüm taahhütleri uzak depoya itmeyecek mi? "Orijin" anahtar kelimesini eklemek gereksiz görünüyor.
Mugen

@Mugen Dokümanlar'da, git pushönce o havuzun yapılandırmasını (kontrol edebileceğiniz git config --list) denilen bir anahtar için kontrol ettiğini görebilirsiniz branch.<branchname>.remote. Bu ayarlanmadıysa, "varsayılan olarak kaynaklanıyor" - git-scm.com/docs/git-push
Kenmore

156

originolduğu değil uzaktan veri havuzu adı. Bu, uzak depo URL'sinin yerine anahtar olarak ayarlanmış bir yerel takma addır.

Kullanıcının bir push isteğinde bulunurken tüm uzak URL'yi yazmak zorunda kalmasını önler.

Bu ad varsayılan olarak ve uzaktan kumandadan ilk kez klonlanırken Git tarafından konvansiyon için ayarlanır.

Bu takma ad sabit kodlanmış değildir ve aşağıdaki komut istemi kullanılarak değiştirilebilir:

git remote rename origin mynewalias

Daha fazla açıklama için http://git-scm.com/docs/git-remote adresine bakın .


1
"Orijin" anahtar kelimesini atlarsam ne olur? "Git push" dediğimizde, zaten tüm taahhütleri uzak depoya itmeyecek mi? "Orijin" anahtar kelimesini eklemek gereksiz görünüyor.
Mugen

74

Git, deponuzun diğer kopyalarının URL'leri olan "uzaktan kumandalar" kavramına sahiptir. Başka bir havuzu klonladığınızda Git otomatik olarak "orijin" adlı bir uzaktan kumanda oluşturur ve bunu gösterir.

Uzaktan kumandayla ilgili daha fazla bilgiyi yazarak görebilirsiniz git remote show origin.


1
git komutları yeni başlayanlar için çok kafa karıştırıcı. Sanırım bu sürüm kontrol sisteminin geçmişi ile ilgili. Yani, soru: Bunun yerine git remote show origin, neden basit değil git show origin? Bir sebep olmalı, nedir? Teşekkürler.
Stack0verflow

5
@ Stack0verflow: Bu muhtemelen yeni bir soru olarak daha iyi sorulur, böylece merak ediyorsanız insanlar araştırma yapabilir. 'git show' zaten bir taahhüt gösteren başka bir komuttur ve teknik olarak hiçbir şey, origin adlı bir uzaktan kumandaya ek olarak 'origin' adlı bir şubeye sahip olmanızı durduramaz ...
Jason Malinowski


24

Basit! "origin", böyle bir komutu çalıştırdığınızda uzak deponuza takma adınızdır:

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

O andan itibaren Git, "orijinin" söz konusu depoya (bu durumda bir GitHub deposuna) işaret ettiğini bilir. Buna "github" veya "repo" ya da ne istersen diyebilirdin.


19

Ben de bununla karıştırdım ve aşağıda öğrendiklerim

Bir havuzu klonladığınızda, örneğin GitHub'dan:

  • origindepoyu kopyaladığınız URL'nin takma adıdır. Bu takma adı değiştirebileceğinizi unutmayın.

  • masterUzak depoda (tarafından takma origin) bir dal var . masterYerel olarak oluşturulan başka bir şube daha var .

Bu SO sorusuyla ilgili daha fazla bilgi bulunabilir: Git dallanma: master ile orijin / master ve uzaktan kumandalar / orijin / master


11

Bir havuzu klonladığınızda git clone, otomatik olarak originklonlanan depoya geri dönme adı verilen bir uzak bağlantı oluşturur . Bu, yukarı yönlü değişiklikleri çekmek veya yerel taahhütleri yayınlamak için kolay bir yol sağladığı için merkezi bir deponun yerel bir kopyasını oluşturan geliştiriciler için yararlıdır. Bu davranış, Git tabanlı projelerin çoğunun merkezi depo kökenini de çağırmasının nedenidir.



0

Gönderen https://www.git-tower.com/learn/git/glossary/origin :

Git'te "origin", bir projenin başlangıçta klonlandığı uzak depo için bir kısayol adıdır. Daha doğrusu, o orijinal deponun URL'si yerine kullanılır ve böylece referansı daha kolay hale getirir.

Kökeni hiçbir şekilde "büyülü" bir isim değil, sadece standart bir sözleşmedir. Bu sözleşmeyi el değmeden bırakmak mantıklı olsa da, herhangi bir işlevsellik kaybetmeden onu mükemmel bir şekilde yeniden adlandırabilirsiniz.

Aşağıdaki örnekte, "klon" komutunun URL parametresi, klonlanan yerel depo için "başlangıç ​​noktası" olur:

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

Başkaları tarafından yazılan içeriği kopyalarken, bunu yaptığınızı açıkça belirtmeniz ve her zaman kaynağa bir bağlantı eklemeniz gerekir. Aksi takdirde intihal ve cevabı silmek için bir sebep. Ayrıca, cevabınız zaten gönderilmişti .
Fabio, Reinstate Monica'ya

0

Diğer cevaplar origin, uzak bir deponun URL'si için tam olarak doğru olmayan bir takma ad olduğunu söylüyor . Şununla başlayan bir adresin httpURL iken , bir adresin git@bir URI veya Evrensel Kaynak Tanımlayıcısı olduğu unutulmamalıdır .

Tüm URL'ler URI'dir, ancak tüm URI'ler URL değildir.

Kısacası, yazdığınızda git remote add origin <URI>, yerel git'e kelimeyi her kullandığınızda originbelirttiğiniz URI anlamına geldiğini söylüyorsunuz. Bunu, değeri tutan bir değişken gibi düşünün.

Ve sadece bir değişken gibi, istediğiniz gelecekte erişmek (örn. github, heroku, destination, Vs).


0

uzak (depo URL takma adı) → başlangıç ​​noktası (yukarı akış takma adı) → master (dal takma adı);

  • remoteSeviye ile aynı working directory, index, repository,

  • origin, uzak depo şubesine yerel depo dalı eşlemesi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.