What is version control? Why is it important for due diligence?
By Stuart Yeates, Published: 01 January 2005, Reviewed: 24 August 2012
Theo: http://www.oss-watch.ac.uk/resources/versioncontrol
Bài được đưa lên Internet ngày: 24/08/2012
Lời người dịch: Các hệ thống kiểm soát phiên bản như CVS, Subversion, Git... là một phần không thể thiếu đối với các dự án PMTDNM để giúp làm việc trực tuyên, cộng tác và phân tán một cách có hiệu quả, không chỉ đối với việc theo dõi sự thay đổi của mã nguồn và phiên bản của phần mềm, mà còn cả những vấn đề khác như quản lý gốc gác lai lịch mã nguồn cho mục đích xác định các quyền sở hữu trí tuệ và phân tích pháp lý... . Các hệ thống này thường có trên các site như GitHub, SourceForge hay Google Code, và chúng đưa ra vô số các công cụ cần thiết khác cho một dự án PMTDNM, đặc biệt cho những ai không có đủ khả năng có được các tài nguyên như vậy, ví dụ như lưu trữ, tải về phiên bản, các danh sách thư, các trình theo dõi lỗi, việc đặt chỗ cho web... Tóm lại, để triển khai một dự án PMTDNM, bạn nhất thiết cần tới một hệ thống kiểm soát phiên bản.
Một hệ thống kiểm soát phiên bản - Version Control System (còn được gọi là Hệ thống Kiểm soát Rà soát lại) là một kho các tệp, thường là các tệp mã nguồn của các chương trình máy tính, với sự truy cập được giám sát. Từng thay đổi được thực hiện đối với nguồn được theo dõi, cùng với những người thực hiện sự thay đổi, vì sao họ đã thay đổi nó, và các tham chiếu tới những vấn đề được sửa, hoặc những cải tiến được giới thiệu, với sự thay đổi đó.
Các hệ thống kiểm soát phiên bản là cơ bản cho bất kỳ dạng phát triển cộng tác và phân tán nào. Bất kể lịch sử của một trang wiki hay một dự án phát triển phần mềm lớn nào, thì khả năng để theo dõi từng thay đổi khi nó được thực hiện, và những thay đổi ngược lại khi cần thiết có thể tạo ra tất cả sự khác biệt giữa một qui trình được quản lý và kiểm soát tốt và một hệ thống 'tới trước, được phục vụ trước' không được kiểm soát. Nó cũng có thể phục vụ như một cơ chế để thẩm định cho các dự án phần mềm.
Theo dõi phiên bản
Các lập trình viên có thể mong muốn so sánh phiên bản hôm nay của một số phần mềm với phiên bản ngày hôm qua hoặc phiên bản của năm ngoái. Vì các hệ thống kiểm soát phiên bản theo dõi từng phiên bản phần mềm đó, điều này trở thành một tác vụ hiển nhiên. Việc biết được cái gì, ai và khi nào những thay đổi sẽ giúp so sánh hiệu năng của các phiên bản cụ thể, việc khắc phục khi các lỗi được đưa ra (hoặc được sửa) và các vấn đề khác. Bất kỳ vấn đề nào nảy sinh từ một sự thay đổi có thể sau đó được theo dõi với một sự xem xét ai đã thực hiện sự thay đổi đó và những lý do mà họ đã đưa ra cho việc tiến hành sự thay đổi đó.
Điều phối các đội
Quản lý các tài nguyên thường được các đội triển khai, hoặc cùng ở một nơi hoặc được phân tán. Kiểm soát phiên bản là trung tâm đối với việc điều hành các đội của những người đóng góp. Nó cho phép một người đóng góp làm việc trong một bản sao các tài nguyên và sau đó phát hành những thay đổi của họ ngược trở về cái lõi chung khi sẵn sàng. Những người đóng góp khác làm việc trong các bản sao các tài nguyên y hệt của riêng họ cũng đúng vào thời điểm đó, không bị ảnh hưởng vì những thay đổi của họ với nhau cho tới khi họ chọn để trộn hoặc đệ trình (commit) những thay đổi của họ ngược trở về cho dự án. Bất kỳ xung đột nào nảy sinh - khi 2 người đóng góp độc lập thay đổi cùng một phần của một tài nguyên - được tự động đánh dấu bằng cờ khi những thay đổi đó được trộn. Những xung đột như vậy sau đó có thể được những người đóng góp quản lý.
Thông thường trong các dự án nguồn mở, các hệ thống kiểm soát phiên bản cho phép bất kỳ ai cũng đọc và sao chép được các tài nguyên của dự án, nhưng chỉ những người sử dụng có quyền, được biết như là những người đề xuất (commiters), là được phép cập nhật mã nguồn trong kho đó.
Sự siêng năng
Nhiều hoạt động trong trong doanh nghiệp được đi kèm với một trách nhiệm pháp lý để thực hiện những kiểm tra 'siêng năng'. Chính xác những gì các kiểm soát đó kéo theo sẽ phụ thuộc vào hoạt động theo yêu cầu của doanh nghiệp đó, nhưng với lưu ý tới sở hữu trí tuệ thì một hoạt động 'siêng năng' quan trọng là việc theo dõi quyền sở hữu các phần cấu thành của nó. Vì thế ví dụ, nếu ai đó tạo ra một mẩu phần mềm và muốn tổ chức của anh - chị ta phát hành nó, thì tổ chức của anh - chị ta hầu hết chắc chắn sẽ muốn kiểm tra nguồn gốc lai lịch của tất cả mã trong phần mềm đó. Qui trình này được tạo thuận lợi bằng khả năng theo dõi xem ai đã thực hiện những thay đổi nào cho mã đó, và chúng đã được thực hiện khi nào. Một hệ thống kiểm soát phiên bản cho phép một danh sách những người đóng góp sẽ được biên dịch và các ngày tháng những đóng góp của họ sẽ được cá biệt hóa. Một danh sách như vậy có thể sẽ được kiểm tra chéo dễ dàng với một danh sách các hợp đồng về IP.
Phát triển mở liên quan tới những người đóng góp tạo ra những thay đổi nhỏ thường xuyên cho các tài nguyên. Một hệ thống kiểm soát phiên bản cung cấp phương tiện cho việc giám sát những thay đổi đó khi chúng xảy ra. Các hệ thống được tự động hóa sẽ thông báo cho những ai có trách nhiệm đối với việc quản lý IP ở các đầu ra của dự án. Những thông báo đó, đi cùng với các lưu ký được cung cấp cho từng thông báo cá nhân riêng rẽ, cho phép những người quản lý dự án giám sát và theo dõi tất cả những đóng góp.
Phát triển mở yêu cầu sự chăm sóc có liên quan tới gốc gác lai lịch của những đóng góp. Các dự án phát triển mở cần phải tuân theo thực tiễn tốt nhất trong lĩnh vực này. Nếu một vi phạm IP được thấy đã xảy ra, thì hệ thống kiểm soát phiên bản có thể được sử dụng để xác định mức độ của sự lây nhiễm (những tệp nào bị ảnh hưởng vì sự thay đổi có vấn đề đó), ai đã thực hiện sự thay đổi đó và khi nào họ đã thực hiện nó. Hệ thống kiểm soát phiên bản thậm chí có thể được sử dụng để phục hồi lại phiên bản phần mềm mới nhất không bị nhiễm.
Các hệ thống kiểm soát phiên bản cũng có thể được sử dụng để thiết lập quyền ưu tiên trước, khi có một sự tranh cãi về quyền sở hữu của mã hoặc các ý tưởng.
Các ví dụ
Kiểm soát phiên bản đã và đang được nghiên cứu và hiểu sát sao trong cộng đồng thiết kế phần mềm từ lâu. Các giải pháp là ổn định, khỏe mạnh và được hỗ trợ tốt. Có các hệ thống khác nhau phù hợp cho các đội địa phương nhỏ và cho các đội phân tán lớn, làm cho chúng thành lý tưởng đối với việc điều phối sự phát triển phần mềm, và cho việc làm giảm nhẹ những khác biệt trong văn hóa và vùng thời gian.
Kiểm soát phiên bản được cung cấp trên các site như SourceForge và Google Code. Các site đó thường xây dựng một bộ các dịch vụ xung quanh kiểm soát phiên bản: lưu trữ, tải về phiên bản, các danh sách thư, các trình theo dõi lỗi, việc đặt chỗ cho web và xây dựng các cụm. Dải các chức nang này làm cho chúng đặc biệt lôi cuốn cho các dự án mà không có các tài nguyên để duy trì máy chủ của riêng họ cho kiểm soát phiên bản.
CVS được sử dụng như là một hệ thống kiểm soát phiên bản nguồn mở được sử dụng phổ biến nhất nhưng những ngày này thì Subversion đã vượt qua nó và được sử dụng rất phổ biến trong các dự án nguồn mở. Tuy nhiên, một số hệ thống kiểm soát phiên bản nguồn mở mới hơn như Arch và Git đã có sự thâm nhập đáng kể. Những khả năng cơ bản của các hệ thống đó là rất tương tự, nhưng chúng đưa ra chức năng về an ninh, kết nối mạng và ảo hóa khác nhau, và các giấy phép khác nhau. Cũng có nhiều giải pháp sở hữu độc quyền có sẵn từ một dải các nhà cung cấp.
Như được thảo luận trước đó, kiểm soát phiên bản là một công cụ có giá trị khi giữ hồ sở và tiến hành phân tích cho các mục tiêu pháp lý. Các chủ đề đó được thảo luận trong Phát triển Nguồn Mở - Giới thiệu các Vấn đề về Quyền sở hữu và Cấp phép.
A version control system (also known as a Revision Control System) is a repository of files, often the files for the source code of computer programs, with monitored access. Every change made to the source is tracked, along with who made the change, why they made it, and references to problems fixed, or enhancements introduced, by the change.
Version control systems are essential for any form of distributed, collaborative development. Whether it is the history of a wiki page or large software development project, the ability to track each change as it was made, and to reverse changes when necessary can make all the difference between a well managed and controlled process and an uncontrolled ‘first come, first served’ system. It can also serve as a mechanism for due diligence for software projects.
Developers may wish to compare today’s version of some software with yesterday’s version or last year’s version. Since version control systems keep track of every version of the software, this becomes a straightforward task. Knowing the what, who, and when of changes will help with comparing the performance of particular versions, working out when bugs were introduced (or fixed), and so on. Any problems that arose f-rom a change can then be followed up by an examination of who made the change and the reasons they gave for making the change.
Resource development is usually carried out by teams, either co-located or distributed. Version control is central to coordinating teams of contributors. It lets one contributor work on a copy of the resources and then release their changes back to the common core when ready. Other contributors work on their own copies of the same resources at the same time, unaffected by each other’s changes until they choose to merge or commit their changes back to the project. Any conflicts that arise - when two contributors independently change the same part of a resource - are automatically flagged when the changes are merged. Such conflicts can then be managed by the contributors.
Typically in open source projects, version control systems allow anyone to read and copy the project resources, but only authenticated users, known as committers, are allowed to up-date source code in the repository.
Many activities in business are accompanied by a responsibility to perform ‘due diligence’ checks. Precisely what these checks entail will depend on the business activity in question, but with regard to intellectual property one important ‘due diligence’ activity is the tracking of the ownership of its constituent parts. So for example, if someone cre-ates a piece of software and wishes her organisation to release it, her organisation will almost certainly want to check the provenance of all the code within the software. This process is facilitated by the ability to track who made which changes to the code, and when they were made. A version control system enables a list of contributors to be compiled and the dates of their contributions to be ascertained. Such a list can be easily cross-checked with a list of IP contracts.
Open development involves contributors making small regular changes to resources. A version control system provides a means for monitoring those changes as they occur. Automated systems will notify those responsible for managing the IP in project outputs. These notifications, coupled with the logs provided for each individual modification, allow project managers to monitor and trace all contributions.
Open development demands care concerning the provenance of the contributions. Open development projects need to follow best practice in this area. If an IP infringement is found to have occurred, the version control system can be used to determine the extent of the contamination (which files were affected by the problematic change), who performed the change and when they performed it. A version control system can even be used to recover the last uncontaminated version of the software.
Version control systems can also be used to establish precedence, when there is a dispute regarding the ownership of code or ideas.
Version control has been closely studied and understood in the software engineering community for a long time. The solutions are stable, robust and well-supported. There are various systems suitable for small local teams and for large distributed teams, making them ideal for coordinating software development, and for mitigating differences in culture and timezone.
Version control is provided at sites such as SourceForge and Google Code. These sites typically build a suite of services around version control: archiving, release downloads, mailing lists, bug trackers, web hosting and build farms. This range of functionality makes them particularly attractive for those projects that do not have the resources to maintain their own server for version control.
CVS used to be the most wdely used open source version control system but these days Subversion has overtaken it and is very commonly used in open source projects. However, some newer open source version control systems such as Arch and Git have made significant inroads. The basic capabilities of these systems are very similar, but they offer different security, networking and abstraction functionality, and different licences. There are also many proprietary solutions available f-rom a range of suppliers.
As previously discussed, version control is a valuable tool when record-keeping and performing analysis for legal purposes. These topics are discussed in Open Source Development - An Introduction to Ownership and Licensing Issues.
Dịch: Lê Trung Nghĩa
Ý kiến bạn đọc
Những tin mới hơn
Những tin cũ hơn
Blog này được chuyển đổi từ http://blog.yahoo.com/letrungnghia trên Yahoo Blog sang sử dụng NukeViet sau khi Yahoo Blog đóng cửa tại Việt Nam ngày 17/01/2013.Kể từ ngày 07/02/2013, thông tin trên Blog được cập nhật tiếp tục trở lại với sự hỗ trợ kỹ thuật và đặt chỗ hosting của nhóm phát triển...