Apa itu "asal" di Git?


583

Ketika saya menjalankan:

git push origin branchname

Apa sebenarnya itu origindan mengapa saya harus mengetiknya sebelum nama cabang?


63
"origin" adalah nama repositori jarak jauh tempat Anda ingin mempublikasikan komitmen Anda. Secara konvensional, repositori jarak jauh default disebut "asal", tetapi Anda dapat bekerja dengan beberapa remote (dengan nama yang berbeda) sebagai waktu yang sama. Informasi lebih lanjut di sini (misalnya): gitref.org/remotes
Benoit Courtine

1
Perhatikan juga bahwa origin adalah repo "hulu": lihat stackoverflow.com/questions/2739376/…
VonC


Tetapi kemudian ketika menggunakan git fetch dan kemudian git branch -r cabang lokal diawali dengan origin / ugh: - / atlassian.com/git/tutorials/syncing/git-fetch
brat

Periksa file .git \ config yang berisi pemetaan alias ke URL, folder .git disembunyikan secara default.
Abhijeet Patel

Jawaban:


569

originadalah alias di sistem Anda untuk repositori jarak jauh tertentu. Ini sebenarnya bukan properti dari repositori itu.

Dengan melakukan

git push origin branchname

Anda mengatakan untuk mendorong ke originrepositori. Tidak ada persyaratan untuk menamai repositori jarak jauh origin: sebenarnya repositori yang sama dapat memiliki alias berbeda untuk pengembang lain.

Remote hanyalah sebuah alias yang menyimpan URL repositori. Anda dapat melihat URL apa yang menjadi milik setiap remote dengan menggunakan

git remote -v

Dalam pushperintah, Anda dapat menggunakan remote atau Anda dapat menggunakan URL secara langsung. Contoh yang menggunakan URL:

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

1
Bisakah satu remote menjadi alias untuk beberapa remote lainnya? Bagaimana jika saya ingin satu remote untuk mendorong ke beberapa remote lainnya? Misalnya, mendorong ke repo utama, dan mendorong ke repo cadangan? Apakah hal itu masuk akal untuk diinginkan dalam beberapa situasi? EDIT: Ada beberapa solusi di sini .
Yankee

1
Bagaimana jika saya menghilangkan kata kunci "asal"? Ketika kita mengatakan "git push", bukankah itu akan mendorong semua commit ke repositori jarak jauh? Menambahkan kata kunci "asal" tampaknya berlebihan.
Mugen

@Mugen Dalam dokumen untuk git pushAnda dapat melihat bahwa itu terlebih dahulu memeriksa konfigurasi untuk repositori itu (yang dapat Anda periksa dengan git config --list) untuk kunci yang disebut branch.<branchname>.remote. Jika itu tidak disetel, "defaultnya ke asal" - git-scm.com/docs/git-push
Kenmore

157

originadalah tidak nama repositori jauh. Ini lebih merupakan alias lokal yang ditetapkan sebagai kunci menggantikan URL repositori jarak jauh.

Ini menghindari pengguna harus mengetikkan seluruh URL jarak jauh ketika diminta mendorong.

Nama ini ditetapkan secara default dan untuk konvensi oleh Git saat melakukan kloning dari jarak jauh untuk pertama kalinya.

Nama alias ini bukan kode keras dan dapat diubah menggunakan command prompt berikut:

git remote rename origin mynewalias

Lihatlah http://git-scm.com/docs/git-remote untuk klarifikasi lebih lanjut.


1
Bagaimana jika saya menghilangkan kata kunci "asal"? Ketika kita mengatakan "git push", bukankah itu akan mendorong semua commit ke repositori jarak jauh? Menambahkan kata kunci "asal" tampaknya berlebihan.
Mugen

74

Git memiliki konsep "remote", yang hanya URL ke salinan lain dari repositori Anda. Ketika Anda mengkloning repositori lain, Git secara otomatis membuat remote bernama "asal" dan menunjuk ke sana.

Anda dapat melihat informasi lebih lanjut tentang remote dengan mengetik git remote show origin.


1
perintah git sangat membingungkan bagi pemula. Saya kira itu ada hubungannya dengan sejarah sistem kontrol versi ini. Jadi, pertanyaan: Alih-alih git remote show origin, mengapa tidak sederhana git show origin? Pasti ada alasan, apa itu? Terima kasih.
Stack0verflow

5
@ Stack0verflow: ini mungkin lebih baik ditanyakan sebagai pertanyaan baru sehingga orang dapat melakukan penelitian jika Anda penasaran. 'git show' sudah menjadi perintah lain yang menunjukkan komit, dan secara teknis tidak ada yang akan menghentikan Anda memiliki cabang bernama 'asal' selain memiliki asal yang disebut remote ...
Jason Malinowski


24

Sederhana! "origin" adalah apa yang Anda juluki repositori jarak jauh Anda ketika Anda menjalankan perintah seperti ini:

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

Sejak saat itu Git tahu bahwa "asal" menunjuk ke repositori tertentu (dalam hal ini repositori GitHub). Anda bisa menamainya "github" atau "repo" atau apa pun yang Anda inginkan.


19

Saya juga bingung dengan ini, dan di bawah ini adalah apa yang saya pelajari.

Saat Anda mengkloning repositori, misalnya dari GitHub:

  • originadalah alias untuk URL tempat Anda mengkloning repositori. Perhatikan bahwa Anda dapat mengubah alias ini.

  • Ada satu mastercabang di repositori jarak jauh (alias oleh origin). Ada juga mastercabang lain yang dibuat secara lokal.

Informasi lebih lanjut dapat ditemukan dari pertanyaan SO ini: Percabangan Git: master vs origin / master vs remote / origin / master


11

Ketika Anda mengkloning repositori git clone, itu secara otomatis membuat koneksi jarak jauh yang disebut originmenunjuk kembali ke repositori yang dikloning. Ini berguna untuk pengembang yang membuat salinan lokal dari repositori pusat karena menyediakan cara mudah untuk menarik perubahan ke atas atau mempublikasikan komit lokal. Perilaku ini juga mengapa sebagian besar proyek berbasis Git menyebut asal repositori pusatnya.



0

Dari https://www.git-tower.com/learn/git/glossary/origin :

Di Git, "origin" adalah nama singkatan untuk repositori jarak jauh tempat proyek awalnya dikloning. Lebih tepatnya, ini digunakan alih-alih URL repositori asli - dan dengan demikian membuat referensi lebih mudah.

Perhatikan bahwa asal tidak berarti nama "ajaib", tetapi hanya konvensi standar. Meskipun masuk akal untuk membiarkan konvensi ini tidak tersentuh, Anda dapat dengan mudah mengganti namanya tanpa kehilangan fungsionalitas apa pun.

Dalam contoh berikut, parameter URL ke perintah "clone" menjadi "origin" untuk repositori lokal yang dikloning:

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

Ketika Anda menyalin konten yang ditulis oleh orang lain, Anda harus menjelaskan bahwa Anda melakukannya, dan Anda harus selalu menyertakan tautan ke sumbernya. Kalau tidak, itu plagiarisme, dan itu alasan untuk menghapus jawabannya. Selain itu, jawaban Anda sudah diposting .
Fabio mengatakan Reinstate Monica

0

Jawaban lain mengatakan itu originadalah alias untuk URL repositori jarak jauh yang tidak sepenuhnya akurat. Perlu dicatat bahwa alamat yang dimulai dengan httpURL sedangkan alamat yang dimulai git@adalah URI atau Pengidentifikasi Sumber Daya Universal.

Semua URL adalah URI, tetapi tidak semua URI adalah URL.

Singkatnya, ketika Anda mengetik git remote add origin <URI>Anda memberi tahu git lokal Anda bahwa setiap kali Anda menggunakan kata originAnda sebenarnya berarti URI yang Anda tentukan. Anggap saja seperti variabel yang memegang nilai.

Dan seperti variabel, Anda dapat nama itu apa pun yang Anda inginkan (misalnya. github, heroku, destination, Dll).


0

remote (alias url repositori) → asal (alias hulu) → master (alias cabang);

  • remote, Tingkat yang sama seperti working directory, index, repository,

  • origin, peta cabang repositori lokal ke cabang repositori jarak jauh

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.