TL; DR: git branch --set-upstream-to origin/solaris
İstediğin-sorusuna bu mu "Ben bir kaynak tarafı ayarlamak zorunda" gibi biraz başka bir şekilde ifade edeceğiz cevabı: hayır, yok olması hiç bir kaynak tarafı ayarlamak için.
Bununla birlikte, geçerli dal için yukarı akışınız yoksa, Git davranışını git push
ve diğer komutları da değiştirir.
Buradaki itme hikayesinin tamamı uzun ve sıkıcıdır ve geçmişte Git sürüm 1.5 öncesine kadar uzanır. Bir çok kısaltmak için git push
kötü uygulandı. 1 Git sürüm 2.0'dan itibaren Git'in push.default
artık varsayılan olarak yazılmış bir yapılandırma düğmesi vardır simple
. Git'in 2.0'dan önceki ve sonraki çeşitli sürümleri için, her koştuğunuzda git push
, Git sizi push.default
sadece susmak için ayarlamaya ikna etmeye çalışırken çok fazla gürültü çıkarırdı git push
.
Hangi Git sürümünü çalıştırdığınızı veya yapılandırıp yapılandırmadığınızı belirtmiyorsunuz push.default
, bu yüzden tahmin etmeliyiz. Benim tahminim Git sürüm 2-nokta-birşey kullanıyor ve bu ayarladığınız olmasıdır push.default
için simple
o sus ulaşmak için. Kesinlikle Git hangi sürümü varsa ve var da ne ol eğer push.default
ayarlı, yaptığı henüz Git başka şikayet senin Git belirtir nedeniyle bu uzun ve sıkıcı tarihe, madde, ama sonunda, aslında sen alıyoruz olduğunu Geçmişteki hatalardan birini önlemek için yapılandırılmış.
Yukarı akış nedir?
Bir yukarı akış , bir (normal, yerel) şube ile ilişkilendirilmiş, genellikle uzaktan izleme dalı olan başka bir dal adıdır.
Her şubenin bir (1) yukarı akış setine sahip olma seçeneği vardır. Yani, her şubenin bir yukarı akışı vardır veya bir yukarı akışı yoktur. Hiçbir şubede birden fazla yukarı akış olamaz.
Memba gerektiğini , ancak olmak zorunda değildir, geçerli bir dal (gibi uzaktan izleme olsun ya da benzeri lokal ). Geçerli dalı ise kendisine, B memba sahiptir U , gerektiği çalışır. Çalışmazsa - U'nun var olmadığından şikayet ederse - o zaman Git'in çoğu yukarı akış hiç ayarlanmamış gibi davranır. Gibi birkaç komut, yukarı akış ayarını gösterecek, ancak "gitti" olarak işaretleyecektir.origin/B
master
git rev-parse U
git branch -vv
Yukarı akış ne kadar iyi?
Your veya push.default
olarak ayarlandıysa , upstream ayarı hiçbir ek argüman olmadan kullanılacaktır, sadece çalışacaktır.simple
upstream
git push
İşte bu - tüm yaptığı bu git push
. Ancak bu oldukça önemlidir, çünkü git push
basit bir yazım hatasının büyük baş ağrısına neden olduğu yerlerden biridir.
Eğer senin push.default
için ayarlanır nothing
, matching
veya current
, bir kaynak tarafı ayarı tümü için de hiçbir şey yapmaz git push
.
(Tüm bunlar Git sürümünüzün en az 2.0 olduğunu varsayar.)
Yukarı akış etkiler git fetch
git fetch
Hiçbir ek argüman olmadan çalıştırırsanız Git , geçerli dalın yukarı akışına danışarak hangi uzaktan kumandadan alınacağını belirler . Yukarı akış bir uzaktan izleme dalı ise, Git bu uzaktan kumandadan alır. (Yukarı akış ayarlanmamışsa veya yerel bir dalsa, Git getirmeyi dener origin
.)
Yukarı akış etkiler git merge
ve git rebase
de
Ek bağımsız değişken çalıştırırsanız git merge
veya çalıştırmazsanız git rebase
, Git geçerli dalın yukarı akışını kullanır. Yani bu iki komutun kullanımını kısaltır.
Yukarı akış etkiler git pull
Yine de asla 2 kullanmamalısınız git pull
, ancak yaparsanız, git pull
hangi uzaktan kumandadan alınacağını ve sonra hangi dalın birleştirileceğini veya yeniden bağlanacağını belirlemek için yukarı akış ayarını kullanır. Olduğunu, git pull
aynı işlevi git fetch
aslında -çünkü çalışır git fetch
-ve daha sonra aynı şeyi yapar git merge
veya git rebase
aslında, çünkü ishal git merge
veya git rebase
.
(Genellikle bu iki adımı manuel olarak yapmalısınız, en azından Git'i yeterince iyi tanıyıncaya kadar, her iki adım da başarısız olduğunda, ki sonunda, neyin yanlış gittiğini anlar ve bu konuda ne yapacağınızı bilirsiniz.)
Yukarı akış etkiler git status
Bu aslında en önemlisi olabilir. Bir upstream setiniz olduğunda, git status
mevcut şubeniz ve upstream arasındaki farkı taahhütler açısından raporlayabilirsiniz.
, Normal durumda, sen dal üzerinde olan B
kendi memba set ile ve çalıştırmak size itebilir kaydedilmesini olup olmadığını hemen göreceksiniz, ve / veya yönünde birleşmek veya Rebase olabilir kaydedilmesini.origin/B
git status
Bunun nedeni şudur git status
:
git rev-list --count @{u}..HEAD
: üzerinde olmayan kaç B
kaydetmeniz var ?origin/B
git rev-list --count HEAD..@{u}
: üzerinde olmayan kaç kaydetmeniz var ?origin/B
B
Bir yukarı akış kurmak size tüm bunları verir.
Neden master
zaten bir yukarı akış seti var?
Bir uzaktan kumandadan ilk klonladığınızda, şunu kullanarak:
$ git clone git://some.host/path/to/repo.git
ya da benzeri, Git'in yaptığı son adım, esasen şudur git checkout master
. Yerel şube dışarı Bu kontroller master
-sadece sen yok olması yerel bir dalı master
.
Öte yandan, sen do uzaktan izleme şube adında var origin/master
sadece bunu klonlanmış çünkü.
Git sen demek olması gerektiğini tahmin: "Beni yeni bir yerel yapmak master
aynı işaret olarak uzaktan izleme taahhüt olduğunu origin/master
, ve eğer bunu yaparken, için ust baş ayarlamak master
için origin/master
."
Bu , sahip olmadığınız her dal için olur git checkout
. Git dalı yaratır ve ona karşılık gelen uzaktan izleme dalını "izler" (yukarı akış olarak sahip) yapar.
Ama bunun için işi değil yeni dallar, yani uzaktan izleme şube ile dalları henüz .
Eğer bir oluşturursanız yeni şube:
$ git checkout -b solaris
henüz yok origin/solaris
. Yerel solaris
kutu değil uzaktan izleme şube izlemek origin/solaris
mevcut değil çünkü.
Yeni şubeye ilk bastığınızda:
$ git push origin solaris
O oluşturur solaris
üzerinde origin
ve dolayısıyla da yaratır origin/solaris
kendi Git depo. Ama çok geç: Zaten bir yerel sahip solaris
olduğu hiçbir kaynak tarafı vardır . 3
Git'in bunu otomatik olarak yukarı akış olarak ayarlaması gerekmez mi?
Muhtemelen. "Kötü uygulanmış" ve dipnot 1'e bakın. Şu anda değiştirmek zor : Git kullanan milyonlarca 4 betik var ve bazıları da mevcut davranışına bağlı olabilir. Davranışı değiştirmek için yeni bir ana sürüm gerekir, nag-ware sizi bazı yapılandırma alanları ayarlamaya zorlar ve benzeri. Kısacası Git, kendi başarısının kurbanıdır: Bugün içinde yaptığı hatalar ne olursa olsun, ancak değişim ya çoğunlukla görünmez, açıkça çok daha iyi ya da zaman içinde yavaş yapılırsa düzeltilebilir.
Gerçek şu ki, kullanmadığınız veya sırasında kullanmadığınız sürece bugün değil . Mesajın size söylediği bu.--set-upstream
-u
git push
Bunu böyle yapmak zorunda değilsin. Yukarıda da belirttiğimiz gibi, bunu yapmak zorunda değilsiniz, ama diyelim ki bir yukarı akış istiyorsunuz . Daha önceki bir itme yoluyla solaris
üzerinde zaten dal oluşturdunuz origin
ve git branch
çıktınızın gösterdiği gibi, zaten yerel deponuza sahipsiniz origin/solaris
.
Sadece bunun için yukarı akış olarak ayarlamadınız solaris
.
İlk itme sırasında değil, şimdi ayarlamak için kullanın git branch --set-upstream-to
. --set-upstream-to
Alt komut gibi, varolan herhangi şube adını alır origin/solaris
ve bu diğer dalına cari şubesinin kaynak tarafı ayarlar.
Hepsi bu — hepsi bu — ama yukarıda belirtilen tüm bu çıkarımlara sahip. Bu, sadece koşabileceğiniz git fetch
, sonra etrafınıza bakabileceğiniz, sonra koşabileceğiniz git merge
veya git rebase
uygun şekilde koşabileceğiniz , sonra yeni taahhütler yapabileceğiniz ve git push
bir sürü ek karışıklık olmadan koşabileceğiniz anlamına gelir .
1 Dürüst olmak gerekirse, ilk uygulamanın hataya açık olduğu o zamanlar net değildi. Bu ancak her yeni kullanıcı her seferinde aynı hataları yaptığında netleşti. Şimdi "daha az fakir", bu "harika" demek değil.
2 "Asla" biraz güçlü, ama Git yeni başlayanlarının adımları ayırdığımda, özellikle de onlara git fetch
gerçekte ne yaptığını gösterebildiğimde ve sonra ne yapacağını git merge
veya ne git rebase
yapacaklarını görebildiklerinde , her şeyi çok daha iyi anladıklarını görüyorum .
3 İlk git push
olarak çalıştırırsanız git push -u origin solaris
—yani, -u
bayrağı eklerseniz — Git origin/solaris
, itme başarılı olursa (ve ancak) geçerli dalınız için yukarı akış olarak ayarlanır . Böylece tedarik etmelidir -u
üzerinde ilk itme. Aslında, daha sonraki herhangi bir itmede tedarik edebilirsiniz ve bu noktada yukarı akışı ayarlayacak veya değiştirecektir . Ama git branch --set-upstream-to
unuttuysan daha kolay olduğunu düşünüyorum .
4 Austin Powers / Dr Evil yöntemi ile basitçe "bir MILLLL-YUN" demekle ölçülmüştür.