Apa Perbedaan Antara Lincah dan Git?

I've telah menggunakan git untuk beberapa waktu sekarang pada Windows (dengan msysGit) dan aku suka ide didistribusikan kontrol sumber. Baru-baru ini saya've telah mencari Mercurial (hg) dan itu terlihat menarik. Namun, saya dapat't membungkus kepala saya sekitar perbedaan antara hg dan git.

Telah ada yang membuat sisi-by-side perbandingan antara git dan hg? I'm tertarik untuk mengetahui apa yang berbeda hg dan git tanpa harus melompat ke fanboy diskusi.

Larutan

Artikel ini mungkin dapat membantu:

Edit: Membandingkan Git dan Lincah untuk selebriti tampaknya menjadi tren. Berikut ini's satu lagi:

Komentar (1)

Saya bekerja pada Mercurial, tetapi pada dasarnya saya percaya kedua sistem yang setara. Mereka berdua bekerja sama dengan abstraksi: serangkaian snapshot (set perubahan) yang membuat sejarah. Masing-masing changeset yang tahu di mana itu berasal dari (orang tua changeset) dan dapat memiliki banyak anak set perubahan. Baru-baru ini hg-git ekstensi menyediakan dua arah jembatan antara Lincah dan Git dan semacam menunjukkan titik ini.

Git memiliki fokus yang kuat pada bermutasi ini sejarah grafik (dengan semua konsekuensi yang memerlukan) sedangkan Mercurial tidak mendorong menulis ulang sejarah, tapi itu's mudah untuk melakukan pula dan konsekuensi dari melakukan hal ini adalah persis apa yang harus anda harapkan mereka untuk menjadi (yaitu, jika saya mengubah changeset yang sudah anda miliki, klien anda akan melihat itu sebagai baru jika anda tarik dari saya). Jadi Mercurial memiliki bias terhadap non-destruktif perintah.

Adapun ringan cabang, maka Mercurial telah didukung repositori dengan beberapa cabang sejak..., selalu saya pikirkan. Git repositori dengan beberapa cabang persis bahwa: beberapa menyimpang helai pengembangan dalam satu repositori. Git kemudian menambahkan nama ke helai ini dan memungkinkan anda untuk query nama-nama ini dari jarak jauh. The Bookmark ekstensi untuk Mercurial menambahkan nama-nama lokal, dan dengan Lincah 1.6, anda dapat memindahkan bookmark ini sekitar ketika anda tekan/tarik..

Saya menggunakan Linux, tapi rupanya TortoiseHg lebih cepat dan lebih baik dari Git setara pada Windows (karena penggunaan yang lebih baik dari yang miskin Windows filesystem). Kedua http://github.com dan http://bitbucket.org menyediakan hosting online, layanan di Bitbucket lebih besar dan responsif (saya belum't mencoba github).

Saya memilih Mercurial karena terasa lebih bersih dan elegan-saya menunda oleh shell/Perl/Ruby script yang saya punya dengan Git. Cobalah mengambil mengintip di git-instaweb.sh file jika anda ingin tahu apa yang saya maksud: ini adalah shell script yang menghasilkan Ruby script, yang saya pikir berjalan di webserver. Shell script menghasilkan shell script untuk peluncuran pertama Ruby script. Ada juga sedikit Perl, untuk mengukur baik.

Aku suka blog post yang membandingkan Lincah dan Git dengan James Bond dan MacGyver -- Mercurial entah bagaimana lebih rendah dari Git. Tampaknya bagi saya, bahwa orang-orang yang menggunakan Mercurial tidak mudah terkesan. Hal ini tercermin dalam bagaimana setiap sistem melakukan apa Linus digambarkan sebagai "keren yang menggabungkan PERNAH!". Di Git anda dapat menggabungkan dengan aplikasi yang terkait repositori dengan melakukan:

git fetch 
GIT_INDEX_FILE=.git/tmp-index git-read-tree FETCH_HEAD
GIT_INDEX_FILE=.git/tmp-index git-checkout-cache -a -u
git-update-cache --add -- (GIT_INDEX_FILE=.git/tmp-index git-ls-files)
cp .git/FETCH_HEAD .git/MERGE_HEAD
git commit

Perintah-perintah tersebut terlihat sangat misterius di mata saya. Dalam Mercurial kita lakukan:

hg pull --force 
hg merge
hg commit

Perhatikan bagaimana Mercurial perintah yang biasa dan tidak istimewa sama sekali -- satu-satunya hal yang tidak biasa adalah --force bendera hg menarik, yang diperlukan sejak Mercurial akan membatalkan jika ketika anda menarik dari aplikasi yang terkait repositori. Itu adalah perbedaan-perbedaan seperti ini yang membuat Mercurial tampak lebih elegan untuk saya.

Komentar (7)

Git adalah sebuah platform, Mercurial ini "hanya" sebuah aplikasi. Git adalah berversi filesystem platform yang terjadi pada kapal dengan sebuah DVCS aplikasi di kotak, tapi seperti biasa untuk platform aplikasi, itu adalah lebih kompleks dan memiliki tepi kasar dari fokus apps lakukan. Tapi ini juga berarti git adalah VCS yang sangat fleksibel, dan ada yang besar kedalaman non-sumber-mengontrol hal-hal yang dapat anda lakukan dengan git.

Itu adalah inti dari perbedaan.

Git adalah yang terbaik dipahami dari tanah – up dari repositori format up. Scott Chacon ini Git Bicara adalah primer yang sangat baik untuk ini. Jika anda mencoba untuk menggunakan git tanpa mengetahui apa yang terjadi di bawah tenda, anda akan berakhir bingung di beberapa titik (kecuali anda tetap hanya fungsi dasar). Hal ini mungkin terdengar bodoh ketika semua yang anda inginkan adalah sebuah DVCS untuk pemrograman sehari-hari rutin, tapi jenius git adalah bahwa repositori format ini sebenarnya sangat sederhana dan anda dapat memahami git seluruh operasi yang cukup mudah.

Untuk beberapa alasan teknis yang berorientasi perbandingan, artikel terbaik saya pribadi melihat ini adalah Dustin Sallings':

Ia telah benar-benar digunakan baik DVCSs luas dan memahami mereka berdua baik – dan akhirnya lebih memilih git.

Komentar (3)

Perbedaan besar adalah pada Windows. Mercurial didukung secara native, Git isn't. Anda bisa mendapatkan sangat mirip hosting untuk github.com bitbucket.org (sebenarnya lebih baik karena anda mendapatkan pribadi gratis repositori). Saya menggunakan msysGit untuk sementara tapi pindah ke Lincah dan sangat senang dengan itu.

Komentar (5)

Jika anda adalah pengembang Windows mencari dasar terputus kontrol revisi, pergi dengan Hg. Saya menemukan Git dapat dimengerti sedangkan Hg sederhana dan juga terintegrasi dengan Windows shell. Saya download Hg dan diikuti tutorial ini (hginit.com) - sepuluh menit kemudian aku punya repo lokal dan kembali untuk bekerja pada proyek saya.

Komentar (1)

Saya pikir yang terbaik deskripsi tentang "Mercurial vs Git" adalah:

"Git adalah Wesley Snipes. Mercurial Denzel Washington"

Komentar (5)

Mereka hampir identik. Perbedaan yang paling penting, dari sudut pandang saya (maksud saya, alasan yang membuat saya untuk memilih salah satu DVCS lebih dari yang lain) adalah bagaimana dua program yang mengelola cabang-cabang.

Untuk memulai sebuah cabang baru, dengan Lincah, anda cukup clone repository ke direktori lain dan mulai berkembang. Kemudian, anda menarik dan menggabungkan. Dengan git, anda harus secara eksplisit memberikan nama untuk topik baru cabang yang ingin anda gunakan, kemudian anda mulai coding menggunakan direktori yang sama.

Singkatnya, masing-masing cabang dalam Mercurial kebutuhan direktori sendiri; di git anda biasanya bekerja pada direktori tunggal. Beralih cabang dalam Mercurial berarti mengubah direktori; di git, itu berarti meminta git untuk mengubah direktori's konten dengan git checkout.

I'm jujur: saya don't tahu apakah itu's mungkin untuk melakukan hal yang sama dengan Lincah, tapi karena saya biasanya bekerja pada proyek-proyek web, selalu menggunakan direktori yang sama dengan git tampaknya lebih confortable untuk saya, karena saya don't harus re-konfigurasi Apache dan restart dan saya don't mess saya filesystem setiap kali saya branch.

Edit: Sebagai Deestan mencatat, Hg memiliki nama cabang, yang dapat disimpan dalam sebuah repositori tunggal dan memungkinkan pengembang untuk beralih cabang dalam kerja copy. git cabang-cabang yang tidak persis sama seperti Mercurial bernama cabang, pokoknya: mereka adalah permanen dan tidak membuang cabang-cabang, seperti di git. Itu berarti bahwa jika anda menggunakan nama cabang eksperimental tugas bahkan jika anda memutuskan untuk tidak bergabung itu akan disimpan dalam repositori. Yang's alasan mengapa Hg mendorong untuk menggunakan klon untuk percobaan, pendek-menjalankan tugas dan bernama cabang untuk menjalankan tugas-tugas, seperti untuk melepaskan cabang-cabang.

Alasan mengapa banyak Hg pengguna lebih menyukai klon atas bernama cabang jauh lebih sosial atau budaya dari teknis. Misalnya, dengan versi terakhir dari Hg,'s bahkan mungkin untuk menutup bernama cabang dan secara rekursif menghapus metadata dari set perubahan.

Di sisi lain, git mengajak untuk menggunakan "bernama cabang" yang tidak permanen dan tidak disimpan sebagai metadata pada masing-masing changeset.

Dari sudut pandang pribadi saya, kemudian, git's model ini sangat terkait dengan konsep bernama cabang dan beralih di antara cabang dan lain withing direktori yang sama; hg dapat melakukan hal yang sama dengan nama cabang, namun belum mendorong penggunaan klon, yang saya pribadi don't seperti terlalu banyak.

Komentar (4)

Ada's salah satu besar perbedaan antara git dan lincah; cara mewakili masing-masing melakukan. git mewakili berbuat seperti foto-foto, sementara lincah mewakili mereka sebagai diffs.

Apa artinya ini dalam praktek? Nah, banyak operasi yang lebih cepat di git, seperti beralih ke komit lain, membandingkan melakukan, dll. Khususnya jika ini melakukan yang jauh.

AFAIK ada's tidak ada keuntungan dari mercurial's pendekatan.

Komentar (7)

Jika saya memahami mereka dengan benar (dan I'm jauh dari seorang ahli pada masing-masing) mereka pada dasarnya masing-masing memiliki filosofi yang berbeda. Saya pertama kali digunakan mercurial selama 9 bulan. Sekarang saya've digunakan git untuk 6.

hg adalah versi perangkat lunak kontrol. It's tujuan utama adalah untuk melacak versi dari sebuah software.

git adalah waktu berdasarkan sistem file. It's tujuan adalah untuk menambahkan dimensi lain untuk sistem file. Sebagian besar memiliki file dan folder, git menambah waktu. Hal itu terjadi untuk pekerjaan yang mengagumkan sebagai VCS adalah produk sampingan dari desain.

Di hg, ada's sejarah dari seluruh proyek itu's selalu berusaha untuk mempertahankan. Secara default saya percaya hg ingin semua perubahan untuk semua benda oleh semua pengguna ketika mendorong dan menarik.

Di git sana's hanya kolam benda-benda dan ini pelacakan file (cabang/kepala) yang menentukan set dari objek tersebut mewakili pohon file di negara tertentu. Ketika mendorong atau menarik git hanya mengirimkan benda-benda yang diperlukan untuk cabang tertentu anda mendorong atau menarik, yang merupakan bagian kecil dari semua benda.

Sejauh git yang bersangkutan tidak ada "1 proyek". Anda bisa memiliki 50 proyek di repo dan git tidak't peduli. Masing-masing dapat dikelola secara terpisah di bagian yang sama repo dan hidup baik-baik saja.

Hg's konsep cabang adalah cabang dari proyek utama atau cabang-cabang dari cabang-cabang dll. Git tidak memiliki konsep tersebut. A branch di git adalah salah satu negara dari pohon, semuanya adalah branch di git. Cabang yang lebih resmi, saat ini, atau yang terbaru tidak memiliki arti di git.

Saya don't tahu apakah itu masuk akal. Jika aku bisa menggambar hg mungkin terlihat seperti ini di mana masing-masing melakukan adalah o

             o---o---o
            /        
o---o---o---o---o---o---o---o
         \         /
          o---o---o

Pohon dengan akar tunggal dan cabang-cabang yang datang dari itu. Sementara git dapat melakukan itu dan sering orang gunakan itu yang's tidak ditegakkan. Git gambar, jika ada hal seperti itu, bisa dengan mudah terlihat seperti ini

o---o---o---o---o

o---o---o---o
         \
          o---o

o---o---o---o

Bahkan dalam beberapa hal itu doesn't bahkan tidak masuk akal untuk menunjukkan cabang-cabang di git.

Salah satu hal yang sangat membingungkan untuk diskusi, git dan lincah keduanya memiliki sesuatu yang disebut "cabang" tapi mereka tidak jauh hal-hal yang sama. Cabang dalam mercurial datang sekitar ketika ada konflik antara berbagai repos. A branch di git rupanya mirip dengan clone di hg. Tapi tiruan, sementara itu mungkin memberikan perilaku yang serupa adalah yang paling pasti tidak sama. Menganggap saya mencoba ini di git vs hg menggunakan chromium repo yang agak besar.

$ time git checkout -b some-new-branch
Switched to new branch 'some-new-branch'

real   0m1.759s
user   0m1.596s
sys    0m0.144s

Dan sekarang di hg menggunakan clone

$ time hg clone project/ some-clone/

updating to branch default
29387 files updated, 0 files merged, 0 files removed, 0 files unresolved.
real   0m58.196s
user   0m19.901s
sys    0m8.957

Kedua orang ini adalah panas berjalan. Yaitu, aku berlari mereka dua kali dan ini adalah yang kedua berjalan. hg clone adalah benar-benar sama seperti git-baru-workdir. Keduanya membuat yang sama sekali baru bekerja dir hampir seolah-olah anda telah mengetik cp -r proyek-proyek clone. Yang's tidak sama dengan membuat cabang baru di git. It's jauh lebih berat. Jika ada yang benar setara dengan git's bercabang di hg I don't tahu apa itu.

Saya mengerti di beberapa tingkat hg dan git mungkin dapat melakukan hal-hal serupa. Jika demikian maka ada masih ada perbedaan besar dalam alur kerja mereka menyebabkan anda untuk. Di git, khas alur kerja ini adalah untuk menciptakan sebuah cabang untuk setiap fitur.

git checkout master
git checkout -b add-2nd-joypad-support
git checkout master
git checkout -b fix-game-save-bug
git checkout master
git checkout -b add-a-star-support

Yang hanya dibuat 3 cabang, masing-masing didasarkan dari cabang yang disebut master. (Saya'm yakin ada's beberapa cara dalam git untuk membuat 1 baris setiap bukannya 2)

Sekarang bekerja di salah satu yang saya lakukan

git checkout fix-game-save-bug

dan mulai bekerja. Melakukan hal-hal, dll. Beralih di antara cabang-cabang, bahkan di sebuah proyek besar seperti chrome adalah hampir seketika. Aku benar-benar don't tahu bagaimana untuk melakukan itu di hg. It's bukan merupakan bagian dari tutorial saya've baca.

Satu perbedaan besar. Git's atas panggung.

Git memiliki ide ini dari panggung. Anda dapat menganggapnya sebagai sebuah folder tersembunyi. Ketika anda melakukan anda hanya melakukan apa yang's atas panggung, bukan perubahan dalam anda bekerja pohon. Yang mungkin terdengar aneh. Jika anda ingin melakukan semua perubahan anda bekerja pohon anda'd lakukan git commit -a yang menambahkan semua file yang telah dimodifikasi ke panggung dan kemudian melakukan mereka.

Apa's titik panggung kemudian? Anda dapat dengan mudah memisahkan anda melakukan. Bayangkan anda diedit joypad.cpp dan gamesave.cpp dan anda ingin melakukan mereka secara terpisah

git add joypad.cpp  // copies to stage
git commit -m "added 2nd joypad support"
git add gamesave.cpp  // copies to stage
git commit -m "fixed game save bug"

Git bahkan memiliki perintah untuk memutuskan mana garis tertentu pada file yang sama yang ingin anda salin ke panggung sehingga anda dapat memisahkan mereka melakukan secara terpisah juga. Mengapa anda ingin melakukan itu? Karena seperti yang terpisah melakukan yang lain dapat menarik hanya orang-orang yang mereka inginkan atau jika ada masalah mereka bisa kembali hanya melakukan yang punya masalah.

Komentar (3)

Apa-apa. Mereka berdua melakukan hal yang sama, keduanya sama-sama melakukan sekitar. Satu-satunya alasan anda harus memilih satu atas yang lain adalah jika anda membantu dengan proyek yang sudah menggunakan satu..

Alasan lain yang mungkin untuk memilih salah satu aplikasi atau layanan yang hanya mendukung satu sistem.. misalnya, saya cukup banyak yang memilih untuk belajar git karena github..

Komentar (1)

Juga google's perbandingan (meskipun itu's agak tua, yang dilakukan pada tahun 2008)

http://code.google.com/p/support/wiki/DVCSAnalysis

Komentar (0)

Ada yang dinamis perbandingan grafik di atas versioncontrolblog di mana anda dapat membandingkan beberapa versi yang berbeda sistem kontrol.

Berikut ini adalah tabel perbandingan antara git, hg dan bzr.

Komentar (3)

Ada perbedaan yang cukup signifikan ketika datang untuk bekerja dengan cabang-cabang (terutama jangka pendek orang-orang).

Hal ini dijelaskan dalam artikel ini (BranchingExplained) yang membandingkan Mercurial dengan Git.

Komentar (0)

Satu hal yang perlu diperhatikan antara mercurial dari bitbucket.org dan git dengan github adalah, mercurial dapat memiliki banyak pribadi repositori seperti yang anda inginkan, tapi github anda harus meng-upgrade ke akun berbayar. Jadi, yang's mengapa saya pergi untuk bitbucket yang menggunakan mercurial.

Komentar (0)

Apakah ada yang berbasis Windows kolaborator pada proyek anda?

Karena jika ada, Git-untuk-Windows GUI tampak canggung, sulit, tidak ramah.

Mercurial-pada-Windows, sebaliknya, adalah no-brainer.

Komentar (2)

Tahun lalu kadang-kadang aku dievaluasi baik git dan hg untuk saya gunakan sendiri, dan memutuskan untuk pergi dengan hg. Saya merasa itu tampak seperti cleaner solusi, dan bekerja dengan baik pada platform pada saat itu. Itu adalah sebagian besar toss-up, meskipun.

Baru-baru ini, saya mulai menggunakan git karena git-svn dan kemampuan untuk bertindak sebagai klien Subversion. Ini tidak saya lebih dan saya've sekarang beralih sepenuhnya ke git. Saya pikir itu's mendapat sedikit lebih tinggi kurva belajar (terutama jika anda perlu untuk melihat-lihat bagian dalam), tapi itu benar-benar adalah sebuah sistem yang besar. I'm akan pergi baca dua artikel perbandingan bahwa John diposting sekarang.

Komentar (1)

I'm saat ini dalam proses melakukan migrasi dari SVN untuk sebuah DVCS (sambil blogging tentang temuan saya, pertama saya blogging upaya...), dan I've dilakukan sedikit riset (=googling). Sejauh yang saya bisa melihat anda dapat melakukan hal-hal dengan kedua paket. Sepertinya git memiliki lebih sedikit atau lebih baik menerapkan fitur-fitur canggih, Saya merasa bahwa integrasi dengan windows adalah sedikit lebih baik bagi mercurial, dengan TortoiseHg. Aku tahu ada's Git Cheetah juga (saya mencoba), tapi mercurial solusi terasa lebih kuat.

Melihat bagaimana mereka're investasi open-source (kan?) Saya don't pikir baik akan menjadi kurang penting fitur. Jika ada sesuatu yang penting, orang-orang akan meminta untuk itu, orang-orang akan kode itu.

Saya berpikir bahwa untuk praktek umum, Git dan Mercurial lebih dari cukup. Mereka berdua memiliki proyek-proyek besar yang menggunakan mereka (Git -> kernel linux, Mercurial -> Mozilla foundation proyek, baik antara lain tentu saja), jadi saya don't pikir baik adalah benar-benar kurang sesuatu.

Bahwa menjadi kata, saya tertarik pada apa yang orang lain katakan tentang hal ini, karena itu akan membuat sumber besar untuk saya blogging usaha ;-)

Komentar (1)

Ada yang besar dan lengkap perbandingan tabel dan grafik pada git, Mercurial, dan Bazaar di InfoQ's panduan tentang DVCS.

Komentar (0)

Saya menyadari ini isn't bagian dari jawabannya, tetapi pada catatan itu, saya juga berpikir ketersediaan stabil plugin untuk platform seperti NetBeans dan Eclipse memainkan bagian di mana alat ini lebih cocok untuk tugas, atau lebih tepatnya, alat yang paling cocok untuk "anda". Artinya, kecuali jika anda benar-benar ingin melakukannya CLI-jalan.

Kedua Gerhana (dan segala sesuatu yang berdasarkan itu) dan NetBeans kadang-kadang memiliki masalah dengan remote file sistem (seperti SSH) dan eksternal update dari file; yang merupakan alasan lain mengapa anda inginkan apa pun yang anda memilih untuk bekerja "mulus".

I'm mencoba untuk menjawab pertanyaan ini untuk diriku sendiri sekarang juga .. dan I've direbus kandidat untuk Git atau Mercurial .. terima kasih semua untuk memberikan masukan-masukan yang berguna pada topik ini tanpa agama.

Komentar (1)

Jika anda tertarik dengan perbandingan kinerja dari Lincah dan Git lihat di artikel ini. Kesimpulannya adalah:

Git dan Lincah-sama dalam jumlah yang baik tetapi membuat suatu trade-off antara kecepatan dan ukuran repositori. Mercurial lebih cepat dengan menambah dan modifikasi, dan membuat repositori pertumbuhan di bawah kontrol pada waktu yang sama. Git juga cepat, tapi dengan repositori tumbuh sangat cepat dengan modifikasi file sampai anda dipak — dan orang-orang repacks dapat menjadi sangat lambat. Tapi dikemas repositori jauh lebih kecil dari Mercurial's.

Komentar (0)