Saya selalu menggunakan git sebelumnya, tetapi saya ingin berkontribusi pada python jadi sekarang saya harus belajar lincah dan saya merasa sangat frustasi.
Jadi, saya telah membuat beberapa tambalan kecil dan saya ingin melacaknya sebagai komit di repositori lincah lokal saya. Rupanya ada 4 cara untuk menangani percabangan secara lincah . 1 dan 4 tampak sangat menggelikan bagi saya, cabang yang dinamai tampak kelas berat dan saya merasa saya tidak seharusnya menggunakannya untuk perbaikan cepat 1-commit, jadi saya menggunakan bookmark.
Sekarang, tambalan saya ditolak dan saya ingin menghapus salah satu cabang bookmark saya dari repositori saya. OK, di git saya hanya akan menghapus paksa cabang saya dan melupakannya, jadi saya menghapus bookmark saya dan sekarang saya memiliki masalah berikut:
TortoiseHG dan
hg log
masih menunjukkan bahwa komit dandefault
cabang memiliki 2 kepala. Dan jika saya mengerti dengan benar, Anda tidak dapat menghapus komit dalam hg tanpa plugin tambahan.Mercurial tidak hanya memiliki hash, tetapi juga angka revisi. Karena saya telah menambahkan beberapa komit saya sendiri, semua komit menarik setelah itu memiliki nomor revisi yang berbeda dari repo pusat utama.
Saya lakukan
hg update
setelah menarik untuk memindahkanmaster
bookmark saya ke komit terbaru secara otomatis, tetapi saya tidak dapat menemukan cara untuk melakukannya di TortoiseHG.
Apa yang saya lakukan salah? Apakah ini normal dan diharapkan dan haruskah saya mengabaikan masalah ini? Atau bagaimana saya bisa bekerja dengan cabang saya?
Di Mercurial, Anda tidak membuat cabang. Setiap komit secara efektif merupakan cabang, komit apa pun dapat memiliki banyak orang tua dan banyak anak. Jadi itu adalah empat cara berbeda untuk mengatur entitas yang sama.
Anda dapat memberi mereka nama yang berbeda, Anda tidak harus , tetapi itu ide yang bagus. Tidak ada yang berat tentang cabang bernama - itu hanya beberapa metadata tambahan. Saya pribadi lebih suka cabang bernama daripada yang lain dalam situasi apa pun.
Yang merupakan alasan tepat untuk menggunakan cabang bernama bukannya membuang semuanya ke dalam
default
.Anda tidak dapat menghapus apa pun di Mercurial sama sekali dan Anda tidak seharusnya menghapusnya . Anda dapat menggunakan
hg strip
tetapi tidak login - pada dasarnya Anda hanya memotong sebagian dari repo lokal Anda. Anda tidak dapat mendorongnya, dan jika Anda menarik dari repo yang memiliki cabang yang Anda cabut secara lokal, ia akan kembali.Angka tidak berarti apa-apa. Anda dapat mengabaikan mereka jika mereka membingungkan Anda.
Saya belum pernah menggunakan TortoiseHG tetapi
hg pull -u
akan melakukan keduanyapull
danupdate
.Tidak apa-apa, banyak pengguna Mercurial merasakan hal yang sama tentang Git (termasuk saya).
sumber
Bahkan ketika Mercurial dan Git serupa, mereka memiliki desain yang berbeda, mungkin perbedaan desain yang paling penting adalah bahwa dalam Mercurial memodifikasi sejarah tidak sefleksibel di git (karena agak tidak disarankan).
Jawaban singkat : tidak masalah jika Anda memiliki sedikit perubahan, Anda masih bisa menggunakan cabang. Jika Anda berpikir untuk menghapus cabang itu maka gunakan bookmark sehingga Anda dapat menghapusnya nanti dan menghapus perubahan setelahnya.
Pertama, mencoba menjelaskan sedikit hal yang Anda sebutkan:
1 dan 4 dianggap bercabang adalah karena setiap kali Anda melakukan Anda secara efektif membuat cabang yang tidak disebutkan namanya (jika ada komitmen lain pada saat yang sama di sumber Anda / repo yang diberkati), yang secara teknis merupakan cabang. Dalam metode 4 Anda membuat "kepala" baru sementara di metode 1 Anda tidak . Kepala seharusnya digabung. Saya setuju bahwa metode 1 agak konyol, tetapi beberapa tampaknya menyukainya ... untuk proyek-proyek kecil, saya kira.
Mengenai metode 2, itu bukan bahwa cabang-cabang itu berat, itu adalah bahwa mereka permanen . Anda tidak dapat menghapus cabang kecuali jika Anda menggunakan sesuatu seperti ekstensi strip. Sekali lagi, filosofi desain Mercurial tidak mengarah ke memodifikasi sejarah (tetapi sudah menjadi lebih baik pada saat itu).
Mengenai nomor revisi , itu hanya referensi lokal dan lebih dapat dibaca secara manusiawi bagi Anda untuk menggunakan semua perintah yang ada hubungannya dengan revisi. Jika Anda suka menggunakan hash, Anda masih bisa melakukannya. Angka revisi hanyalah jalan pintas dan diabaikan oleh Mercurial untuk operasi internal apa pun di antara repositori yang berbeda.
Sekarang, untuk menjawab pertanyaan Anda yang lain:
hg heads
, jika Anda melihat 2+ kepala di cabang bernama tunggal, lebih disukai bahwa mereka digabung. Itu mungkin tempat bookmark Anda .hg rollback
, tetapi saya kira ini bukan masalahnya.hg bookmark --delete yourbookmark
Juga, di git Anda dapat memiliki "cabang lokal pribadi" karena Anda harus mendorongnya secara eksplisit dan Anda dapat menghapusnya setelah itu. Di Mercurial Anda mendorong semua yang Anda miliki , namun, jika Anda ingin menghindari ini, Anda dapat menggunakan fitur Fase dan menandai serangkaian revisi sebagai rahasia . Revisi rahasia tidak akan didorong.
Akhirnya, Anda tidak melakukan kesalahan , hanya perlu diingat bahwa itu hanyalah alat yang berbeda yang dibangun dengan pola pikir yang sedikit berbeda, yang cukup banyak bermuara pada: memodifikasi sejarah (git) atau tidak mengubah sejarah (hg). Dalam Mercurial, lebih sulit menembak diri sendiri dengan memodifikasi sejarah (khususnya dengan Fase) dan itulah sebabnya beberapa orang lebih suka daripada git .
sumber
hg strip
. Saya kira orang bisa berpendapat hal yang sama tentang salinan desentralisasi nama-nama cabang Git, kecuali perbedaan yang bernama cabang memiliki ruang nama global dan nama cabang Git tidak. Dan banyak kepala ada karena nama cabang. Ini semacam kesalahan desain infeksius untuk VCS terdesentralisasi.Saya menemukan dengan lincah itu paling mudah untuk tidak khawatir tentang cabang. Saya hanya menemukan di mana dalam sejarah saya ingin mengedit dan membuat komit seperti yang diperlukan (alias cabang anonim). Kadang-kadang bookmark mungkin berguna jika saya harus melompat di antara kepala dalam konteks yang berbeda tetapi paling sering saya tidak peduli dengan mereka. Cabang yang dinamai OK untuk cabang yang berumur panjang (cabang bug-fix, cabang-proyek) tetapi untuk perbaikan 1- atau 2-commit, mereka bukan alat yang tepat untuk pekerjaan itu.
Trik dengan cabang anonim adalah mengatur fase mereka menjadi "rahasia" jika Anda tidak ingin mendorongnya yaitu jika Anda ingin membuatnya tetap lokal. Jika Anda tidak ingin mendorong mereka, tetapi Anda tidak ingin lagi komit berdasarkan pada mereka, Anda hanya melakukan sebuah "--close-cabang" di atas mereka yang berarti mereka tidak lagi muncul dalam daftar 'kepala' dan lincah akan berhenti mengeluh tentang banyak kepala di cabang itu.
sumber
Saya pikir kita bisa menggunakan bookmark bukan cabang; kita akan terus mendukung produk itu, dan menggabungkan dua cabang dalam jangka panjang akan menjadi sakit kepala besar.
sumber