Dari TFS ke Git

14

Saya seorang pengembang .NET dan saya telah menggunakan TFS (team foundation server) sebagai perangkat lunak kendali sumber saya berkali-kali. Fitur TFS yang baik adalah:

  1. Integrasi yang baik dengan Visual Studio (jadi saya melakukan hampir semuanya secara visual; tidak ada perintah konsol)
  2. Mudah check-out, proses check-in
  3. Mudah menggabungkan dan menyelesaikan konflik
  4. Pembuatan otomatis yang mudah
  5. Percabangan

Sekarang, saya ingin menggunakan Git sebagai tulang punggung, repositori, dan kontrol sumber proyek open source saya. Proyek saya dalam bahasa C #, JavaScript, atau PHP dengan database MySQL, atau SQL Server sebagai mekanisme penyimpanan.

Saya baru saja menggunakan bantuan github.com untuk tujuan ini dan saya membuat profil di sana, dan mengunduh GUI untuk Git. Hingga bagian ini sangat mudah.

Tapi aku hampir terjebak untuk melanjutkan lebih jauh. Saya hanya ingin melakukan beberapa operasi sederhana (sangat sederhana), termasuk:

  1. Membuat proyek di Git dan memetakannya ke folder di laptop saya
  2. Memeriksa / memeriksa file dan folder
  3. Menyelesaikan konflik

Itu saja yang perlu saya lakukan sekarang. Tetapi tampaknya GUI tidak ramah pengguna. Saya mengharapkan GUI untuk memiliki Connect To...atau sesuatu seperti itu, dan kemudian saya mengharapkan daftar proyek yang akan ditampilkan, dan ketika saya memilih satu, saya berharap untuk melihat daftar file dan folder dari proyek itu, seperti menjelajahi proyek TFS Anda dalam Visual Studio. Lalu saya ingin dapat mengklik kanan file dan memilih check-in...atau check-outdan hal-hal seperti itu.

Apakah saya berharap banyak? Apa yang harus saya lakukan untuk menggunakan Git dengan mudah seperti TFS? Apa yang kulewatkan di sini?

Saeed Neamati
sumber
8
Saya beralih dari SVN ke git satu tahun yang lalu, dan saya sangat senang karenanya. Saya TIDAK akan merekomendasikan SVN kepada siapa pun kecuali kepada pembenci baris perintah yang kaku. Setelah Anda belajar git, Anda akan menyukainya.
maaartinus
14
Mengapa windows sangat terobsesi dengan antarmuka grafis?
tdammers
8
@tdammers Karena baris perintah pada Windows sangat menyebalkan? Saya tahu, ada PowerShell, tetapi apakah mereka menggunakannya?
maaartinus
3
@Seed, sebagai permulaan, Anda mengharapkan ada yang namanya memeriksa file masuk dan keluar di git. Tidak ada VCS yang dapat digunakan telah memilikinya selama bertahun-tahun.
Daniel Roseman
1
Direkomendasikan membaca: ericsink.com/entries/vcbe_print_edition_free.html Ini menjelaskan dasar-dasar kontrol versi dan perbedaan antara terpusat dan terdesentralisasi (yang masih bisa menggunakan server pusat, pikiran.)
Inca

Jawaban:

19

Keuntungan git datang dari membuang banyak asumsi lama tentang apa yang harus dilakukan VCS. Kerugian git berasal dari tidak bisa memanfaatkan pengalaman sebelumnya dan tidak mampu melakukan hal-hal seperti yang biasa Anda lakukan.

Jika Anda akan beralih dari sesuatu yang lain ke git, cobalah untuk memulai tabula-rasa (meskipun tidak mungkin untuk benar-benar dilakukan dalam praktik). Evaluasilah berdasarkan apa yang dilakukannya dan seberapa baik ia melakukannya, bukan pada bagaimana ia melakukannya dibandingkan dengan bagaimana Anda terbiasa melakukannya. Bukan karena Anda berharap terlalu banyak, itu karena harapan Anda ortogonal dengan apa yang disediakan git. Jika Anda menikah dengan operasi GUI, Anda akan kecewa. Git memang memiliki alat gui yang tersedia, tetapi mereka tidak menambahkan banyak. Itu bukan kegagalan untuk menyediakan mereka karena tidak ada yang bisa ditambahkan oleh gui. GitK memang membantu, bukan dalam operasi sehari-hari, melainkan dalam memvisualisasikan struktur cabang dan memeriksa atau mencari sejarah.

Inilah analogi konyol untuk apa yang saya maksud dengan "orthogonal". Salah satu hal yang dapat Anda lakukan dengan koran adalah membungkus ikan di dalamnya, atau menggunakannya untuk melapisi kandang burung. Tapi itu tidak penting untuk fungsi surat kabar, itu adalah fitur kebetulan dari bentuknya . Mengharapkan git untuk "memeriksa file", atau "memungkinkan Anda memilih proyek", atau menyediakan "koneksi ke ... "Ini seperti berharap dapat membungkus ikan atau melapisi kandang burung Anda dengan situs web surat kabar .

Kylben
sumber
Ups, saya lupa menjelaskan hasil edit. Saya baru saja menambahkan paragraf terakhir setelah bangun untuk minum kopi dan analoginya muncul di kepala saya.
kylben
3
Mencintai metafora pada akhirnya. +1
Yam Marcovic
7

Sudahkah Anda dianggap lincah? Seperti git, ini adalah DCVS dan memungkinkan Anda melakukan semua hal rapi yang bisa dilakukan dengan DCVS. Seperti git, ada penyedia layanan berbasis cloud (bitbucket) yang cukup bagus. Tapi, tidak seperti git, cerita windows cukup baik, Anda bukan warga negara kelas 2. Anda punya opsi tooling yang baik (TortiseHG) dan integrasi Visual Studio yang cukup baik (VisualHG).

Tidak ada yang akan menjadi seperti TFS di studio visual - dunia tidak terhubung seperti itu.

Wyatt Barnett
sumber
1
Saya setuju, beberapa tahun yang lalu saya pindah dari VSS ke Mercurial dan itu adalah pencerahan yang nyata. Tiba-tiba saya bisa melakukan hal-hal yang saya pikir tidak akan praktis. Kemudian saya pindah ke svndan melewatkan banyak hal yang sangat mudah hg. Sekarang saya pindah ke gitdan memiliki perasaan campur aduk. Saya suka mendapatkan kembali banyak fasilitas yang saya lewatkan svn, tetapi saya masih merindukan kesederhanaan hgdibandingkan dengan kompleksitas yang tidak perlu git. Bahkan hanya dengan memasang TortoiseGit di windows mengharuskan Anda untuk melewati rintangan yang tidak diperlukan dengan TortoiseHg .
Mark Booth
@ Mark Booth: Saya setuju bahwa git tidak terlalu ramah pengguna, tetapi kompleksitas apa yang tidak perlu ? Masalah instalasi tidak masuk hitungan, mereka bisa dikaitkan dengan TortoiseGit (yang merupakan program berbeda) atau ke Windows.
maaartinus
Ini akan lebih baik pada obrolan, tapi saya melihat tidak perlu apa pun untuk area indeks / cache / staging, IMHO defaultnya adalah untuk melakukan semuanya dengan opsi komitmen parsial jika diminta (lebih baik menyimpan perubahan yang Anda tidak lakukan) ingin segera, jalankan kembali unit test Anda, komit dan kemudian lepaskan dua belas). Saya juga benci harus secara eksplisit membuat cabang baru ketika saya menginginkannya. Dengan hg cabang yang tidak disebutkan namanya dibuat diam-diam setiap kali Anda berkomitmen untuk yang bukan kepala. Dalam git, jika Anda menjauh dari kepala tanpa bercabang, Anda berpotensi kehilangannya dan kemudian mengumpulkannya!
Mark Booth
6

Saya beralih dari SVN ke git satu tahun yang lalu, dan saya sangat senang karenanya. Namun, saya tidak mengandalkan GUI apa pun dan jika Anda dengan tegas menolak baris perintah, itu mungkin masalah.

Anda tampaknya berharap gituntuk bekerja dengan cara yang biasa Anda lakukan, tetapi ternyata tidak. Ini tidak sulit, tetapi Anda harus melihat prinsip-prinsipnya sebelum melanjutkan.

Membuat proyek di Git dan memetakannya ke folder di laptop saya

Git didistribusikan, yang berarti Anda selalu bekerja dengan repositori lokal Anda, yang dapat dipetakan ke sejumlah remote, termasuk nol. Ketika bermain dengan proyek lain, saya menggunakan dua remote: git atau repositori SVN dan server saya sendiri.

Saya selalu memulai dengan membuat direktori kosong dan kemudian salah satu git initatau git clone SOME-REMOTE-REPOSITORY. Tautan ini dapat membantu Anda.

Memeriksa / memeriksa file dan folder

Anda ketinggalan menulis GUI apa yang Anda gunakan. Keduanya TortoiseGitdan git-guipasti bisa melakukannya.

Menyelesaikan konflik

Untuk ini saya menggunakan git-guiatau editor teks favorit saya.

Saya berharap GUI memiliki Connect To ... atau sesuatu seperti itu

Hubungkan ke apa, ketika mungkin ada 0 hingga N remote? Git tidak tetap terhubung ke server jarak jauh, itu membuat koneksi hanya sementara dan hanya untuk beberapa perintah yang bekerja dengan repositori jarak jauh. Sebagian besar pekerjaan dilakukan secara lokal.

maka saya mengharapkan daftar proyek yang akan ditampilkan

projectsMaksud saya, Anda berasumsi repositories.

Saya khawatir tidak ada hal seperti itu. Git pada server jarak jauh hanya berfungsi dengan satu repositori. Mendaftarkan semua repositori sama dengan mendaftarkan semua direktori yang berisi subdirektori .git. Saya yakin ada sesuatu seperti ini GitHub.

Saya memilih satu, saya berharap untuk melihat daftar file dan folder dari proyek itu, seperti menjelajahi

Sekali lagi, saya khawatir tidak ada hal seperti itu, karena gitbekerja secara lokal. Dan lagi, itu tidak akan banyak berguna. Cukup klon repositori dan jelajahi di komputer Anda. Meskipun kloning dari repo besar membutuhkan waktu, semua operasi selanjutnya jauh lebih cepat, dan Anda dapat melihat komit atau cabang.

Lalu saya ingin dapat mengklik kanan file dan memilih check-in ... atau check-out dan hal-hal seperti itu.

Sekali lagi, gitbekerja secara lokal. Jadi tidak masuk akal untuk check-in atau check-out ke repo jarak jauh. Bekerja dengan cara ini adalah buang-buang waktu bahkan pada LAN yang cepat. Dapatkan repositori ke komputer Anda, bekerja dengannya dan git pushperubahan ke remote. Pikirkan tentang hal ini seperti menerbitkan perubahan Anda dan juga membuat cadangan. Anda harus sering berkomitmen secara lokal .

Sebelum Anda memulai pekerjaan Anda, git fetchatau git pullperubahan dari jarak jauh jika-kalau ada orang lain yang bekerja dengannya.

Apakah saya berharap banyak?

Iya dan tidak. Anda mengharapkan sesuatu yang berbeda dari apa yang ditawarkannya. Anda bisa mendapatkan sesuatu yang jauh lebih baik, gitkuat, fleksibel, aman, cepat sekali, dan dapat melakukan semua yang Anda butuhkan, tetapi tidak bisa meniru persis apa yang dilakukan VCS terpusat.

maaartinus
sumber
5

Saya telah membuat perjalanan dari sumber visual aman ke tfs ke svn ke git.

Beralih dari vss ke tfs adalah pengalaman yang menyenangkan. Beralih dari tfs ke svn adalah pengalaman yang menyenangkan. Pergi dari svn ke git telah menjadi semacam pertempuran internal.

Seringkali saya mendapati diri saya cukup konservatif dan saya mencoba untuk berpegang pada apa yang berhasil. Gui yang baik bagi saya lebih disukai daripada baris perintah dan saya menemukan diri saya mencari beberapa gui yang akan membiarkan saya bermain dengan anak-anak keren yang bekerja dengan saya. Mereka semua menggunakan git dengan baris perintah secara eksklusif.

Momen eureka bagi saya datang begitu saya menyerah mencari gui peluru perak dan mulai mencoba git bash (saya masih belajar).

Saya sudah menginstal beberapa guit dan mereka melengkapi git dari baris perintah. Ekstensi Git, penyedia kontrol sumber Git untuk studio visual dan kura-kura git. Tapi saya katakan membiasakan diri dengan git bash. Perintah bisa sedikit samar tetapi setelah Anda mempelajarinya mereka jauh lebih cepat daripada gui.

Bercabang dengan git hanya AWESOME dibandingkan dengan yang lain. Buat cabang dan beralih antar cabang hampir instan. Anda dapat melakukan hal-hal yang tidak akan Anda lakukan dengan svn karena svn pada dasarnya menyalin copy pekerjaan Anda (setidaknya seperti yang saya lakukan).

Saya menemukan Git memiliki kurva belajar lebih curam daripada svn. Tapi begitu Anda "mendapatkannya" dengan git, Anda tidak ingin kembali.

Git sepanjang jalan.

tomasat
sumber
5

Anda terbiasa memiliki server yang menyimpan file Anda dan merupakan pemiliknya yang mahakuasa. Untuk mengedit file, Anda harus meminta izin dari server.

Git tidak seperti itu. Pikirkan git dengan cara ini: Anda memiliki repositori lokal Anda. Git memungkinkan Anda melakukan perubahan, membalikkan komit, percabangan mudah dan cepat, dll. Saat Anda ingin mencadangkan riwayat kontrol sumber, Anda mendorong perubahan ke repositori lain , yang "kebetulan merupakan" server, seperti GitHub.com.

Alur kerja:

  1. Klon (Unduh) / Buat repositori
  2. Buat beberapa perubahan. Lanjutkan dengan pengembangan tanpa peduli dengan orang lain.
  3. Dorong ke repositori lain (bisa berupa server seperti GitHub).
  4. Saat Anda mendorong ke repositori, pemilik repositori lain itu diberitahu tentang pending pending, dan harus memutuskan apakah akan menerima komit itu, menolaknya, atau hanya mengambil sebagian dari itu.
  5. Siklus berlanjut.

Itu semuanya.

Yam Marcovic
sumber
1

Apa maksudmu "si" git gui? Ada banyak trilyun dari mereka, termasuk plugin untuk integrasi studio visual, jika saya ingat dengan benar. Jika satu GUI tidak bekerja untuk Anda, coba lagi sampai Anda menemukan yang tidak. Saya pribadi menggunakan GUI yang berbeda untuk tugas yang berbeda (dan CLI untuk yang lain).

Namun, git lebih merupakan kerangka kerja kontrol versi daripada sistem tetap. Anda masih harus mempelajari beberapa dasar untuk mendapatkan yang terbaik dari itu.

Karl Bielefeldt
sumber
-2

Apakah saya berharap banyak?

Iya

Apa yang harus saya lakukan untuk menggunakan Git dengan mudah seperti TFS?

Tidak ada. Git CLI-centric dan tidak memiliki frontend yang baik (saya tahu tentang TortoiseGit, yang tidak menjawab, dibandingkan dengan Tortoise * lainnya). Anda dapat mencoba menggunakan SmartGit (Waspadalah terhadap Java)

Malas Badger
sumber
1
-1: Memeriksa file masuk / keluar dan menyelesaikan konflik tidak 'berharap banyak' dari kontrol sumber.
Steven Evers
2
+1 Memeriksa mereka langsung dari server jauh tidak masuk akal. Hanya untuk memperlambat, bahkan melalui LAN. Melakukan hal-hal seperti itu untuk FTP, bukan VCS.
maaartinus
1
File "Memeriksa masuk / keluar" bukan operasi dasar untuk VCS. Ini adalah fitur implementasi yang umum bagi sebagian besar VCS, dan yang memiliki efek samping yang halus tetapi tidak menguntungkan.
kylben
2
@kylben: check in / out adalah salah satu cara untuk melihat kontrol versi; mengedit dan menggabungkan adalah cara lain. Beberapa VCS menggunakan pendekatan sebelumnya, memberi Anda kunci eksklusif dan kemampuan untuk memeriksa file individual; yang lain mengambil yang terakhir, dan dengan itu, Anda mengunduh seluruh repositori, membuat perubahan lokal, dan kemudian mendorongnya kembali ke remote; VCS menangani pengelolaan perubahan yang bertentangan, meminta masukan Anda jika ada keraguan. Tidak ada pendekatan yang lebih baik, tetapi Anda biasanya tidak dapat membengkokkan VCS menjadi yang belum pernah dibuat.
tdammers
1
Dengan 'check in / out', saya benar-benar berbicara tentang cara VCS mengimplementasikan kunci berbasis hal-hal, bukan bagaimana Anda dapat mengunduh file sumber untuk mengedit (yang memang sesuatu yang setiap VCS harus dapat lakukan). Fakta bahwa banyak VCS merujuk pada proses mengunduh file hanya sebagai 'checkout' adalah sedikit salah ketik IMO - tidak ada yang diperiksa, dan repositori tidak ingat siapa yang memiliki file tersebut.
tdammers