Pro Git (P1)
Lời mở đầu
Trong cuộc sống , con người luôn cố gắng tìm ra những cách khác nhau để giúp cuộc sống của mình trở nên dễ dàng, hiệu quả và bớt phải lo lắng nhiều hơn. Trong công việc cũng thế. Chúng ta luôn cải tiến, sáng tạo để tìm ra những cách thức, những công cụ tốt hơn để giúp công việc của chúng ta đạt được hiệu quả cao nhất cũng như tránh được những rủi ro không đáng có. Đăc biệt, trong lĩnh công nghệ thông tin nói chung và đối với những lập trình viên nói riêng, việc này lại càng quan trọng. Thao tác và sửa đổi trên dự án diễn ra hàng ngày với tần suất lớn dẫn đến nhu cầu cấp thiết về một hệ thống quản lí và lưu trữ giúp chúng ta có thể dễ dàng kiểm soát được toàn bộ dự án của mình và không cần lo lắng về những rủi ro về mất mát dữ liệu. Git được sinh ra để phục vụ mục đích này. Và hơn thế nữa, đây là một công cụ tuyệt vời giúp chúng ta cải tiến đáng kể hiệu suất công việc của mình và giúp bạn tránh được những cơn đau đầu không đáng có :). Loạt bài viết này là bản dịch của cuốn sách Pro Git(https://git-scm.com/book/en/v2), được viết bởi Scott Chacon và Ben Straub và được xuất bản bởi Apress. Bản dịch này được thực hiện bởi nhóm nghiên cứu Version Control System. Phiên bản in của cuốn sách có sẵn trên Amazon.com.
1.1 Bắt đầu – Giới thiệu về Version Control
Chương này sẽ giới thiệu về việc bắt đầu với Git. Chúng ta sẽ bắt đầu bằng cách giải thích một số nền tảng về các công cụ kiểm soát phiên bản, sau đó sẽ hướng tới tìm hiểu cách thức hoạt động của Git trên hệ thống và cuối cùng là tìm hiểu cách thiết lập để có thể bắt đầu làm việc với Git.Ở cuối chương này, bạn sẽ hiểu vì sao Git lại xuất hiện, tại sao nên sử dụng và hơn hết, bạn nên sẵn sàng để sử dụng nó.
Giới thiệu về Version Control
Version Control là gì và tại sao bạn lại cần quan tâm đến nó? Version control là một hệ thống ghi lại những sự thay đổi đối với một tệp dữ liệu hoặc một tập các tệp dữ liệu theo thời gian để bạn có thể kiểm tra lại các phiên bản đã thay đổi sau này.Đối với các ví dụ trong cuốn sách này, bạn sẽ sử dụng mã nguồn phần mềm như là các tệp được kiểm soát phiên bản, mặc dù trong thực tế bạn có thể làm điều này gần như với tất cả mọi loại tệp trên máy tính.
Nếu bạn là một nhà thiết kế web hay thiết kế đồ hoạ và muốn giữ mọi phiên bản của một hình ảnh hay bố cục (cái mà chắc chắn bạn sẽ muốn), một hệ thống kiểm soát phiên bản (Version Control System – VCS) rất hữu ích để được sử dụng.Nó cho phép bạn đưa các tệp đã chọn về trạng thái trước đó, đưa toàn bộ dự án về trạng thái trước đó, so sánh sự thay đổi qua thời gian, kiểm tra xem ai là người cuối cùng tác động làm thay đổi một điều gì đó dẫn đến vấn đề đã xảy ra, ai đã đưa ra vấn đề, khi nào và còn nhiều chức năng hơn thế nữa. Hiểu đơn giản thì VCS giống như một cuốn nhật kí công việc ghi lại mọi hoạt động của các thành viên khi thao tác với công việc mà nó quản lí nhưng lại có những tính năng vượt trội và nhiều hơn là chỉ ghi lại nhật kí làm việc. Sử dụng VCS cũng giúp bạn dễ dàng phục hồi khi làm hỏng hay làm mất tệp tin. Ngoài ra, chi phí cần bỏ ra cho tất cả nhưng điều này là rất thấp.
Hệ thống kiểm soát phiên bản cục bộ
Phương pháp kiểm soát phiên bản của nhiều người là sao chép các tệp tin vào một thư mục khác (tốt nhất là một thư có ghi dấu thời gian, nếu họ khôn ngoan).Cách tiếp cận này là rất bình thường vì nó rất đơn giản, nhưng nó cũng rất dễ bị lỗi. Bạn rất dễ quên thư mục mình đã lưu trữ hay sao chép sai tập tin và nhiều lỗi khác nữa.
Để giải quyết vấn đề này, các lập trình viên từ lâu đã phát triển một hệ thống kiểm soát phiên bản cục bộ (Local VCSs) có cơ sở dữ liệu đơn giản và lưu giữ tất cả các thay đổi đối với các tệp nằm dưới sự kiểm soát của nó.
Hình 1. Kiểm soát phiên bản cục bộ.
Một trong những công cụ VCS phổ biến nhất là một hệ thống có tên RCS, hiện vẫn được phân phối với nhiều máy tính. RCS hoạt động bằng cách giữ các bản vá (các phiên bản tại các thời điểm khác nhau của tệp) ở định dạng đặc biệt trên đĩa, sau đó nó có thể tạo tập tin tại bất cứ thời điểm nào, khác nhau ra sao bằng cách thêm tất cả các bản vá.
Hệ thống kiểm soát phiên bản tập trung
Vấn đề lớn tiếp theo mà mọi người gặp phải là họ cần cộng tác với các nhà phát triển trên các hệ thống khác. Để giải quyết vấn đề này, Hệ thống kiểm soát phiên bản tập trung (CVCS) đã được phát triển. Các hệ thống này (chẳng hạn như CVS, Subversion và Perforce) có một máy chủ duy nhất chứa tất cả các tệp được phiên bản và một số máy khách kiểm tra các tệp từ vị trí trung tâm đó. Trong nhiều năm, đây là tiêu chuẩn để kiểm soát phiên bản.
Hình 2. Kiểm soát phiên bản tập trung.
Thiết lập này cung cấp nhiều lợi thế, đặc biệt là các “local VCS”. Ví dụ, mọi người đều biết ở một mức độ nhất định những gì mọi người khác trong dự án đang làm. Quản trị viên có quyền kiểm soát chi tiết về việc ai có thể làm gì và quản lí CVCS dễ dàng hơn nhiều so với việc xử lý cơ sở dữ liệu cục bộ trên mỗi khách hàng.
Tuy nhiên, thiết lập này cũng có một số nhược điểm nghiêm trọng. Rõ ràng nhất là điểm thất bại duy nhất mà máy chủ tập trung đại diện. Nếu máy chủ đó ngừng hoạt động trong một giờ, thì trong giờ đó, không ai có thể tương tác hay lưu các thay đổi cho những gì họ đã làm. Nếu đĩa cứng cơ sở dữ liệu trung tâm bị hỏng và các bản sao lưu thích hợp không được lưu giữ, bạn sẽ mất tất cả mọi thứ – toàn bộ lịch sử của dự án ngoại trừ mọi “snapshots” mà người dùng có trên máy cục bộ của họ. Các hệ thống local VCS gặp phải vấn đề tương tự – bất cứ khi nào bạn lưu trữ toàn bộ lịch sử của dự án ở một nơi duy nhất, bạn có nguy cơ mất tất cả.
Hệ thống kiểm soát phiên bản phân tán
Đây là nơi các Hệ thống kiểm soát phiên bản phân tán (DVCS) bước vào. Trong một DVCS (như Git, Mercurial, Bazaar hoặc Darcs), khách hàng không chỉ xem ảnh chụp nhanh nhất của các tệp. Thay vào đó, họ phản ánh đầy đủ các kho lưu trữ, bao gồm cả lịch sử đầy đủ của nó. Do đó, nếu bất kỳ máy chủ nào chết và các hệ thống này đang tương tác thông qua máy chủ đó, bất kỳ kho lưu trữ máy khách nào cũng có thể được sao chép vào máy chủ để khôi phục nó. Mỗi bản sao thực sự là một bản sao lưu đầy đủ của tất cả các dữ liệu.
Hình 3. Kiểm soát phiên bản phân tán.
Hơn nữa, nhiều hệ thống trong số này xử lý khá tốt với việc có một số kho lưu trữ từ xa mà chúng có thể tương tác, do đó bạn có thể cộng tác với các nhóm người khác nhau theo những cách khác nhau trong cùng một dự án. Điều này cho phép bạn thiết lập một số loại quy trình công việc không thể có trong các hệ thống tập trung, chẳng hạn như các mô hình phân cấp.
Kết luận
Đến đây, chúng ta tạm thời khép lại phần đầu tiên của cuốn sách này. Qua phần này, chúng ta đã có một số khái niệm cơ bản cũng như nắm được cơ chế hoạt động và một số loại hình kiểm soát phiên bản. Từ đó, chúng ta có thể tiến vào sâu hơn trong cuốn sách này để tìm hiểu kĩ hơn về Git.
Tìm đọc phần tiếp theo tại đây.