Bisakah Anda menjelaskan apa yang salah dengan alur kerja ini?
$ 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'
Tidak git push
selalu mendorong ke repositori tempat saya dikloning?
Jawaban:
Ya, masalahnya adalah tidak ada komitmen dalam "bare". Ini adalah masalah dengan komit pertama saja, jika Anda membuat repo dalam urutan (bare, alice). Coba lakukan:
Ini hanya diperlukan pertama kali. Setelah itu harus berfungsi normal.
Seperti yang ditunjukkan Chris Johnsen, Anda tidak akan mengalami masalah ini jika push.default Anda disesuaikan. Saya suka upstream / pelacakan.
sumber
sudo apt-get upgrade git-core
dansudo apt-get upgrade git
dan menurut saya tidak diperlukan pembaruan.git --version
mengembalikan 1.7.3.1. Ada yang tahu apa yang hilang? Saya akui saatapt-get update
ini tidak bekerja untuk saya, tetapi itu tidak terlalu lama.matching
; mungkin Anda telahpush.default
menetapkan keupstream
/tracking
(ataucurrent
) di Anda~/.gitconfig
?git push origin master:master
untuk membuatnya eksplisit. Jika itu tidak berhasil, periksa untuk melihat di cabang mana Anda berada:git branch
mungkin Anda belum membuat komit pertama atau Anda membuat komit pada cabang selain master.Jika kamu:
itu akan mendorong ke repo telanjang.
Sepertinya repo alice Anda tidak melacak dengan benar.
Ini akan menampilkan remote dan cabang default.
Jika kamu
Anda harus mulai melacak remote dan cabang itu. Saya tidak yakin apakah opsi itu selalu di git.
sumber
Jawaban pertanyaan terkait ini memberikan solusi bagi saya ... itu hanya kesalahan bodoh:
Ingat untuk berkomitmen dulu!
https://stackoverflow.com/a/7572252
Jika Anda belum berkomitmen pada repo lokal Anda, tidak ada yang mendorong, tetapi pesan galat Git yang Anda dapatkan kembali tidak banyak membantu Anda.
sumber
adalah cara kanonik untuk mendorong semuanya ke repositori telanjang baru.
Cara lain untuk melakukan hal yang sama adalah membuat repositori baru Anda yang non-telanjang dan kemudian membuat klon kosong dengan
lalu gunakan
dalam repositori asli (non-telanjang).
sumber
git push --all ../test_repo
URL repo di akhir perintah;)Coba ini di
alice
repositori Anda (sebelum mendorong):Atau, konfigurasikan sebagai default untuk pengguna Anda
git config --global …
.git push
memang default untukorigin
repositori (yang biasanya repositori dari mana Anda mengkloning repositori saat ini), tapi itu tidak default untuk mendorong cabang saat ini — itu default untuk mendorong hanya cabang yang ada di repositori sumber dan repositori tujuan.The
push.default
variabel konfigurasi (lihat git-config (1) ) kontrol apagit push
akan mendorong bila tidak diberi “refspec” argumen (yaitu sesuatu setelah nama repositori). Nilai default memberikan perilaku yang dijelaskan di atas.Berikut adalah nilai yang mungkin untuk
push.default
:nothing
Ini memaksa Anda untuk memasok "refspec".
matching
(default)Ini mendorong semua cabang yang ada di repositori sumber dan repositori tujuan.
Ini sepenuhnya independen dari cabang yang saat ini sedang diperiksa.
upstream
atautracking
(Kedua nilai berarti hal yang sama. Yang kemudian tidak digunakan lagi untuk menghindari kebingungan dengan cabang "pelacakan jarak jauh". Yang pertama diperkenalkan pada 1.7.4.2, jadi Anda harus menggunakan yang terakhir jika Anda menggunakan Git 1.7.3.1. )
Ini mendorong cabang saat ini ke cabang yang ditentukan oleh konfigurasi "hulu".
current
Ini mendorong cabang saat ini ke cabang dengan nama yang sama di repositori tujuan.
Dua yang terakhir ini berakhir menjadi sama untuk kasus-kasus umum (misalnya bekerja pada master lokal yang menggunakan asal / master sebagai hulu), tetapi mereka berbeda ketika cabang lokal memiliki nama yang berbeda dari cabang "hulu":
Dengan
push.default
sama denganupstream
(atautracking
), push akan pergi keorigin
's induk cabang. Ketika itu sama dengancurrent
, push akan pergi keorigin
's quickfix cabang.The
matching
Pengaturan akan memperbaruibare
's Master dalam skenario Anda setelah telah ditetapkan. Untuk membangunnya, Anda bisa menggunakannyagit push origin master
sekali.Namun,
upstream
pengaturannya (atau mungkincurrent
) sepertinya lebih cocok untuk apa yang Anda harapkan akan terjadi, jadi Anda mungkin ingin mencobanya:(Sekali lagi, jika Anda masih menggunakan Git sebelum 1.7.4.2, Anda harus menggunakan
tracking
bukanupstream
).sumber
Saya menggunakan klien SourceTree git, dan saya melihat bahwa perintah commit / push awal mereka adalah:
sumber