Hẳn là các bạn có nghe nhiều về Git, Github, cụ thể các bạn có thể thấy trong các bài viết của mình chương trình hầu hết đều được đưa lên Github. Vậy mình đã làm điều đó như thế nào ? Nhân tiện up thêm code của chương trình Nông nghiệp thông minh với Arduino, mình xin chia sẻ với các bạn cách sử dụng Github đơn giản nhất

Từ một chuyện thực tế là có một team gồm hai ba anh chàng soái ca đang hợp tác với nhau cùng xây dựng một firmware/phần mềm cho khách hàng. Dĩ nhiên mấy anh chàng này sẽ làm việc với nhau bằng cách mỗi người tự viết code một ít sau đó nén file lại và gửi cho nhau qua email hoặc tin nhắn facebook. Mỗi người sau khi nhận được code của nhau sẽ tiến hành tự xem và sửa lại, sau đó cùng nhau ghép vào firmware/phần mềm mà họ cần làm. Tuy nhiên, một hôm anh A trong nhóm bỗng nhiên vô tình viết code sai dẫn tới sản phẩm bị lỗi, mà trước đó thì cả nhóm chủ quan không lưu lại bản backup do phần mềm đã quá lớn. Và thế là các anh lại cùng nhau ngồi fix chỗ bị lỗi và tiếp tục gửi cho nhau như vậy.

Thế vấn đề ở đây là gì ?

  • Việc tự code riêng và gửi cho nhau qua email/ tin nhắn rất mất thời gian của nhau. Giá như trong một team, anh A có thể chủ động xem những thay đổi/review được code của anh B từ xa và tiến hành gộp trực tiếp những thay đổi của anh B vào sản phẩm thì đỡ biết bao nhiêu.
  • Việc sửa code mà không sao lưu khiến cho cả team lại mất thời gian debug, thậm chí viết lại cả firmware/phần mềm từ đầu.

Và thế là Git ra đời có thể giúp ta khắc phục và giải quyết được vấn đề khi làm việc nhóm.

Git là gì ?

Git là tên gọi của một Hệ thống quản lý phiên bản phân tán (Distributed Version Control System – DVCS). DVCS nghĩa là hệ thống giúp mỗi máy tính có thể lưu trữ nhiều phiên bản khác nhau của một mã nguồn được nhân bản (clone) từ một kho chứa mã nguồn (repository), mỗi thay đổi vào mã nguồn trên máy tính sẽ có thể ủy thác (commit) rồi đưa lên máy chủ nơi đặt kho chứa chính. Và một máy tính khác nếu có quyền truy cập cũng có thể clone lại mã nguồn từ kho chứa hoặc clone lại một tập hợp các thay đổi mới nhất trên máy tính kia.

Lý thuyết là thế nhưng chúng ta có thể hiểu đơn giản là với Git thì nó sẽ giúp ta lưu lại các phiên bản mỗi khi có sự thay đổi mã nguồn, đo đó nếu có làm sai ở đâu đó trong phiên bản mới thì ta vẫn có thể dễ dàng khắc phục bằng cách khôi phục lại phiên bản cũ ổn định hơn.

Lý do dùng Github ?

Qua bài viết giới thiệu các công cụ để quản lý code thì mình cũng có nói tới một số công cụ để quản lý source code cho mọi người rồi. Có vấn đề mọi người dễ nhầm lẫn ở đây là Git và Github, Git là tên gọi của một mô hình hệ thống, còn Github lại là một dịch vụ máy chủ repository công cộng, mỗi người đều có thể tạo tài khoản và đưa source code của mình lên đây.

Vậy tại sao lại nên dùng Github ?

  • Dễ sử dụng, an toàn và nhanh chóng. (chỉ khó khi mới bắt đầu thôi 🙁 )
  • Có thể giúp quy trình làm việc code theo nhóm đơn giản hơn rất nhiều bằng việc kết hợp các phân nhánh (branch).
  • Có chỗ lưu trữ source code miễn phí, phù hợp với các nguồn mở.
  • Có thể làm việc ở bất cứ đâu vì chỉ cần clone mã nguồn từ kho chứa hoặc clone một phiên bản thay đổi nào đó từ kho chứa, hoặc một nhánh nào đó từ kho chứa.
  • Dễ dàng trong việc deployment sản phẩm.
  • Giúp chứng tỏ bạn là ai thông qua các chương trình, source code mà bạn làm
  • Giúp bạn cải thiện được khả năng code thông qua việc đọc code và code chung với người khác
  • Đây là kho tài nguyên vô tận với hàng hà vô số các project mã nguồn mở

Cài đặt Github

Để làm việc được với Github thì cần có

  • Tài khoản và Repository
  • Github Desktop
  • Cấu hình để đồng bộ

Tạo tài khoản

Rất đơn giản, vào trang https://github.com/ , sau đó nhập thông tin như tạo tài khoản facebook thôi.

Tải Github Desktop và cấu hình

Việc sử dụng Github thông thường dính nhiều tới các lệnh, nếu bạn chưa quen với các hệ điều hành như linux/ ubuntu mà vẫn muốn trung thành với windows hoặc bạn còn bỡ ngỡ ban đầu thì việc sử dụng Github Desktop là một giải pháp khá ổn.

Để tải Github Desktop bạn vào địa chỉ  https://desktop.github.com/, tải bản cài về và cài như một chương trình bình thường. Sau khi cài xong sẽ có biểu tượng Github trên desktop, bạn click chuột vào đó để mở phần mềm

Ở màn hình welcome bạn cần làm một số thao tác sau:

  • Mục login nhập id và pass của bạn, sau đó chọn Login
  • Mục config bạn chọn tên bất kỳ ở ô đầu tiên, ô thứ 2 là email của bạn
  • Mục repositories sẽ kiểm tra xem trên server của bạn có source code nào không ? Do chưa tạo nên bạn chọn skip

Up code của mình lên repo

Ví dụ cơ bản ở đây là trường hợp của mình, mình có viết một số chương trình và muốn chia sẻ với mọi người thông qua Github. Sau đây là các bước làm

Bước 1: Vào web github tạo một repo

Bước 2: Nhập tên

Bước 4: Mở Github desktop clone repo mình vừa tạo về, nếu github bạn quá nhiều repo thì dùng chức năng tìm kiếm nhé

Bước 5: Sau khi ấn Clone thì sẽ có thông báo lưu trữ repo này, bạn có thể lưu ở bất kỳ vị trí nào bạn muốn, ví dụ mình lưu cái thư mục này ở ổ D, trỏ nó về ổ D, sau đó OK.

Coi như xong, giờ mình vào ổ D xem thì chỉ có 1 thư mục trống tên test-hd-git, mình sẽ copy code, tạo file mới,… vào đây, sau này mình cũng sẽ làm việc trên thư mục này luôn.

Giờ thì mình copy chương trình LCD16x2 với Arduino vào thư mục test-hd-git

Bước 6: Mở Github Desktop ra chọn vào thư mục test-hd-git thực hiện đẩy code lên github theo các bước từ 1-5

Bước 6: Xem kết quả trên github, bạn có thể thấy thư mục mình đẩy lên đã lên github rồi, giờ thì cứ mỗi lần mình sửa đổi code bên dưới máy tính thì sẽ có thông báo dấu chấm ở Changes, mình nhập nội dung và mô tả như mục 3, chọn commit master như mục 4 và ấn sync ở vị trí của mục 5 sẽ tiếp tục cập nhật phiên bản tiếp theo lên Github.

Bước 7: Chia sẻ repo của mình với mọi người, như link của mình có thể chia sẻ với các bạn là https://github.com/hocarm/test-hd-git

Khôi phục lại phiên bản cũ của repo

Trong quá trình làm việc, mình có thể thoải mái chỉnh sửa code, thêm tính năng mới, loại bỏ các tính năng cũ không ổn định,… Tuy nhiên nếu lỡ xóa nhầm file, hoặc code sai mà muốn khôi phục lại bản trước đó được lưu trên server thì phải làm sao ?

Bước 1:  Mở gitshell bằng cách chuột phải vào thư mục test-hd-git chọn Open gitshell

Bước 2: Gõ lệnh

$ git fetch origin
$ git reset --hard origin/master

Lệnh này sẽ tự khôi phục source code của bạn về phiên bản được lưu trên github

Folk repo của người khác

Trong quá trình làm, bạn có thể sẽ thấy rất nhiều nguồn source code khác nhau, để mình có thể sử dụng được repo người khác thì cần phải clone repo của họ về máy của mình, cách thực hiện rất đơn giản, đó là chọn fork

Ví dụ mình muốn fork thư viện DHT của Adafruit thì:

Contribute một dự án

Để đóng góp cùng phát triển source code cho ai đó (mình lấy ví dụ ở đây với thư viện DHT của Adafruit) thì mình cần thực hiện theo các bước sau:

Bước 1: Fork source code của họ như mình đã nói trên

Bước 2: Clone project đã fork về máy tính của mình thông qua Github Desktop

Bước 3: Cập nhật và đồng bộ thông tin mới nhất từ repo gốc bằng lệnh

$ git remote add upstream https://github.com/xxxx.git
$ git fetch upstream
$ git checkout master
$ git merge upstream/master

Ví dụ mình muốn cập nhật mới nhất từ thư viện DHT thì mình sẽ thay chỗ xxx.git bằng

$ git remote add upstream https://github.com/adafruit/DHT-sensor-library.git

Địa chỉ git bạn có thể copy từ mục Clone or Download

Lưu ý
Luôn thực hiện thao tác này trước khi bạn commit code lên, mục đích là để trách xung đột với repo gốc.

Bước 3: Chỉnh sửa và tối ưu code, ví dụ như thêm các chức năng vào thư viện

Bước 4: Commit và sync lên github, lúc này những thay đổi của mình chỉ được cập nhật lên tài khoản github của cá nhân, chưa có sự thay đổi trên repo gốc (Adafruit)

Bước 5: Thực hiện pull request lên thư mục gốc, chờ chủ repo thảo luận, sau khi thấy hợp tình hợp lý thì họ sẽ merge code cũng như bổ sung các tính năng mới cập nhật của bạn vào code, đồng thời đưa bạn vào danh sách contributors luôn.

Coi như một số bước cơ bản làm quen đã xong, nếu các bạn muốn tìm hiểu sâu hơn có thể xem thêm hướng dẫn từ github https://guides.github.com/

Tạm kết

Mình đã đưa ra được một số hướng dẫn cơ bản thông qua ví dụ cụ thể để các bạn có thể tự đẩy code của mình lên github, ngoài ra còn có thể hồi phục lại code khi lỡ có làm gì linh tinh, và có thể fork code của người khác về sử dụng chỉnh sửa, thậm chí cùng commit và làm việc chung với cả nhóm khi cần đóng góp để phát triển source code đó lên một tầm mới. Hi vọng với bài viết sẽ giúp cho nhiều bạn có thể khẳng định được tên tuổi của bản thân thông qua github cũng như đóng góp vào việc phát triển mã nguồn mở chung cho mọi người cùng sử dụng.