Bagaimana cara menyetel referensi HEAD remote Git untuk mengarah ke sesuatu selain "master"?
Proyek saya memiliki kebijakan untuk tidak menggunakan cabang "master" (semua cabang memiliki nama yang bermakna). Selain itu, repositori master kanonik hanya dapat diakses melalui ssh: //, tanpa akses shell (seperti GitHub atau Unfuddle).
Masalah saya adalah bahwa repositori jarak jauh masih memiliki referensi HEAD ke refs / heads / master, tetapi saya membutuhkannya untuk menunjuk ke cabang yang berbeda. Ini menyebabkan dua masalah:
Saat mengkloning repo, ini dia,
peringatan: HEAD jarak jauh mengacu pada ref yang tidak ada, tidak dapat melakukan pembayaran.
Itu membingungkan dan tidak nyaman.
Browser kode berbasis web bergantung pada HEAD sebagai dasar untuk menjelajahi pohon. Saya perlu HEAD untuk menunjuk ke cabang yang valid.
sumber
Jawaban:
Ada pertanyaan yang hampir sama di GitHub setahun yang lalu.
Idenya adalah mengganti nama cabang master:
(a "
git-symbolic-ref HEAD refs/head/published
" tidak akan disebarkan ke repo jarak jauh)Ini mirip dengan " Bagaimana cara saya menghapus origin / master di Git ".
Seperti yang dikatakan di utas ini : (penekanan dari saya)
(yang merupakan inti dari pertanyaan Anda, saya tahu;))
Mungkin satu-satunya cara adalah dengan "publikasi untuk orang miskin" , di mana Anda:
Tapi itu akan melibatkan akses tulis ke server, yang tidak selalu memungkinkan.
Seperti yang saya jelaskan di " Git: Cara yang benar untuk mengubah Cabang Aktif di repositori kosong? ", Tidak
git remote set-head
akan mengubah apa pun di repo jarak jauh.Itu hanya akan mengubah cabang pelacakan jarak jauh yang disimpan secara lokal di repo lokal Anda, di
remotes/<name>/HEAD
.sumber
-f
(--force
). Saya telah mengedit jawabannya sesuai dengan itu. Maka jawaban yang Anda rujuk memang menggunakan opsi yang sama.Pembaruan: Ini hanya bekerja untuk salinan lokal dari repositori ("klien"). Silakan lihat komentar orang lain di bawah ini.
Dengan versi terbaru git (Feb 2014), prosedur yang benar adalah:
git remote set-head $REMOTE_NAME $BRANCH
Jadi misalnya, mengalihkan head pada remote
origin
ke cabangdevelop
adalah:git remote set-head origin develop
sumber
git checkout -b default; git push origin HEAD; git remote set-head origin default
. Anda kemudian dapat memeriksa perubahan lokal dengancat .git/refs/remotes/origin/HEAD
(seharusnyaref: refs/remotes/origin/default
), dan kurangnya perubahan jarak jauh dengangit remote show origin
(akan tetap apa pun itu sebelum Anda menambahkan cabang default).Karena Anda menyebutkan GitHub, untuk melakukannya di situs mereka cukup masuk ke proyek Anda, lalu ...
admin > Default Branch > (choose something)
Selesai.
sumber
Lihat: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html
Ini menetapkan cabang default di repositori git. Anda dapat menjalankan ini di repositori telanjang atau cermin.
Pemakaian:
sumber
(Pada dasarnya sudah ada pertanyaan yang sama " buat referensi simbolik git di repositori jarak jauh ", yang tidak menerima jawaban universal.)
Tetapi ada jawaban khusus untuk berbagai git "farms" (di mana banyak pengguna dapat mengelola repo git melalui antarmuka terbatas: melalui http dan ssh): http://Github.com , http://Gitorious.org , http: / /repo.or.cz , Girar ( http://git.altlinux.org ).
Jawaban khusus ini mungkin berguna bagi mereka yang membaca halaman ini dan memikirkan tentang layanan khusus ini.
$ ssh git.alt help | fgrep branch default-branch <path to git repository> [<branch>] $
misalnyassh git.alt default-branch packages/autosshd.git sisyphus
untuk mengubah HEAD di repo jarak jauhautosshd.git
agar mengarah kesisyphus
cabang.sumber
Jika Anda memiliki akses ke repo jarak jauh dari shell, cukup masuk ke .git (atau dir utama jika itu adalah repo kosong) dan ubah file HEAD agar mengarah ke head yang benar. Misalnya, secara default selalu berisi 'refs: refs / heads / master', tetapi jika Anda membutuhkan foo sebagai HEAD, cukup edit file HEAD dan ubah isinya menjadi 'refs: refs / heads / foo'.
sumber
myrepo.git
. Isi file HEAD di direktori yang diberikan diubah dariref: refs/heads/master
menjadiref: refs/heads/mainline
. Sekarang, ketika saya mencoba untuk mengkloning repositori di kotak lokal saya, itu masih mengarah ke master. Saya menjalankangit clone ssh://[email protected]/myrepo
perintah. Ada ide untuk perilaku seperti itu?git version 1.7.1
& Versi klien Git:git version 1.9.4.msysgit.2
Anda dapat membuat cabang master yang terpisah hanya dengan menggunakan perintah porcelain Git:
Itu memberi kita cabang utama dengan pesan kasar (Anda mungkin ingin lebih sopan). Sekarang kita membuat cabang "asli" kita (sebut saja trunk untuk menghormati SVN) dan memisahkannya dari master :
Hei, presto! gitk --all akan menampilkan master dan trunk tanpa tautan di antara keduanya.
"Ajaib" di sini adalah --amend menyebabkan git commit untuk membuat komit baru dengan induk yang sama dengan HEAD saat ini, lalu buat HEAD mengarah ke sana. Tetapi HEAD saat ini tidak memiliki induk karena itu adalah komit awal dalam repositori, jadi HEAD baru juga tidak mendapatkannya, membuatnya terlepas satu sama lain.
Komitmen HEAD lama tidak dihapus oleh git-gc karena refs / heads / master masih menunjuk ke sana.
The --allow-kosong bendera hanya diperlukan karena kita melakukan sebuah pohon yang kosong. Jika ada beberapa git add setelah git rm maka itu tidak diperlukan.
Sebenarnya, Anda bisa membuat cabang yang terpisah kapan saja dengan membuat percabangan komit awal di repositori, menghapus pohonnya, menambahkan pohon yang terlepas, lalu melakukan git komit --amend .
Saya tahu ini tidak menjawab pertanyaan tentang bagaimana memodifikasi cabang default pada repositori jarak jauh, tetapi ini memberikan jawaban yang jelas tentang cara membuat cabang yang terpisah.
sumber
git fetch git:[email protected]:foo remote-branch-name && git checkout -b detached-branch FETCH_HEAD
akan menambahkan cabang barudetached-branch
yang cocok dengan cabangremote-branch-name
di remotegit:[email protected]:foo
. Tentu saja, "remote" bisa menjadi tempat penyimpanan di sistem file lokal yang telah Anda siapkan sebelumnya.Pertama, buat cabang baru yang ingin Anda jadikan default, misalnya:
$>git branch main
Selanjutnya, dorong cabang itu ke asal :
$>git push origin main
Sekarang ketika Anda masuk ke akun GitHub Anda, Anda dapat pergi ke repositori Anda dan memilih Pengaturan> Cabang Default dan pilih " utama ."
Kemudian, jika Anda memilih demikian, Anda dapat menghapus cabang master:
$>git push origin :master
sumber
git symbolic-ref
pada shell jarak jauh atau sebaliknya dapat mengubah file teks yang dipanggilHEAD
dalam direktori root repositori jarak jauh.Terkait dengan pertanyaan itu, saya berakhir di sini ketika mencari:
Bagaimana cara membuat repo lokal mengetahui cabang default yang diubah di GitHub
Untuk kelengkapan, menambahkan jawaban:
sumber
Untuk orang-orang gitolite, gitolite mendukung perintah yang disebut - tunggu -
symbolic-ref
. Ini memungkinkan Anda untuk menjalankan perintah itu dari jarak jauh jika Anda memiliki izin W (tulis) ke repo.sumber
Sederhana, cukup masuk ke akun GitHub Anda dan di sisi paling kanan di menu navigasi pilih Pengaturan , di Tab Pengaturan pilih Cabang Default dan kembali ke halaman utama repositori Anda yang melakukan trik untuk saya.
sumber