Rất nhiều nhà phát triển đã từng nghe về cái gọi là version control, nhưng họ có thể không biết đầy đủ về chúng là cái gì và lợi ích của chúng trong quản lý dự án của họ như nào. Trong bài viết này chúng ta đi tìm hiểu lợi ích công việc với version control và sự khác nhau giữa GIT và SVN, những cái version control được dùng nhiều nhất hiện nay.Phương án đơn giản nhất để giải thích Version control là sử dụng các kho dự án file cùng nhau với lịch sử của các mã nguồn của bạn trong cùng một vị trí. Điều này làm cho những nhà phát triển dự án theo dõi mỗi sự thay đổi tạo ra với mã nguồn, những ai làm thay đổi và lý do thay đổi.
Những file đó bình thường sẽ nằm trên một vài server từ máy tính của những nhà phát triển, sau đó họ đẩy những file của họ lên khi hoàn thành việc gõ xong mã nguồn.
Nó cũng cho phép bạn đánh dấu mã nguồn của bạn vào thời điểm đó, tạo dễ dàng quay trời lại thời điểm đó nếu những tính năng mới đó làm đổ vỡ mã nguồn của bạn. Version control có thể cũng có lợi cho nhà phát triển độc lập(một mình) trên dự án của họ và nó cần thiết cho đội những nhà phát triển làm việc trên cùng một dự án.
TẠI SAO PHẢI SƯ DỤNG VERSION CONTROL?
Version control là cần thiết khi làm việc cho đội phát triển, nếu bạn đang làm với đội phát triển và không có version control, chắc chắn bất kì một ai đó sẽ dừng công việc bởi không biết ai làm cái gì và đọc điều đó ở đâu.
Nếu bạn không có version control, phương án duy nhất bạn có thể làm việc là chia sẻ mã nguồn của bạn trên các nơi lưu trữ có thể và bạn có thể truy cập tất cả file mã nguồn đó để thấy những thay đổi đó. Nhưng mọi thứ đều làm công việc đi sai hướng, đầu tiên là không có từ hai nhà phát triển làm việc trên cùng một file ở cùng một thời điểm. Nếu hơn hai nhà phát triển làm việc trên nó, người cuối cùng lưu lại sẽ vượt quyền thay đổi những mã nguồn của người khác. Sử dụng version control giúp cho nhiều nhà phát triển làm việc trên một file ở cùng một thời điểm, khi họ đã hoàn thành những thay đổi mã nguồn, họ có thể commit chúng trở lại kho mã nguồn. Khi bạn đã commit file quay trở lại kho, nó sẽ trộn lẫn những thay đổi đó trong version control.
Vấn đề thứ hai đó là không có lịch sử mã nguồn vì vậy nếu bạn tạo ra một tính năng mới và demo nó với khách hàng và họ quyết định họ không muốn nó nữa, bạn sẽ phải đi tới mã nguồn và xóa đi những thứ mà bạn đã làm. Nếu bạn đã sử dụng version control bạn có thể sẽ lấy lại mã nguồn trước khi phát triển những tính năng mới đó.
Vấn đề thứ ba cho việc bạn không thể sử dụng thiếu version control đó là tính năng “trách nhiệm”. Version control sẽ ghi lại ai đã viết ra các phần mã nguồn, điều đó có nghĩa là với nhũng phần mã nguồn mà bạn không biết tại sao nó ở đây, bạn sử dụng version control để kiểm tra mã nguồn để nói với bạn, nhà phát triển nào viết điều đó vì vậy bạn có thể hỏi nhà phát triển đó giải thích lý do tại sao họ làm điều này.
Tagging là một tính năng quan trọng bạn cần có để nâng cao khi làm việc với versioncontrol.Khi bạn hoàn thành với một phần công việc và sẵn cho việc triển khai mã nguồn, bạn sau đó tag phiên bản mã nguồn đó. Điều đó là cần thiết cho việc tạo ra các nhánh mã nguồn khác nhau ở thời điểm tạo đó. Sau đó bạn có thể triển khai mã nguồn với những tag đó, cho phép bạn trích xuất ra mã nguồn đó mà bạn có trên máy chủ. Lợi ích của điều này nếu có vấn đề với phiên bản phát hành hiện tại đó, bạn có thể dễ dàng quay trở lại thời điểm tạo ra tag đó.
LỰA CHỌN VERSION CONTROL
Bây giờ bạn đã hiểu những lợi ích của việc sử dụng version control, nhưng giờ bạn sẽ lựa chọn cái nào để dùng?
Có nhiều kiểu phiên bản version control, ở đây chúng ta sẽ xem xét hai version control hay dùng và phổ biết nhất hiện nay là Git và SVN. Bạn có thể thấy chúng khá giống nhau, nhưng phương án làm việc của hai cái đó là khác nhau hoàn toàn. Không có cái nào là tốt hơn cái nào, nó tùy thuộc vào việc bạn sẽ học nó và phục vụ cho công việc của bạn, cũng như cái gì bạn muốn sử dụng nó.
SVN
SVN or Subversion là một trong những version control được sử dụng phổ biến hiện nay, nó dễ hiểu và rất rõ trong các luồng công việc. Hiện tại kho plugin WordPress sử dụng SVN.
Nó làm việc với một máy chủ trung tâm kho mã nguồn, những kho đó là được chia vào 3 key chính đó là Trunk, Branches(nhánh), tags. Mỗi cái đều có vai trò quan trọng của riêng chúng.
Trunk
Cái này là nơi lưu trữ mã nguồn gốc, nó sẽ không được commit các phần mã nguồn vào trong đó, nó giống như khu vực trung tâm nơi bất cứ ai làm việc trên dự án sẽ lấy các cập nhật tại đây. Khi bạn làm việc với một tính năng mới bạn sẽ branches (nhánh) mã nguồn từ trunk, khi bạn gõ mã hoàn thành tính năng mới đó, sau đó bạn sẽ merge tất cả những thay đổi đó vào trunk.
Branches
Như giải thích ở trên branch(nhánh) là sử dụng khi bạn tạo ra một tính năng mới, vì vậy bạn branch mã nguồn từ trunk. Điều này nghĩa là bạn có thể lấy ra bản sao chép trunk và đặt điều này vào trong một folder mới bện trong khu vực branch. Bây giờ bạn có thể làm việc trong đó với việc tạo ra tính năng mới của bạn, sau khi hoàn thanh bạn sẽ merge những thay đổi đó vào trong trunk.
Lợi ích của điều này giúp cho bạn phát triển tính năng mới mà bạn có thể commits vào trong branche(nhánh) và bạn có thể không làm đổ vỡ trunk cho một ai đó khác làm việc trên cùng dự án., nó giữ cho trunk ổn định nhất có thể.
Tags
Tag là phương án tạo mã nguồn của bạn vào một thời điểm nào đó, nó giống như branch làm với mã nguồn của bạn. Chúng sẽ làm điều đó với một bản sao chép từ mã nguồn trunk và đặt nó vào bên trong một folder mới với thư mục tag. Sự khác nhau đó là tag sẽ không bao giờ sử dụng cho phát triển mã nguồn, chúng là phưong án dễ dàng cho việc lấy lại mã nguồn của bạn.
Thời điểm khi sử dụng tag là cho việc triển khai mã nguồn, khi bạn hoàn thành những mã nguồn mới, mereg vào trong trunk, test đầy đủ và sẵn sàng cho việc phát hành, khi đó bạn sử dụng tag. Bạn sẽ tạo tag trên trunk và đánh dấu tính năng mới đó, bạn có thể nắm giữ tag và triển khai nó tới máy chủ của bạn. Lợi ích làm điều này là nếu bản phát hành mới đổ vỡ, bạn có thể lấy lại mã nguồn quay trở lại thời điểm tag trước đó.
GIT
Thời điểm này GIT là một version control phổ biến và hay dùng nhất, bởi sự phổ biết của website Github. Giống như trước đây đã đề cập GIT và SVN là khá giống nhau nhưng luồng công việc là có chút ít khác nhau. SVN là chỉ có một kho trung tâm, nhưng GIT có đa kho, tức là một kho trung tâm những mỗi nhà phát triển có những kho riêng của họ.
Lợi ích cho việc chia nhỏ đó vào trong nhiều kho mã nguồn đó là sự hỏng hóc ở một chỗ nào đó. Với SVN nếu kho trung tâm là bị hỏng hoặc mã nguồn bị đổ vỡ sau khi phát triển, thì không một nhà phát triển nào khác sử dụng cho việc commit mã nguồn của họ cho đến khi kho được sủa chữa lại. Với GIT thì mỗi nhà phát triển đều có một kho riêng của họ, nó không phải là kho chính nếu kho chính bị đổ vỡ, họ có thể tiếp tục commit mã nguồn trên kho cá nhân , cho đến khi kho chính là được sửa và sau đó họ có thể đẩy mã nguồn của họ vào trong kho chính đó.
Một lợi ích khác là kho cá nhân đó là commit nhanh, không mất băng thông mạng cần cho việc commit mã nguồn vào trong source control, những nhà phát triển có thể làm việc độc lập cho đến khi sẵn đẩy mã nguồn tới kho chính.
Luồng công việc mà bạn sử dụng khi phát triển với việc dùng GIT như sau:
Khi làm việc trên dự án bạn sẽ sao chép bản sao mã nguồn từ kho chính, có nghĩa rằng bạn có thể tạo ra một bản sao mã nguồn ở thời điểm đó. Điều này tạo ra một kho GIT cục bộ trên máy tính cá nhân của bạn, nơi bạn có thể tiếp tục công việc cho việc phát triểnt tính năng mới. Bạn có thể sử dụng kho cục bộ đó như sử dụng nó như sử dụng SVN đó là tạo branche mới , tags mới và tiếp tục commit mã nguồn lên kho cục bộ trong khi phát triển.
Khi tính năng mới của bạn hoàn thành và bạn sẵn merge những thay đổi đó vào trong kho chính bạn cần đẩy những thay đổi đó lên từ kho cục bộ của bạn tới kho chính. Đây chỉ là phần ít sử dụng nhất trong GIT và nó tương tự như commit trong SVN, nhưng bạn sẽ không thường sử dụng commit và sử dụng commit trong GIT nhanh chóng.