Saya pengguna git bingung dengan percabangan lincah. Bagaimana saya melacak perubahan kecil?

32

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 logmasih menunjukkan bahwa komit dan defaultcabang 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 updatesetelah menarik untuk memindahkan masterbookmark 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?

Anton Barkovsky
sumber

Jawaban:

22

Secara pribadi, untuk skenario Anda, saya tidak akan repot-repot membuat cabang, kecuali jika saya sedang mengerjakan beberapa perubahan, yang masing-masing perlu diterima oleh pengembang inti.

Cukup tirukan repositori mereka dan bekerja di dalamnya, lalu buat permintaan tarik.

Jika saya menggunakan cabang maka saya lebih suka menggunakan cabang bernama. Mereka dirancang untuk tujuan yang tepat ini, di mana bookmark tidak. Saya tidak mengerti mengapa Anda menganggapnya berat.

Mercurial memiliki seluruh halaman di wiki mereka yang menggambarkan berbagai cara berbeda " Memangkas Cabang yang Mati ". Opsi "Menggunakan klon" harus memenuhi persyaratan Anda.

Untuk menjawab masalah Anda yang lebih spesifik ...

TortoiseHG dan hg log masih menunjukkan bahwa komit dan cabang default memiliki 2 kepala. Dan jika saya mengerti dengan benar, Anda tidak dapat menghapus komit dalam hg tanpa plugin tambahan.

Ini adalah kesalahan yang saya buat dengan Mercurial ketika saya masih baru di sana. Jangan takut dengan plugin tambahan itu. Beberapa dari mereka adalah alat yang sangat kuat dan seringkali mereka kemudian ditarik ke produk inti. Begitulah cara kerja Mercurial. Jika Anda memerlukannya untuk melakukan tugas tertentu, dapatkan dan gunakan.

Merevisi sejarah dianggap sebagai hal yang buruk di dunia Mercurial, sehingga produk vanilla tidak selalu memiliki semua yang seharusnya dimiliki oleh pengguna Git, tetapi ada banyak plugin untuk mereka yang ingin menggunakan aplikasi tetapi memiliki prioritas yang berbeda.

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.

Jangan khawatir tentang angka revisi. Mereka adalah masalah kenyamanan, tidak lebih. Kode hash adalah pengidentifikasi penting yang akan beralih dari repo ke repo. Angka revisi tidak konsisten di seluruh repositori. Lihat Hg Init untuk penjelasan yang bagus.

Angka revisi hanyalah jalan pintas yang berguna dan lebih mudah diingat ketika bekerja dengan satu repo.

Saya melakukan pembaruan setelah menarik untuk memindahkan bookmark master saya ke komit terbaru secara otomatis, tetapi saya tidak dapat menemukan cara untuk melakukannya di TortoiseHG.

Saat menggunakan TortoiseHG, gunakan Workbench daripada alat lainnya. Semuanya (hampir) ada di sana. Pembaruan ada dalam menu konteks revisi. Ini tidak selalu intuitif, tetapi ada panduan yang bagus di tautan di atas dan ketika Anda terbiasa, Anda akhirnya mengklik pergi dengan percaya diri meninggalkan.

pdr
sumber
Saya tentu saja melihat argumen sebelum cabang bernama yang tepat berarti bahwa sejarah pengeditan kurang diperlukan dalam hg
jk.
9

Rupanya ada 4 cara untuk menangani percabangan secara lincah. 1 dan 4 tampak benar-benar menggelikan bagi saya, cabang yang dinamai tampak kelas berat

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.

TortoiseHG dan hg log masih menunjukkan bahwa komit dan cabang default memiliki 2 kepala.

Yang merupakan alasan tepat untuk menggunakan cabang bernama bukannya membuang semuanya ke dalam default.

Dan jika saya mengerti dengan benar, Anda tidak dapat menghapus komit dalam hg tanpa plugin tambahan.

Anda tidak dapat menghapus apa pun di Mercurial sama sekali dan Anda tidak seharusnya menghapusnya . Anda dapat menggunakan hg striptetapi 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.

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.

Angka tidak berarti apa-apa. Anda dapat mengabaikan mereka jika mereka membingungkan Anda.

Saya melakukan pembaruan setelah menarik untuk memindahkan bookmark master saya ke komit terbaru secara otomatis, tetapi saya tidak dapat menemukan cara untuk melakukannya di TortoiseHG.

Saya belum pernah menggunakan TortoiseHG tetapi hg pull -uakan melakukan keduanya pulldan update.

Saya selalu menggunakan git sebelumnya, tetapi saya ingin berkontribusi pada python jadi sekarang saya harus belajar lincah dan saya merasa sangat frustasi.

Tidak apa-apa, banyak pengguna Mercurial merasakan hal yang sama tentang Git (termasuk saya).

pria yang sedih
sumber
6

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:

  • Anda dapat memeriksa apa yang Anda miliki dengan kepala hg heads, jika Anda melihat 2+ kepala di cabang bernama tunggal, lebih disukai bahwa mereka digabung. Itu mungkin tempat bookmark Anda .
  • Untuk menghilangkan revisi yang baru saja Anda buat, Anda bisa melakukannya hg rollback, tetapi saya kira ini bukan masalahnya.
  • Untuk menghapus bookmark lakukan saja hg bookmark --delete yourbookmark
  • Anda akan senang bahwa mudah untuk memotong cabang dalam sejarah. Lihatlah ekstensi Rebase dan operasi Strip .
  • Mercurial sudah dibundel dengan beberapa ekstensi, tetapi mereka tidak diaktifkan secara default . Masuk saja ke folder mana saja dan klik kanan di mana saja untuk mendapatkan menu konteks TortoiseHG, masuk ke Pengaturan Global dan kemudian Ekstensi: aktifkan ekstensi MQ dan ekstensi Rebase. Ini tidak merusak kompatibilitas antara repositori apa pun.
  • Sekarang Anda berada di sini, Anda dapat:
    • Strip di mana bookmark Anda mulai (ini mungkin memperbaiki masalah Anda)
    • Untuk visualisasi yang lebih mudah, mungkin Anda bisa mengubah kembali perubahan Anda di depan dan kemudian menghapusnya setelah itu. Saya baru saja menyebutkan rebase karena mungkin sesuatu yang berguna bagi Anda di lain waktu.

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 .

dukeofgaming
sumber
Tidak ada cara untuk menjamin bahwa semua salinan perubahan desentralisasi yang mencatat cabang bernama telah dihapus setelah dieksekusi 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.
Shelby Moore III
1

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.

bc.cam
sumber
-1

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.

Weijing Lin
sumber