Ketika Anda menjalankan git branch -r
mengapa api itu daftar origin/HEAD
? Sebagai contoh, ada repo jarak jauh di GitHub, katakanlah, dengan dua cabang: master dan fitur-mengagumkan. Jika saya lakukan git clone
untuk mengambilnya dan kemudian masuk ke direktori baru saya dan daftar cabang, saya melihat ini:
$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature
Atau apa pun urutannya (alpha? Saya memalsukan contoh ini untuk menjaga identitas repo yang tidak bersalah). Jadi, apa HEAD
bisnisnya? Apakah apa yang orang terakhir yang push
harus mereka HEAD
menunjuk pada saat mereka mendorong? Bukankah itu selalu menjadi apa pun yang mereka lakukan push
? HEAD
Ada yang bergerak ... mengapa saya peduli dengan apa yang seseorang HEAD
tunjuk pada komputer lain?
Saya hanya bisa menangani pelacakan jarak jauh dan semacamnya, jadi ini adalah kebingungan yang masih ada. Terima kasih!
EDIT: Saya mendapat kesan bahwa repo jarak jauh yang didedikasikan (seperti GitHub di mana tidak ada yang akan ssh dan bekerja pada kode itu, tetapi hanya menarik atau mendorong, dll) tidak dan tidak boleh memiliki KEPALA karena ada, pada dasarnya, tidak ada copy pekerjaan. Tidak begitu?
sumber
Jawaban:
@robinst benar.
Di git, Anda dapat memilih cabang mana yang diperiksa secara default (yaitu ketika Anda mengkloning). Secara default,
origin/HEAD
akan menunjuk pada itu.Pada GitHub, Anda dapat mengubahnya di pengaturan Admin untuk repo GitHub Anda. Anda juga dapat melakukannya dari command-line via
atau hapus semuanya melalui
Contoh . Lihatlah drop-down 'Switch Branches'.
trunk
dicentang, jadiorigin/HEAD
ikutitrunk
.sumber
origin
danotherremote/HEAD -> master
mengganggu saya. Menjalankan perintah Anda memperbaikinya untuk saya.Alasan repositori telanjang dapat memiliki HEAD, adalah karena repositori menentukan cabang mana yang awalnya diperiksa setelah klon repositori.
Biasanya, HEAD menunjuk ke master, dan itu adalah cabang yang diperiksa ketika orang mengkloning repositori. Menyetelnya ke cabang lain (dengan mengedit HEAD dalam repositori kosong) menghasilkan cabang yang sedang diperiksa di clone.
sumber
origin/HEAD
apakah referensi lokal benar? Apakah menghapusnya berpengaruh padaorigin
?origin/master
tidak mempengaruhi remote.Saya memiliki kesan yang sama persis seperti yang Anda katakan.
Dan saya bahkan tidak bisa menghapus asal / HEAD cabang pelacakan jarak jauh yang diklon dari github dengan melakukan
Ini tidak berpengaruh.
Dapatkah seseorang memberi tahu saya cara menghapus cabang pelacakan jarak asal / HEAD itu?
memperbarui
Meskipun saya tidak menemukan mengapa ada asal / KEPALA dibuat ketika klon dari github, saya menemukan cara untuk menghapusnya.
Versi baru dari git menyediakan
untuk menghapus pointer HEAD yang tidak berguna dari cabang pelacakan jarak jauh.
Dan kita juga bisa mengubah nama default 'asal' bodoh menjadi apa pun yang kita inginkan dengan menggunakan
Semoga ini bisa membantu. :)
sumber
git remote set-head origin -d
Anda benar bahwa mendorong repo jarak jauh bekerja lebih baik ketika mereka 'telanjang', yaitu ketika mereka tidak memiliki direktori yang berfungsi. Arsitektur Git dirancang untuk memperbarui oleh tambalan atau
pull
(fetch
), yang masuk akal dalam VCS yang didistribusikan. Seperti yang dikatakan dokumen di suatu tempat, mendorong ke cabang yang saat ini diperiksa dapat menghasilkan "hasil yang tidak terduga" .HEAD adalah bagian dari persyaratan untuk repositori yang valid. Tata Letak Repositori Git mengatakan, sebagian:
Jadi, Anda akan melihat KEPALA sebagai bagian dari daftar cabang, bahkan jika "itu tidak berarti banyak ..."
sumber
mkdir foobar; cd foobar; git init --bare; cd ..; git clone foobar foobar_clone; cd foobar_clone; touch file; git add file; git config --global user.email "[email protected]"; git config --global user.name "Your Name"; git commit -m "test"; git push origin master; cd ..; cd foobar; git config core.bare
output benar. Juga tidak ada salinan yang berfungsi dari file terdorong di repo foobar atas perintah tersebut.mkdir foobar; cd foobar; git init --bare; cd ..; git clone foobar foobar_clone; cd foobar_clone; touch file; git add file; git config user.email "[email protected]"; git config user.name "Your Name"; git commit -m "test"; git push origin master; cd ..; cd foobar; git config core.bare
output benar. Juga tidak ada salinan yang berfungsi dari file terdorong di repo foobar atas perintah tersebut.Jika "origin" adalah repositori jarak jauh, maka origin / HEAD mengidentifikasi cabang default pada repositori jarak jauh itu.
Contoh:
Perhatikan baris yang mengatakan "KEPALA cabang: master". Di sinilah repositori jarak jauh memungkinkan klien mengetahui cabang mana yang akan checkout secara default.
sumber
Selalu ada KEPALA yang menunjuk ke cabang yang sedang diperiksa di repo jarak jauh (yang mungkin atau mungkin tidak menjadi master). Bahkan repositori jarak jauh memiliki cabang saat ini. Biasanya itu adalah master, dan dari atas kepala saya, saya tidak bisa memikirkan alasan mengapa seseorang ingin mengubahnya, tetapi itu bisa diubah.
sumber
Dugaan saya adalah seseorang mendorong cabang dan menyebutnya KEPALA:
sumber