Neden bu çıplak depoya itemiyorum?


283

Bu iş akışında neyin yanlış olduğunu açıklayabilir misiniz?

$ git init --bare bare
Initialized empty Git repository in /work/fun/git_experiments/bare/
$ git clone bare alice
Cloning into alice...
done.
warning: You appear to have cloned an empty repository.
$ cd alice/
$ touch a
$ git add a
$ git commit -m "Added a"
[master (root-commit) 70d52d4] Added a
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
$ git push
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to '/work/fun/git_experiments/bare'

Klonladığım git pushdepoya her zaman itmiyor mu?


İtmek için şube belirtmemelisiniz?
Rekin

3
bir klondan sonra değil !!! sorun çözüldükten sonra, harika çalışıyor ve şube belirtmeye gerek yok ... sadece boş bir deponun bu ilk kasasında ÇOK ÇOK can sıkıcı olan bu meydana gelir ... onlar bu sorunu düzeltmek gerekir.
Dean Hiller

Umarım bu yazı yukarıda yapmaya çalışırken birileri için yararlı olacaktır- samranga.blogspot.com/2015/07/… Söz konusu hata, zaten yerel olarak mevcut olan bir projeden gitBitBucket deposu oluşturmaya çalışıldığında bile ortaya çıkabilir
Samitha Chathuranga

Yanıtlar:


483

Evet, sorun "çıplak" ta hiçbir taahhüt olmamasıdır. Depoları sırayla (çıplak, alice) oluşturursanız, bu yalnızca ilk işlemle ilgili bir sorundur. Yapmayı dene:

git push --set-upstream origin master

Bu sadece ilk kez gerekli olacaktır. Daha sonra normal çalışmalıdır.

Chris Johnsen'in belirttiği gibi, push.default'unuz özelleştirilirse bu sorunla karşılaşmazsınız. Memba / takip etmeyi seviyorum.


1
Yapıyorum sudo apt-get upgrade git-coreve sudo apt-get upgrade gitgüncelleme gerekmediğini düşünüyorum. git --version1.7.3.1. Neyin eksik olduğu hakkında bir fikrin var mı? Kabul ediyorum şu anda apt-get updatebenim için çalışmıyor, ama çok uzun zaman önce işe yaramadı.
ripper234

1
@ ripper234: git'in şu anki sürümü 1.7.5.3. Bu sorunla yaşayabilir, farklı bir iş akışı kullanabilir veya en son git debian / ubuntu ambalajı olmadan manuel olarak kurabilirsiniz.
Seth Robertson

Ah, yazılımın paketlenmeden önce biraz zaman aldığını unutuyorum. Windows'dan gelen bir linux noob'um ve en yeni sürümü yüklemek için burayı tıklayın.
ripper234

9
“Son sürümde bu sorun yok” ile ilgili: Son sürümlerde bile, push'ların varsayılanı değişmemiş gibi görünüyor matching; belki de / (veya ) olarak push.defaultayarladınız ? upstreamtrackingcurrent~/.gitconfig
Chris Johnsen

4
git push origin master:masterAçık hale getirmeye çalışın . Bu işe yaramazsa, hangi dalda olduğunuzu kontrol edin: git branchbelki de ilk taahhüdü yapmadınız veya bu taahhüdü ustadan başka bir dalda yaptınız.
Seth Robertson

43

Eğer sen:

 git push origin master

çıplak repoya itecek.

Alice repo doğru izlemiyor gibi görünüyor.

cat .git/config

Bu, varsayılan uzaktan kumandayı ve dalı gösterir.

Eğer sen

 git push -u origin master

Uzaktan kumandayı ve şubeyi izlemeye başlamalısınız. Bu seçeneğin her zaman git içinde olup olmadığından emin değilim.


30

Bu sorunun cevabı benim için bir çözüm sağladı ... bu sadece aptalca bir hataydı:

Önce taahhüt etmeyi unutma!

https://stackoverflow.com/a/7572252

Yerel repo'nuzu henüz taahhüt etmediyseniz, itmeniz gereken bir şey yoktur, ancak geri aldığınız Git hata mesajı size çok fazla yardımcı olmaz.


17
git push --all

her şeyi yeni bir çıplak depoya aktarmanın kanonik yoludur.

Aynı şeyi yapmanın başka bir yolu da yeni, çıplak olmayan deponuzu oluşturmak ve sonra çıplak bir klon yapmaktır.

git clone --bare

sonra kullan

git remote add origin <new-remote-repo>

orijinal (çıplak olmayan) depoda.


... yani cevabı düşürdün mü? Bu ise yeni ve çıplak depo için her şeyi itmek standart yolu. Sizin için işe yaramadıysa, başka bir sorun var.
ebneter

Haklısın, muhtemelen yapmamalıydım, biliyorum sadece yardım etmeye çalışıyorsun. Eğer düzenlerseniz downvote'umu geri alacağım.
ripper234

Teşekkürler, aynı görevi gerçekleştirmek için başka bir yolla düzenledi.
ebneter

Cevabınız bana yardımcı oldu;) Ama komutun sonunda, yol şu şekilde mevcut olmalıdır: git push --all ../test_repokomutun sonunda repo URL'si;)
Metafaniel

@Metafaniel Bu, nasıl ayarladığınıza bağlıdır. Yerel deponuzda uzaktan kumanda doğru yapılandırılmışsa, "git push --all" olduğu gibi çalışmalıdır.
ebneter

7

Bunu alicedeponuzda (itmeden önce) deneyin :

git config push.default tracking

Veya, kullanıcılarınız için varsayılan olarak yapılandırın git config --global ….


git pushvarsayılan olarak origindepoya (normalde geçerli havuzu klonladığınız havuzdur), ancak geçerli dalı itmek için varsayılan olarak kullanılmaz; yalnızca hem kaynak havuzunda hem de hedef depoda bulunan dalları itmek için varsayılan olarak kullanılır.

push.defaultYapılandırma değişkeni (bkz git-config (1) ) Ne kontrolleri git push(bir depo adından sonra yani şey) herhangi bir “refspec” argümanları verilen değilken itecektir. Varsayılan değer, yukarıda açıklanan davranışı verir.

İşte olası değerler push.default:

  • nothing
    Bu sizi bir “refspec” sağlamaya zorlar.

  • matching(varsayılan)
    Bu , hem kaynak havuzda hem de hedef depoda bulunan tüm dalları iter .
    Bu, şu anda kullanıma alınmış olan şubeden tamamen bağımsızdır.

  • upstreamveya tracking
    (Her iki değer de aynı anlama gelir. Daha sonra “uzaktan izleme” dalları ile karışıklığı önlemek için kullanımdan kaldırılmıştır. Birincisi 1.7.4.2'de tanıtılmıştır, bu nedenle Git 1.7.3.1 kullanıyorsanız ikincisini kullanmanız gerekecektir. )
    Bunlar, geçerli dalı "yukarı akış" yapılandırmasıyla belirtilen dalı yönlendirir.

  • current
    Bu, geçerli dalı hedef depodaki aynı addaki şubeye doğru iter.

    Bu son ikisi yaygın durumlar için aynıdır (örneğin , yukarı akış olarak orijin / master kullanan yerel master üzerinde çalışmak ), ancak yerel şubenin "upstream" şubesinden farklı bir adı olduğunda farklıdırlar:

    git checkout master
    # hack, commit, hack, commit
    
    # bug report comes in, we want a fix on master without the above commits
    
    git checkout -b quickfix origin/master  # "upstream" is master on origin
    # fix, commit
    git push
    

    İle push.defaulteşit upstream(veya tracking), itme gideceğini origin'nin ana dal. O eşit olduğunda current, itme gideceğini origin'ın QuickFix dalı.

matchingAyar güncelleyecektir bare'ın usta o kurulduktan kez senaryoda. Bunu kurmak için bir git push origin masterkez kullanabilirsiniz .

Ancak, upstreamayar (veya belki current) gerçekleşmesini beklediğiniz şey için daha iyi bir eşleşme olabilir, bu yüzden denemek isteyebilirsiniz:

# try it once (in Git 1.7.2 and later)
git -c push.default=upstream push

# configure it for only this repository
git config push.default upstream

# configure it for all repositories that do not override it themselves
git config --global push.default upstream

(Yine, 1.7.4.2'den önce bir Git kullanıyorsanız, trackingbunun yerine kullanmanız gerekecektir upstream).


1

SourceTree git istemcisini kullanıyorum ve ilk komut / push komutunun olduğunu görüyorum:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags --set-upstream origin master:master
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.