Cukup sering, Git dan Rails terlihat seperti sihir ... seperti pada bab pertama buku Tutorial Rails 3 , ia berbicara tentang Git:
git remote add origin [email protected]:peter/first_app.git
git push origin master
dan cukup banyak mengatakan "itu hanya bekerja" tanpa mengatakan terlalu banyak tentang apa mereka dan mulai berbicara tentang percabangan. Pencarian di internet menunjukkan bahwa git remote add
menambahkan "nama pendek", seperti origin
, dan itu bisa berupa nama apa pun, yang seperti alias ke URL. Dan origin
adalah jalan yang biasa di mana repo remote menunjuk ke. (di http://git-scm.com/book/en/Git-Basics-Working-with-Remotes di bawah "Menambahkan Repositori Jarak Jauh")
Jadi mengapa URL bukan git://[email protected]/peter/first_app.git
tetapi di sintaks lain - sintaks apa itu? Kenapa harus diakhiri .git
? Saya mencoba tidak menggunakan .git
pada akhirnya dan berfungsi juga. Jika tidak .git
, apa lagi itu? The git
di [email protected]
tampaknya menjadi akun pengguna di server git?
Juga, mengapa itu perlu sangat verbose untuk digunakan git push origin master
? Tidak bisakah defaultnya menjadi asal dan master? Saya menemukan bahwa pertama kali, origin master
diperlukan, tetapi setelah mengedit kecil dan komit, maka git push
semua itu perlu (tidak perlu origin master
). Bisakah seseorang yang tahu apa yang sedang terjadi memberikan perincian?
Kadang-kadang rasanya seperti banyak sihir tanpa penjelasan ... dan kadang-kadang orang yang menggunakannya begitu percaya diri dan ketika ditanya mengapa, tidak bisa menjelaskannya, dan merespons dengan sesuatu seperti "begitulah adanya". Terkadang sangat praktis dan pragmatis. Tidak buruk untuk menjadi praktis, tetapi mungkin tidak praktis sampai tidak tahu apa yang sedang terjadi.
[email protected]:peter/first_app.git
adalahscp
sintaks gaya untuk URL ssh di git. Satu hal lain adalah bahwa, secara default, konfigurasi hulumaster
tidak memengaruhi perilakugit push
kecuali jika Anda telahpush.default
menyetel ketracking
(atauupstream
dalam versi yang lebih baru) - Saya melakukan posting blog tentang sumber kebingungan ini: longair.net/blog/2011 /push.default
konfigurasi hulu akan digunakan untuk menemukan remote default saat Anda gunakangit push
, tetapi tidak akan memengaruhi pemetaan referensi.Pembaruan: perhatikan bahwa jawaban yang saat ini diterima melanggengkan kesalahpahaman umum tentang perilaku
git push
, yang belum diperbaiki meskipun ada komentar yang menunjukkannya.Ringkasan Anda tentang apa itu remote - seperti nama panggilan untuk URL repositori - benar.
Dua URL yang Anda sebutkan menunjukkan bahwa dua protokol transport yang berbeda harus digunakan. Yang diawali dengan
git://
adalah untuk protokol git, yang biasanya hanya digunakan untuk akses read-only ke repositori. Yang lain[email protected]:peter/first_app.git
,, adalah salah satu cara berbeda untuk menentukan akses ke repositori melalui SSH - ini adalah "scp-style syntax" yang dijelaskan dalam dokumentasi . Bahwa nama pengguna dalam sintaks scp-stylegit
adalah karena cara GitHub berurusan dengan mengidentifikasi pengguna - pada dasarnya nama pengguna tersebut diabaikan, dan pengguna diidentifikasi berdasarkan pada pasangan kunci SSH yang mereka gunakan untuk otentikasi.Adapun verbositas
git push origin master
, Anda telah memperhatikan bahwa setelah dorongan pertama, Anda bisa melakukannyagit push
. Ini karena serangkaian default yang sulit diingat tetapi umumnya membantu :)remote.master.url
kasus Anda) digunakan. Jika itu tidak diatur, makaorigin
digunakan.master
.master:my-experiment
, Dll.) Yang ditentukan, maka git default untuk mendorong setiap cabang lokal yang memiliki nama yang sama dengan cabang pada remote. Jika Anda hanya memiliki cabang bernamamaster
sama antara repositori dan yang jauh, itu akan sama dengan mendorong Andamaster
ke remotemaster
.Secara pribadi, karena saya cenderung memiliki banyak cabang topik (dan seringkali beberapa remote) saya selalu menggunakan formulir:
... untuk menghindari sengaja mendorong cabang lain.
Dalam membalas komentar Anda pada salah satu jawaban yang lain, kedengarannya bagi saya seolah-olah sedang belajar tentang git dengan cara top-down sangat efektif - Anda telah menemukan bahwa default bekerja, dan pertanyaan Anda bertanya tentang mengapa;) Untuk lebih serius, git bisadigunakan pada dasarnya hanya sebagai SVN, tetapi mengetahui sedikit tentang remote dan cabang berarti Anda dapat menggunakannya jauh lebih fleksibel dan ini benar-benar dapat mengubah cara Anda bekerja menjadi lebih baik. Komentar Anda tentang kursus semester membuat saya memikirkan sesuatu yang dikatakan Scott Chacon dalam wawancara podcast - siswa diajarkan tentang semua jenis alat dasar dalam ilmu komputer dan rekayasa perangkat lunak, tetapi sangat jarang mengontrol versi. Sistem kontrol versi terdistribusi seperti git dan Mercurial sekarang sangat penting, dan sangat fleksibel, sehingga layak untuk mengajarkan kursus pada mereka untuk memberi orang landasan yang baik.
Pandangan saya adalah bahwa dengan
git
, kurva pembelajaran ini benar-benar layak - bekerja dengan banyak cabang topik, menggabungkannya dengan mudah, dan mendorong dan menariknya di antara repositori yang berbeda akan sangat berguna sekali setelah Anda menjadi percaya diri dengan sistem. Sangat disayangkan bahwa:sumber
Lihat sintaks untuk menambahkan repo jarak jauh.
Contoh:
Mari kita membedah perintah:
git remote ini digunakan untuk mengelola server Pusat Anda untuk hosting repositori git Anda.
Mungkin Anda menggunakan Github untuk hal-hal repositori pusat Anda. Saya akan memberikan contoh dan menjelaskan git add terpencil asal perintah
Misalkan saya bekerja dengan GitHub dan BitBucket untuk server pusat untuk repositori git dan telah membuat repositori pada kedua situs web untuk proyek aplikasi pertama saya .
Sekarang jika saya ingin mendorong perubahan saya ke kedua server git ini maka saya perlu memberi tahu git bagaimana mencapai repositori sentral ini. Jadi saya harus menambahkan ini,
Untuk GitHub
Dan Untuk BitBucket
Saya telah menggunakan dua variabel (sejauh ini mudah bagi saya untuk memanggil mereka variabel) gh_origin (gh FOR GITHUB) dan bb_origin (bb untuk BITBUCKET) hanya untuk menjelaskan Anda, kami dapat memanggil asal apa pun yang kami inginkan.
Sekarang setelah membuat beberapa perubahan, saya harus mengirim (mendorong) semua perubahan ini ke repositori pusat sehingga pengguna lain dapat melihat perubahan ini. Jadi saya menelepon
Mendorong ke GitHub
Mendorong ke BitBucket
gh_origin memegang nilai https://github.com/user/first-app-git.git dan bb_origin memegang nilai https: //[email protected]/user/first-app-git.git
karena setiap kali saya perlu mengirim perubahan kode saya, saya perlu menggunakan kata-kata ini alih-alih mengingat atau mengetik URL untuk hal yang sama.
Sebagian besar waktu Anda tidak akan melihat apa pun kecuali dari asal karena sebagian besar kali Anda akan berurusan dengan hanya satu repositori pusat seperti Github atau BitBucket misalnya.
sumber
Di
.git
akhir nama repositori hanyalah sebuah konvensi. Biasanya, pada repositori server git disimpan dalam direktori yang bernamaproject.git
. Klien dan protokol git menghormati konvensi ini dengan mengujiproject.git
kapan hanyaproject
ditentukan.git://[email protected]/peter/first_app.git
bukan url git yang valid. repositori git dapat diidentifikasi dan diakses melalui berbagai skema url yang ditentukan di sini .[email protected]:peter/first_app.git
adalahssh
url yang disebutkan di halaman itu.git
fleksibel. Ini memungkinkan Anda untuk melacak cabang lokal Anda terhadap hampir semua cabang repositori apa pun. Sementaramaster
(cabang default lokal Anda) pelacakanorigin/master
(cabang default jauh) adalah situasi yang populer, itu tidak universal. Sering kali Anda mungkin tidak ingin melakukan itu. Inilah sebabnya mengapa yang pertamagit push
begitu verbose. Ini memberitahu git apa yang harus dilakukan denganmaster
cabang lokal ketika Anda melakukan agit pull
atau agit push
.Default untuk
git push
dangit pull
berfungsi dengan remote cabang saat ini. Ini adalah standar yang lebih baik daripada master asal. Cara git push menentukan ini dijelaskan di sini .git
cukup elegan dan mudah dipahami tetapi ada kurva belajar yang harus dijalani.sumber
git push
tidak menggunakan variabel konfigurasi yang diaturgit branch/checkout --track
untuk menentukan remote ref mana yang harus ditekan. Anda benar bahwa git pull memang menggunakan ini.Git remote tambahkan asal:
Ini memusatkan kode sumber Anda ke proyek lain. Ini dikembangkan berdasarkan Linux, menyelesaikan open source dan membuat kode Anda berguna bagi pengguna git lain. Kami menyebutnya sebagai referensi
Dorong kode Anda ke repositori git menggunakan url jarak jauh dari hub git.
sumber