Saya memperkenalkan Git ke tim dev saya, dan semua orang membencinya kecuali saya. Mereka ingin menggantinya dengan Team Foundation Server. Saya merasa ini adalah langkah mundur yang besar, meskipun saya tidak terlalu mengenal TFS. Dapatkah seseorang dengan pengalaman membandingkan dukungan percabangan pada percabangan TFS ke Git? Juga, secara umum, apa pro dan kontra dari TFS? Apakah saya akan membencinya setelah menggunakan Git selama beberapa tahun?
263
Jawaban:
Saya pikir, pernyataan itu
membuat diskusi lebih lanjut menjadi sia-sia: ketika Anda terus menggunakan Git, mereka akan menyalahkan Anda jika ada masalah.
Terlepas dari ini, bagi saya Git memiliki dua keunggulan dibandingkan VCS terpusat yang paling saya hargai (seperti dijelaskan oleh Rob Sobers ):
Tapi seperti yang saya katakan: Saya pikir Anda bertarung dalam pertempuran yang hilang: ketika semua orang membenci Git, jangan gunakan Git. Ini bisa membantu Anda lebih tahu mengapa mereka membenci Git daripada mencoba meyakinkan mereka.
Jika mereka tidak menginginkannya karena itu baru bagi mereka dan tidak mau belajar sesuatu yang baru: apakah Anda yakin bahwa Anda akan melakukan pengembangan yang sukses dengan staf itu?
Apakah benar-benar setiap orang membenci Git atau mereka dipengaruhi oleh beberapa pemimpin opini? Temukan para pemimpin dan tanyakan kepada mereka apa masalahnya. Yakinkan mereka dan Anda akan meyakinkan anggota tim lainnya.
Jika Anda tidak dapat meyakinkan para pemimpin: lupakan tentang menggunakan Git, ambil TFS. Akan membuat hidup Anda lebih mudah.
sumber
Perbedaan utama antara kedua sistem adalah bahwa TFS adalah sistem kontrol versi terpusat dan Git adalah sistem kontrol versi terdistribusi.
Dengan TFS, repositori disimpan di server pusat dan pengembang memeriksa salinan yang berfungsi, yang merupakan snapshot dari kode pada titik waktu tertentu. Dengan Git, pengembang mengkloning seluruh repositori ke mesin mereka, termasuk semua riwayat.
Salah satu manfaat memiliki repositori lengkap pada mesin pengembang Anda adalah redundansi seandainya server mati. Kegembiraan lain yang bagus adalah bahwa Anda dapat memindahkan copy pekerjaan Anda bolak-balik antara revisi tanpa pernah berbicara dengan server, yang dapat membantu jika server sedang down atau hanya tidak terjangkau.
Bagi saya, keuntungan sebenarnya adalah Anda dapat melakukan perubahan pada repositori lokal Anda tanpa pernah berbicara dengan server atau menyebabkan perubahan yang berpotensi tidak stabil pada tim Anda (yaitu, merusak build).
Misalnya, jika saya sedang mengerjakan fitur besar, mungkin perlu waktu seminggu untuk membuat kode dan mengujinya sepenuhnya. Saya tidak ingin melakukan check-in kode tidak stabil pada pertengahan minggu dan memecah bangunan, tetapi apa yang terjadi jika saya mendekati akhir minggu dan saya secara tidak sengaja merusak seluruh copy pekerjaan saya? Jika saya tidak melakukan semua selama ini saya berisiko kehilangan pekerjaan saya. Itu bukan kontrol versi yang efektif, dan TFS rentan terhadap ini.
Dengan DVCS, saya bisa berkomitmen terus-menerus tanpa khawatir akan merusak pembangunan, karena saya melakukan perubahan saya secara lokal . Di TFS dan sistem terpusat lainnya tidak ada konsep check-in lokal.
Saya bahkan belum membahas seberapa jauh percabangan dan penggabungan yang lebih baik dalam DVCS, tetapi Anda dapat menemukan banyak penjelasan di sini di SO atau melalui Google. Saya dapat memberitahu Anda dari pengalaman bahwa bercabang dan bergabung dalam TFS tidak baik.
Jika argumen untuk TFS di organisasi Anda adalah bahwa ia bekerja lebih baik di Windows daripada Git, saya sarankan Mercurial, yang bekerja sangat baik pada Windows - ada integrasi dengan Windows Explorer (TortoiseHg) dan Visual Studio (VisualHg).
sumber
Orang-orang perlu meletakkan pistol, menjauh dari langkan, dan berpikir sebentar. Ternyata ada keuntungan obyektif, konkret, dan tak terbantahkan untuk DVCS yang akan membuat perbedaan besar dalam produktivitas tim.
Semuanya bermuara pada Percabangan dan Penggabungan.
Sebelum DVCS, prinsip panduannya adalah "Berdoalah kepada Tuhan agar Anda tidak harus masuk ke percabangan dan penggabungan. Dan jika Anda melakukannya, setidaknya memohon kepada-Nya untuk membiarkannya menjadi sangat, sangat sederhana."
Sekarang, dengan DVCS, percabangan ( dan penggabungan ) jauh lebih baik, prinsip panduannya adalah, "Lakukan dengan mudah. Ini akan memberi Anda banyak manfaat dan tidak menimbulkan masalah bagi Anda."
Dan itu adalah penguat produktivitas BESAR untuk tim mana pun.
Masalahnya adalah, agar orang mengerti apa yang baru saja saya katakan dan diyakinkan bahwa itu benar, pertama-tama mereka harus berinvestasi dalam sedikit kurva pembelajaran. Mereka tidak harus belajar Git atau DVCS lain itu sendiri ... mereka hanya perlu belajar bagaimana Git bercabang dan bergabung. Baca dan baca kembali beberapa artikel dan posting blog, lakukan dengan lambat, dan kerjakan sampai Anda melihatnya. Itu mungkin memakan waktu 2 atau 3 hari penuh.
Tetapi begitu Anda melihatnya, Anda bahkan tidak akan mempertimbangkan untuk memilih non-DVCS. Karena memang ada keuntungan nyata yang jelas, objektif, dan nyata bagi DVCS, dan kemenangan terbesar adalah di bidang percabangan dan penggabungan.
sumber
Asli : @Rob, TFS memiliki sesuatu yang disebut " Shelving " yang membahas kekhawatiran Anda tentang melakukan pekerjaan dalam proses tanpa memengaruhi bangunan resmi. Saya menyadari Anda melihat kontrol versi pusat sebagai penghalang, tetapi sehubungan dengan TFS, memeriksa kode Anda di rak dapat dilihat sebagai kekuatan b / c maka server pusat memiliki salinan pekerjaan Anda yang sedang berjalan dalam acara langka mesin lokal Anda rusak atau hilang / dicuri atau Anda harus mengganti persneling dengan cepat. Maksud saya adalah bahwa TFS harus diberi pujian yang tepat di bidang ini. Selain itu, bercabang dan bergabung dalam TFS2010 telah ditingkatkan dari versi sebelumnya, dan tidak jelas versi apa yang Anda maksud ketika Anda mengatakan "... dari pengalaman bahwa bercabang dan bergabung dalam TFS tidak baik." Penafian: Saya pengguna moderat TFS2010.
Sunting Dec-5-2011 : Untuk OP, satu hal yang mengganggu saya tentang TFS adalah bahwa ia bersikeras mengatur semua file lokal Anda menjadi "hanya-baca" ketika Anda tidak mengerjakannya. Jika Anda ingin melakukan perubahan, alurnya adalah Anda harus "memeriksa" file tersebut, yang hanya menghapus atribut readonly pada file sehingga TFS tahu untuk mengawasinya. Itu alur kerja yang tidak nyaman. Cara saya lebih suka untuk bekerja adalah yang hanya secara otomatis mendeteksi jika saya telah membuat perubahan dan tidak khawatir / repot dengan atribut file sama sekali. Dengan begitu, saya dapat memodifikasi file di Visual Studio, atau Notepad, atau dengan alat apa pun yang saya suka. Sistem kontrol versi harus setransparan mungkin dalam hal ini. Ada Ekstensi Windows Explorer ( TFS PowerTools) yang memungkinkan Anda untuk bekerja dengan file Anda di Windows Explorer, tetapi itu tidak menyederhanakan alur kerja.
sumber
Di atas semua yang dikatakan (
), yang benar, TFS bukan hanya VCS. Salah satu fitur utama yang disediakan TFS adalah fungsi pelacakan bug yang terintegrasi secara asli. Perubahan terkait dengan masalah dan bisa dilacak. Berbagai kebijakan untuk lapor masuk didukung, serta integrasi dengan domain Windows, yang dimiliki oleh orang yang menjalankan TFS. GUI terintegrasi dengan Visual Studio adalah titik penjualan lain, yang menarik bagi pengembang mouse dan klik yang
kurang dari rata-ratadan manajernya.Oleh karena itu membandingkan Git dengan TFS bukanlah pertanyaan yang tepat untuk ditanyakan. Pertanyaan yang benar, meskipun tidak praktis, adalah untuk membandingkan Git dengan fungsionalitas VCS TFS saja. Saat itu, Git meniup TFS keluar dari air. Namun, tim mana pun yang serius membutuhkan alat lain dan ini adalah tempat TFS menyediakan destinasi terpadu.
sumber
Jika tim Anda menggunakan TFS dan Anda ingin menggunakan Git, Anda mungkin ingin mempertimbangkan jembatan "git to tfs". Pada dasarnya Anda bekerja sehari-hari menggunakan Git di komputer Anda, maka ketika Anda ingin mendorong perubahan Anda mendorongnya ke server TFS.
Ada pasangan di luar sana (di github). Saya menggunakan satu di tempat terakhir saya (bersama dengan pengembang lain) dengan beberapa keberhasilan. Lihat:
https://github.com/spraints/git-tfs
https://github.com/git-tfs/git-tfs
sumber
Setelah beberapa penyelidikan antara pro dan kontra, perusahaan tempat saya terlibat juga memutuskan untuk menggunakan TFS. Bukan karena GIT bukan sistem kontrol versi yang baik, tetapi yang paling penting untuk solusi ALM terintegrasi penuh yang TFS berikan. Jika hanya fitur kontrol versi yang penting, pilihannya mungkin GIT. Kurva pembelajaran GIT yang curam untuk pengembang reguler mungkin tidak dapat diremehkan.
Lihat penjelasan terperinci di posting blog saya TFS sebagai platform lintas teknologi yang sebenarnya .
sumber
Seluruh hal yang didistribusikan Git benar-benar hebat. itu memberikan beberapa fitur yang tidak dimiliki Shelvesets (dalam produk saat ini) seperti rollback lokal dan opsi komit (seperti fitur sejarah lokal Eclipse ). Anda dapat meringankan ini menggunakan cabang pengembang, tetapi mari kita jujur, banyak pengembang tidak suka bercabang dan menggabungkan sedikit pun. Saya telah diminta untuk mengaktifkan fitur "checkout eksklusif" gaya lama di TFS beberapa kali terlalu sering (dan setiap kali ditolak).
Saya pikir banyak perusahaan besar cukup takut untuk membiarkan seorang dev hanya membawa seluruh sejarah ke dalam ruang kerja lokal dan membawanya bersama mereka (ke majikan baru misalnya) ... Mencuri foto adalah buruk, tetapi mengambil seluruh sejarah bahkan lebih merepotkan. (Bukannya Anda tidak bisa mendapatkan riwayat lengkap dari TFS yang Anda inginkan) ...
Disebutkan bahwa ini adalah cara yang bagus untuk mencadangkan, yang bagus untuk open source lagi di mana pengelola asli mungkin berhenti untuk peduli dan menghapus versinya, tetapi untuk rencana perusahaan ini lagi gagal untuk banyak perusahaan karena tidak ada penugasan tanggung jawab yang jelas untuk menyimpan cadangan. Dan akan sulit untuk mengetahui versi mana yang digunakan jika 'proyek' utama menghilang entah bagaimana. Yang cenderung menunjuk satu repositori sebagai pemimpin / pusat.
Apa yang paling saya sukai dari Git adalah opsi Push / Pull, di mana Anda dapat dengan mudah menyumbangkan kode ke suatu proyek tanpa perlu memiliki hak komit. Saya kira Anda bisa menggunakan pengguna dan rak yang sangat terbatas di TFS untuk meniru ini, tetapi tidak sekuat opsi Git. Bercabang di proyek-proyek tim mungkin juga berhasil, tetapi dari perspektif administrasi, hal itu tidak benar-benar layak bagi banyak organisasi karena menambahkan proyek tim menambah banyak overhead administrasi.
Saya juga ingin menambahkan hal-hal yang disebutkan di area kendali non-sumber. Fitur-fitur seperti Pelacakan Item Kerja, Pelaporan dan Otomasi Bangun (termasuk manajemen lab) sangat diuntungkan dari repositori terkemuka pusat. Ini menjadi jauh lebih sulit ketika Anda menggunakan model terdistribusi murni, kecuali jika Anda membuat salah satu node terkemuka (dan dengan demikian kembali ke model yang kurang terdistribusi).
Dengan TFS Basic hadir dengan TFS 11, mungkin tidak jauh untuk mengharapkan TFS terdistribusi yang memungkinkan Anda untuk menyinkronkan dasar TFS lokal Anda ke TFS pusat di era TFS 12+. Saya akan menempatkan suara saya untuk itu di bawahmisalnya !
sumber
checkin
perintah (bukan rcheckin). Tetapi saya lebih suka rcheckin karena ini lebih merupakan cara git untuk melakukan sesuatu dan itulah mengapa kami memilih untuk menggunakan git;)Bagi saya perbedaan utama adalah semua file tambahan yang akan ditambahkan TFS ke solusi Anda (.vssscc) ke 'dukungan' TFS - kami memiliki masalah baru-baru ini dengan file-file ini berakhir dipetakan ke cabang yang salah, yang mengarah ke beberapa debugging yang menarik ...
sumber
.git
folder untuk melacak semua detail repositori. TFS setidaknya akan memodifikasi file Anda.sln
(atau apakah itu.csproj
?) Untuk meletakkan lokasi repositori jarak jauh ke dalamnya.