Ini sesuatu yang saya kerjakan selama beberapa minggu terakhir. Ini masih berkembang, tetapi mungkin bermanfaat. Harap dicatat saya seorang karyawan Perforce.
Pengantar Perforce untuk pengguna Git
Mengatakan bahwa pindah dari Git ke Perforce atau dari Perforce ke Git adalah hal yang tidak sepele adalah pernyataan yang meremehkan. Karena menjadi dua alat yang seolah-olah melakukan hal yang sama, pendekatan mereka tidak bisa lebih berbeda. Artikel singkat ini akan mencoba membantu pengguna Perforce baru yang datang dari Git memahami dunia baru mereka.
Satu jalan memutar singkat sebelum kita menyelam; jika Anda lebih suka Git, Anda bisa menggunakan Git dengan Perforce dengan cukup baik. Kami menyediakan alat yang disebut Git Fusion yang menghasilkan repositori Git yang disinkronkan dengan server Perforce. Orang-orang Git dan Perforce dapat hidup dalam harmoni bekerja dengan kode yang sama, sebagian besar tidak terpengaruh oleh pilihan kontrol versi rekan kerja mereka. Git Fusions 13.3 tersedia dari situs web Perforce . Memang perlu diinstal oleh administrator Perforce, tetapi jika Anda menginstalnya Anda akan menemukan bahwa fitur slicing repository-nya bisa sangat berguna sebagai pengguna Git.
Jika Anda tidak dapat meyakinkan admin Anda untuk menginstal Git Fusion, Git sendiri dilengkapi dengan Perforce binding yang disebut Git-P4 yang memungkinkan Anda menggunakan Git untuk mengubah dan mengirimkan file di ruang kerja Perforce. Informasi lebih lanjut tentang itu dapat ditemukan di: https://git.wiki.kernel.org/index.php/GitP4
Masih di sini? Bagus, mari kita lihat Perforce.
Beberapa Perbedaan Terminologi untuk Diurutkan
Sebelum kita masuk ke perincian, kita perlu membahas secara singkat perbedaan terminologi pasangan antara Git dan Perforce.
Yang pertama adalah checkout . Di Git, inilah cara Anda mendapatkan salinan kode dari cabang tertentu ke area kerja Anda. Di Perforce kami menyebutnya sinkronisasi dari baris perintah atau dari GUI P4V kami "Dapatkan Revisi Terbaru". Perforce menggunakan kata checkout dari P4V atau p4 edit
dari baris perintah yang berarti bahwa Anda berencana untuk mengubah file dari sistem kontrol versi. Di sisa dokumen ini, saya akan menggunakan checkout dalam arti kata Perforce.
Yang kedua adalah Git commit versus Perforce submit . Di mana Anda akan melakukan di Git, Anda akan mengirimkan di Perforce. Menjadi bahwa semua operasi terjadi terhadap layanan versi Perforce bersama, Perforce tidak memiliki yang setara untuk git push
. Demikian juga kita tidak punya pull
; perintah sinkronisasi dari atas menangani mendapatkan file untuk kami. Tidak ada konsep pengiriman lokal murni di Perforce kecuali Anda memilih untuk menggunakan alat P4Sandbox kami yang dijelaskan secara singkat di bawah ini.
Konsep Kunci dalam Perforce
Jika saya harus menyederhanakan Perforce menjadi dua konsep utama saya akan fokus pada depot dan ruang kerja. Depot Perforce adalah repositori file yang hidup di server Perforce. Server Perforce dapat memiliki sejumlah depot dan setiap depot dapat berisi sejumlah file. Seringkali Anda akan mendengar pengguna Perforce menggunakan depot dan server secara bergantian, tetapi mereka berbeda. Situs Perforce dapat memilih untuk memiliki beberapa server, tetapi umumnya semua file berada dalam satu server.
Ruang kerja atau klien Perforce adalah objek dalam sistem yang memetakan set file di server Perforce ke lokasi di sistem file pengguna. Setiap pengguna memiliki ruang kerja untuk setiap mesin yang mereka gunakan, dan seringkali pengguna akan memiliki lebih dari satu ruang kerja untuk mesin yang sama. Bagian terpenting dari ruang kerja adalah pemetaan atau tampilan ruang kerja.
Tampilan ruang kerja menentukan set file di depot yang harus dipetakan ke mesin lokal. Ini penting karena ada peluang bagus bahwa Anda tidak ingin semua file yang tersedia di server. Tampilan ruang kerja memungkinkan Anda memilih hanya set yang Anda pedulikan. Penting untuk dicatat bahwa ruang kerja dapat memetakan konten dari beberapa depo, tetapi hanya dapat memetakan konten dari satu server.
Untuk membandingkan Perforce dengan Git dalam hal ini, dengan Git Anda memilih dan memilih serangkaian repositori Git yang Anda minati. Setiap repo umumnya tertutup rapat berisi hanya file-file terkait. Keuntungan dari ini adalah tidak ada konfigurasi untuk dilakukan di pihak Anda; Anda melakukan klon git dari hal-hal yang Anda pedulikan dan Anda selesai. Ini sangat baik jika Anda hanya bekerja dengan satu atau dua repositori. Dengan Perforce Anda harus menghabiskan sedikit waktu memetik dan memilih bit kode yang Anda inginkan.
Banyak toko Perforce menggunakan aliran yang dapat secara otomatis menghasilkan tampilan ruang kerja, atau mereka menghasilkan tampilan menggunakan skrip atau ruang kerja templat. Banyak yang meninggalkan pengguna mereka untuk menghasilkan ruang kerja mereka sendiri. Salah satu keuntungan bisa memetakan sejumlah modul dalam satu ruang kerja adalah Anda dapat dengan mudah memodifikasi beberapa modul kode dalam satu checkin; Anda dapat dijamin bahwa siapa pun yang memiliki tampilan klien serupa yang menyinkronkan checkin Anda akan memiliki semua kode dalam keadaan yang benar. Ini juga dapat menyebabkan kode terlalu tergantung; pemisahan paksa Git dapat menyebabkan modularitas yang lebih baik. Untungnya Perforce juga dapat mendukung modularitas yang ketat juga. Ini semua pertanyaan tentang bagaimana Anda memilih untuk menggunakan alat ini.
Mengapa ruang kerja?
Saya pikir dengan datang dari Git mudah untuk merasa seperti seluruh konsep ruang kerja jauh lebih banyak masalah daripada nilainya. Dibandingkan dengan kloning beberapa repositori Git, ini tidak diragukan lagi benar. Di mana ruang kerja bersinar, dan alasan Perforce masih dalam bisnis setelah bertahun-tahun ini, adalah bahwa ruang kerja adalah cara yang fantastis untuk memangkas jutaan proyek file untuk pengembang sambil tetap membuatnya mudah untuk dibuat dan dirilis untuk menarik semua sumber dari satu sumber otoritatif. Ruang kerja adalah salah satu alasan utama mengapa Perforce dapat berskala sebaik itu.
Ruang kerja juga bagus karena tata letak file di depot dan tata letak pada mesin pengguna dapat bervariasi jika perlu. Banyak perusahaan mengatur depot mereka untuk mencerminkan organisasi perusahaan mereka sehingga mudah bagi orang untuk menemukan konten berdasarkan unit bisnis atau proyek. Namun sistem build mereka tidak peduli tentang hierarki ini; ruang kerja memungkinkan mereka untuk memetakan ulang hierarki depot mereka dengan cara apa pun yang masuk akal untuk alat mereka. Saya juga telah melihat ini digunakan oleh perusahaan yang menggunakan sistem build yang sangat tidak fleksibel yang memerlukan kode untuk berada dalam konfigurasi yang sangat spesifik yang benar-benar membingungkan manusia. Ruang kerja memungkinkan perusahaan-perusahaan ini untuk memiliki hierarki sumber yang dapat dinavigasi oleh manusia sementara alat bangun mereka mendapatkan struktur yang mereka butuhkan.
Ruang kerja di Perforce tidak hanya digunakan untuk memetakan set file yang ingin dikerjakan pengguna, tetapi mereka juga digunakan oleh server untuk melacak dengan tepat revisi dari setiap file yang telah disinkronkan pengguna. Ini memungkinkan sistem untuk mengirim set file yang benar ke pengguna ketika menyinkronkan tanpa harus memindai file untuk melihat file mana yang perlu diperbarui. Dengan sejumlah besar data, ini bisa menjadi kemenangan kinerja yang cukup besar. Ini juga sangat populer di industri yang memiliki aturan audit yang sangat ketat; Admin Perforce dapat dengan mudah melacak dan mencatat pengembang mana yang telah menyinkronkan file mana.
Untuk informasi lebih lanjut tentang kekuatan penuh ruang kerja Perforce, baca Mengkonfigurasi P4 .
Checkout Eksplisit vs. Checkout Implisit
Salah satu tantangan terbesar bagi pengguna yang pindah dari Git ke Perforce adalah konsep checkout eksplisit. Jika Anda terbiasa dengan alur kerja Git / SVN / CVS mengubah file dan kemudian memberitahu sistem kontrol versi untuk mencari apa yang telah Anda lakukan, itu bisa menjadi transisi yang sangat menyakitkan.
Berita baiknya adalah jika Anda memilihnya, Anda dapat bekerja dengan alur kerja gaya Git di Perforce. Di Perforce Anda dapat mengatur opsi "allwrite" di ruang kerja Anda. Ini akan memberi tahu Perforce bahwa semua file harus ditulis ke disk dengan set bit yang dapat ditulis. Anda kemudian dapat mengubah file apa pun yang Anda inginkan tanpa secara tegas memberi tahu Perforce. Agar Perforce merekonsiliasi perubahan yang Anda buat, Anda dapat menjalankan "status p4". Ini akan membuka file untuk menambah, mengedit, dan menghapus yang sesuai. Saat bekerja dengan cara ini, Anda ingin menggunakan "pembaruan p4" alih-alih "sinkronisasi p4" untuk mendapatkan revisi baru dari server; "pembaruan p4" memeriksa perubahan sebelum disinkronkan sehingga tidak akan mengganggu perubahan lokal Anda jika Anda belum menjalankan "status p4".
Mengapa Checkout Eksplisit?
Pertanyaan yang sering saya terima adalah "mengapa Anda ingin menggunakan checkout eksplisit?" Awalnya dapat memerah tampaknya menjadi keputusan desain gila, tetapi checkout eksplisit memang memiliki beberapa manfaat yang kuat.
Salah satu alasan untuk menggunakan checkout eksplisit adalah menghilangkan kebutuhan untuk memindai file untuk perubahan konten. Sementara dengan proyek yang lebih kecil menghitung hash untuk setiap file untuk menemukan perbedaan cukup murah, banyak pengguna kami memiliki jutaan file di ruang kerja dan / atau memiliki file yang berukuran 100 megabita, jika tidak lebih besar. Menghitung semua hash dalam kasus tersebut sangat memakan waktu. Checkout eksplisit memungkinkan Perforce tahu persis file mana yang perlu bekerja dengannya. Perilaku ini adalah salah satu alasan Perforce sangat populer di industri file besar seperti game, film, dan industri perangkat keras.
Manfaat lain adalah checkout eksplisit menyediakan bentuk komunikasi asinkron yang memungkinkan pengembang tahu secara umum apa yang sedang dikerjakan rekan-rekan mereka, atau setidaknya di mana. Ini dapat memberi tahu Anda bahwa Anda mungkin ingin menghindari bekerja di area tertentu untuk menghindari konflik yang tidak perlu, atau dapat mengingatkan Anda pada fakta bahwa pengembang baru dalam tim telah berkeliaran ke dalam kode yang mungkin tidak mereka perlukan untuk mengedit. Pengalaman pribadi saya adalah bahwa saya cenderung bekerja di Git atau menggunakan Perforce dengan allwrite pada proyek-proyek di mana saya menjadi satu-satunya kontributor atau kontributor yang jarang, dan checkout eksplisit ketika saya bekerja erat dengan sebuah tim. Untungnya pilihan ada di tangan Anda.
Checkout eksplisit juga bermain baik dengan konsep Perforce daftar perubahan tertunda. Daftar perubahan yang tertunda adalah ember tempat Anda dapat memasukkan file terbuka untuk mengatur pekerjaan Anda. Di Git Anda berpotensi menggunakan cabang berbeda sebagai ember untuk mengorganisir pekerjaan. Cabang memang bagus, tapi terkadang menyenangkan untuk mengatur pekerjaan Anda menjadi beberapa perubahan bernama sebelum benar-benar mengirimkan ke server. Dengan model Perforce yang berpotensi memetakan banyak cabang atau beberapa proyek ke dalam satu ruang kerja, daftar perubahan yang tertunda membuatnya mudah untuk menjaga perubahan yang terpisah terorganisir.
Jika Anda menggunakan IDE untuk pengembangan seperti Visual Studio atau Eclipse, saya sangat menyarankan untuk menginstal plugin Perforce untuk IDE Anda. Sebagian besar plugin IDE akan secara otomatis checkout file ketika Anda mulai mengeditnya, membebaskan Anda dari keharusan melakukan checkout sendiri.
Ganti Perforce Untuk Fitur Git
git stash
==> p4 shelve
- git cabang lokal ==> baik rak Perforce atau cabang tugas
git blame
==> p4 annotate
atau Perforce Timelapse View dari GUI
Bekerja Terputus
Ada dua opsi untuk bekerja yang terputus dari layanan versi Perforce (itulah istilah umum kami untuk server Perforce).
1) Gunakan P4Sandbox untuk memiliki versi lokal lengkap dan percabangan lokal
2) Edit file sesuka Anda dan gunakan 'status p4' untuk memberi tahu Perforce apa yang telah Anda lakukan
Dengan kedua opsi di atas, Anda dapat memilih untuk menggunakan pengaturan "allwrite" di ruang kerja Anda sehingga Anda tidak perlu membuka kunci file. Saat bekerja dalam mode ini, Anda akan ingin menggunakan perintah "pembaruan p4" untuk menyinkronkan file baru alih-alih "sinkronisasi p4". "pembaruan p4" akan memeriksa perubahan file sebelum menyinkronkannya.
Mulai Cepat Paksa
Semua contoh berikut akan melalui baris perintah.
1) Konfigurasikan koneksi Anda ke Perforce
export P4USER=matt
export P4CLIENT=demo-workspace
export P4PORT=perforce:1666
Anda dapat menempel pengaturan ini di file konfigurasi shell Anda, gunakan p4 set
untuk menyimpannya di Windows dan OS X, atau menggunakan file konfigurasi Perforce.
1) Buat ruang kerja
p4 workspace
# set your root to where your files should live:
Root: /Users/matt/work
# in the resulting editor change your view to map the depot files you care about
//depot/main/... //demo-workspace/main/...
//depot/dev/... //demo-workspace/dev/...
2) Dapatkan file dari server
cd /Users/matt/work
p4 sync
3) Periksa file yang ingin Anda kerjakan dan modifikasi
p4 edit main/foo;
echo cake >> main/foo
4) Kirim ke server
p4 submit -d "A trivial edit"
5) Jalankan p4 help simple
untuk melihat perintah dasar yang Anda perlukan untuk bekerja dengan Perforce.