Concurrent Versions System

**Concurrent Versions System** atau **Sistem Kontorl Versi (CVS)** adalah sistem kontrol revisi yang awalnya dikembangkan oleh Dick Grune pada bulan Juli 1986. CVS beroperasi sebagai antarmuka untuk RCS, sebuah sistem pendahulu yang beroperasi pada file tunggal. CVS mengembangkan RCS dengan menambahkan dukungan untuk pelacakan perubahan pada tingkat repositori serta model klien-server. CVS dirilis di bawah ketentuan GNU General Public License sehingga perangkat lunak dapat digunakan secara gratis.

## Desain
CVS beroperasi sebagai perangkat lunak antarmuka untuk Revision Control System (RCS), sebuah sistem kontrol versi yang lebih tua yang mengelola file individual/tunggal dan bukan untuk seluruh proyek repositori. CVS memperluas fungsinya dari RCS dengan menambahkan dukungan untuk pelacakan perubahan pada tingkat repositori sekaligus model klien-server. File dilacak menggunakan format catatan yang sama seperti dalam RCS, dengan direktori tersembunyi yang berisi file log yang sesuai untuk setiap file dalam repositori.

CVS menggunakan kompresi delta untuk penyimpanan yang efisien dari versi-versi yang berbeda dari file yang sama. Membuat CVS dapat bekerja dengan baik untuk file teks besar dengan sedikit perubahan dari satu versi ke versi berikutnya, yang umumnya terjadi pada file kode sumber. Di sisi lain, saat CVS diminta untuk menyimpan file sebagai biner, ia akan menyimpan setiap versi individu di server. Hal ini umumnya digunakan untuk file non-teks seperti gambar yang dieksekusi, di mana sulit untuk membuat delta yang kompak antara kedua versi.

CVS tidak menyertakan tautan simbolik karena ketika disimpan dalam sistem kontrol versi, tautan simbolik dapat menimbulkan risiko keamanan. Sebagai contoh, tautan simbolik ke file sensitif dapat disimpan di repositori, membuat file sensitif dapat diakses bahkan ketika tidak di-check-in/push. Sebagai pengganti tautan simbolik, skrip yang memerlukan hak istimewa dan intervensi untuk dieksekusi agar di-check-in/push ke CVS.

## Operasi
CVS menyebut satu proyek (kumpulan file terkait) yang dikelolanya sebagai modul. Sebuah server CVS menyimpan modul-modul yang dikelolanya di repositorinya. Programer mendapatkan salinan modul dengan melakukan check out/pull. File yang sudah di-check out berfungsi sebagai salinan kerja, bak pasir/inkubator, atau ruang kerja. Perubahan pada salinan kerja tercermin di repositori dengan melakukan commit. Update berarti mendapatkan atau menggabungkan perubahan di repositori dengan salinan kerja.

CVS menggunakan arsitektur klien–server: server menyimpan versi terkini dari suatu proyek dan sejarahnya, dan klien terhubung ke server untuk "check out" atau "pull" salinan lengkap proyek, agar dapat bekerja pada salinan tersebut, dan kemudian "check in" atau "push" atas perubahan yang baru dibuat. Server CVS dapat mengizinkan "akses baca tanpa identitas", di mana klien dapat check out dan membandingkan versi dengan kata sandi kosong atau sederhana (contohnya, "anoncvs"); hanya saat melakukan check-in perubahan diperlukan akun dan kata sandi pribadi dalam skenario ini. Beberapa pengembang dapat bekerja pada proyek yang sama secara bersamaan, masing-masing mengedit file dalam "salinan kerja" mereka sendiri, dan mengirimkan (atau check in) perubahannya ke server. Untuk menghindari konflik, server hanya menerima perubahan yang dilakukan pada versi terkini dari sebuah file. Oleh karena itu, diharapkan pengembang untuk selalu menjaga salinan kerjanya tetap terkini dengan menggabungkan perubahan orang lain secara teratur. Tugas ini sebagian besar ditangani secara otomatis oleh klien CVS, memerlukan intervensi manual hanya saat konflik pengeditan muncul antara modifikasi yang sudah di-check in dan versi lokal yang belum di-check.

Klien juga dapat menggunakan perintah "update" untuk membawa salinan lokal mereka ke versi terbaru di server. Klien juga dapat membandingkan versi, meminta sejarah perubahan lengkap, atau check out snapshot historis dari proyek (misalnya: berdasarkan tanggal tertentu). Jika operasi check-in berhasil, maka nomor versi semua file yang terlibat akan otomatis meningkat, dan server menulis baris deskripsi yang diberikan pengguna, tanggal, dan nama pengarang ke file lognya. CVS juga dapat menjalankan skrip pemrosesan log eksternal yang ditentukan pengguna setelah setiap commit. Skrip ini diinstal melalui entri dalam file CVS `loginfo`, yang dapat memicu pemberitahuan email atau mengonversi data log menjadi format berbasis web.

CVS juga dapat menjaga cabang  atau branching yang berbeda dari suatu proyek. Misalnya, versi yang sudah dirilis dari proyek perangkat lunak dapat membentuk satu cabang, digunakan untuk perbaikan bug, sementara versi dalam pengembangan terkini, dengan perubahan besar dan fitur baru, dapat membentuk cabang terpisah. CVS mengasumsikan bahwa sebagian besar pekerjaan dilakukan di "trunk", dan cabang seharusnya pada umumnya bersifat singkat atau historis. Ketika digunakan seperti yang dirancang, cabang dapat dikelola dengan mudah dan operasi cabang menjadi efisien dan cepat.

## Portabilitas
Server pada perangkat lunak biasanya berjalan di Unix (meskipun setidaknya server CVSNT juga mendukung berbagai varian Microsoft Windows), sementara klien CVS dapat berjalan di platform sistem operasi apa pun.

## Sejarah
Grune mengatakan:Grune secara publik merilis kode tersebut pada 23 Juni 1986.[10]

Kode yang akhirnya berkembang menjadi versi CVS saat ini dimulai dengan Brian Berliner pada April 1989, dengan kontribusi selanjutnya dari Jeff Polk dan banyak kontributor lainnya. Brian Berliner menulis makalah yang memperkenalkan perbaikan-perbaikan pada program CVS—yang menjelaskan bagaimana alat ini diperluas dan digunakan secara internal oleh Prisma, pengembang pihak ketiga yang bekerja pada kernel SunOS, dan dirilis untuk kepentingan komunitas di bawah lisensi GPL. Pada 19 November 1990, CVS versi 1.0 dikirimkan ke Free Software Foundation untuk pengembangan dan distribusi.

Versi terbaru dirilis pada 8 Mei 2008.

## Penerus
Di dunia perangkat lunak sumber terbuka, CVS telah lama menjadi pilihan banyak pengembang untuk alat untuk kontrol versi. Hal tersebut dikarenakan CVS sendiri adalah perangkat lunak gratis dan pengoperasiannya yang tidak membatasi serta dukungannya untuk operasi berjaringan yang memungkinkan puluhan programmer yang terpisah secara geografis untuk berbagi pekerjaan mereka sesuai dengan sifat kolaboratif dunia sumber terbuka dengan baik. CVS dan model pengembangannya yang semi-kaotis telah menjadi pondasi dari sumber terbuka.

Seiring waktu, para pengembang telah membuat sistem kontrol versi baru berbasis CVS untuk menambah fitur, mengubah model operasional, dan meningkatkan produktivitas pengembang. Proyek pengganti CVS termasuk diantaranya CVSNT dan Subversion.

## Catatan

* 
* 
* 
* 

## Referensi