HocThuatSo.comHọc Thuật Số
Gửi thư
Git và tái lập tính toán

Git cho người làm nghiên cứu: mười lệnh đủ dùng cho một dự án

Mười lệnh Git đủ để quản lý mã phân tích và bản thảo của một đề tài: khởi tạo, ghi nhận, xem lịch sử, so sánh, quay lại, đánh dấu phiên bản nộp bài, kèm cách bỏ qua dữ liệu lớn và quy ước ghi thông điệp.

Git cho người làm nghiên cứu: mười lệnh đủ dùng cho một dự án

Một dự án nghiên cứu chỉ cần khoảng mười lệnh Git: init, status, add, commit, log, diff, show, restore, revert, tag, cộng tệp .gitignore để bỏ qua dữ liệu lớn. Thế là đủ để biết kết quả nào sinh từ mã nào và quay lại bất cứ bước nào.

Nhiều người làm nghiên cứu ngại Git vì nghĩ đó là công cụ của lập trình viên. Thực tế phần lớn tính năng của Git phục vụ phát triển phần mềm nhóm lớn, còn nhu cầu của một nghiên cứu sinh đơn giản hơn nhiều: không còn những tệp tên phantich_final_v3_sua.R, biết chính xác bảng 2 trong bài báo được tính bằng phiên bản mã nào, và lấy lại được đoạn mã đã xoá tuần trước. Các ví dụ dưới đây chạy trong Terminal trên macOS, Linux hoặc Git Bash trên Windows.

Trước lệnh đầu tiên: cài đặt và khai tên một lần

Cài Git từ trang chính thức hoặc qua trình quản lý gói của hệ điều hành, rồi khai danh tính. Thông tin này gắn vào mọi lần ghi nhận:

  1. git config --global user.name 'Nguyen Thi An'
  2. git config --global user.email [email protected]
  3. git config --global init.defaultBranch main để nhánh chính mang tên main, khớp mặc định của GitHub.

Nếu dùng RStudio, VS Code hay Positron, các công cụ này có bảng Git dựng sẵn bấm được bằng chuột. Vẫn nên biết lệnh, vì khi có sự cố, thông báo lỗi nói bằng ngôn ngữ của lệnh.

Mười lệnh và việc mỗi lệnh làm

Bảng xếp theo thứ tự bạn sẽ gặp trong một dự án.

LệnhLàm gìVí dụ
git initBiến thư mục dự án thành kho Gitgit init trong thư mục de-tai-khao-sat
git statusXem tệp nào đã sửa, tệp nào chưa theo dõigit status
git addChọn thay đổi đưa vào lần ghi nhận tớigit add ma/lam_sach.R
git commitGhi nhận một trạng thái kèm thông điệpgit commit -m 'Loai 12 phieu tra loi duoi 50%'
git logXem lịch sử ghi nhậngit log --oneline
git diffSo sánh thay đổi chưa ghi nhận, hoặc giữa hai lần ghi nhậngit diff a1b2c3d HEAD -- ma/mo_hinh.R
git showXem nội dung một lần ghi nhận hoặc một tệp ở thời điểm cũgit show a1b2c3d:ma/mo_hinh.R
git restoreBỏ thay đổi chưa ghi nhận, hoặc lấy tệp từ thời điểm cũgit restore --source=a1b2c3d ma/mo_hinh.R
git revertTạo lần ghi nhận mới đảo ngược một lần ghi nhận cũgit revert a1b2c3d
git tagĐánh dấu phiên bản quan trọnggit tag -a nop-lan-1 -m 'Ban nop tap chi lan 1'

Chuỗi a1b2c3d trong ví dụ là mã rút gọn của một lần ghi nhận, lấy từ kết quả của git log --oneline. HEAD là lần ghi nhận mới nhất của nhánh đang đứng.

Ghi nhận thế nào cho có ích về sau

Mỗi lần ghi nhận là một ý

Ghi nhận khi xong một việc trọn vẹn: thêm bước loại phiếu không hợp lệ, đổi mô hình hồi quy, sửa nhãn biểu đồ. Đừng gom cả tuần làm việc vào một lần ghi nhận, vì sau này không tách ra được. Cũng đừng ghi nhận mỗi lần sửa một dấu phẩy.

Thông điệp viết cho chính bạn sáu tháng sau

Dòng đầu ngắn, nói cái gì đổi và vì sao, viết ở thể mệnh lệnh: “Loại 12 phiếu trả lời dưới 50% câu hỏi”, “Đổi sai số chuẩn sang dạng cụm theo xã”. Với phân tích, thông điệp nên ghi ảnh hưởng tới kết quả nếu có: “Bảng 2 đổi, hệ số thu nhập giảm từ 0,31 xuống 0,27”. Đây là thứ giúp bạn trả lời phản biện khi bị hỏi vì sao số liệu trong bản sửa khác bản nộp đầu.

Dùng add có chọn lọc

git add . đưa mọi thứ vào, kể cả tệp tạm và dữ liệu lỡ quên khai bỏ qua. Thói quen tốt là chạy git status trước, rồi git add đúng các tệp đã sửa. Lệnh git add -p cho chọn từng đoạn thay đổi trong một tệp khi bạn lỡ sửa hai việc cùng lúc.

Quay lại khi phân tích đi sai đường

Bỏ thay đổi chưa ghi nhận

Sửa thử cả buổi rồi thấy hướng sai: git restore ma/mo_hinh.R đưa tệp về đúng trạng thái lần ghi nhận gần nhất. Lệnh này xoá thay đổi không có đường lấy lại, nên chạy git diff xem trước.

Lấy lại một tệp từ quá khứ

Cần lại phiên bản mô hình của tháng trước: tìm mã lần ghi nhận bằng git log --oneline -- ma/mo_hinh.R, xem nội dung cũ bằng git show a1b2c3d:ma/mo_hinh.R, và nếu muốn dùng lại thì git restore --source=a1b2c3d ma/mo_hinh.R, rồi ghi nhận như một thay đổi mới.

Huỷ một lần ghi nhận đã chia sẻ

git revert a1b2c3d tạo lần ghi nhận mới làm ngược lại lần cũ, lịch sử vẫn giữ nguyên. Tránh dùng git reset --hard trên lịch sử đã đẩy lên kho chung, vì nó viết lại lịch sử và làm rối máy của người khác.

Bỏ qua dữ liệu lớn và tệp sinh ra bằng .gitignore

Git sinh ra để theo dõi tệp văn bản như mã và bản thảo, không phải dữ liệu nặng hay tệp nhạy cảm. Tạo tệp .gitignore ở thư mục gốc, mỗi dòng một mẫu:

  • du_lieu_goc/ để bỏ cả thư mục dữ liệu gốc.
  • *.sav, *.xlsx để bỏ các tệp dữ liệu nhị phân.
  • ket_qua/hinh/ nếu hình được sinh lại từ mã.
  • .Rhistory, .Rproj.user/, __pycache__/, .ipynb_checkpoints/ cho tệp tạm của R và Python.
  • .env và mọi tệp chứa mật khẩu, khoá truy cập.

Nếu lỡ ghi nhận một tệp rồi mới thêm vào .gitignore, Git vẫn tiếp tục theo dõi nó. Gỡ khỏi danh sách theo dõi mà không xoá tệp trên máy bằng git rm --cached du_lieu_goc/khaosat.sav, rồi ghi nhận. Tệp vẫn còn trong lịch sử cũ; nếu là dữ liệu nhạy cảm đã đẩy lên kho chung thì cần xử lý kỹ hơn, xem phần bảo mật trong bài về GitHub cho nhóm.

Đánh dấu phiên bản nộp bài và trả lời phản biện

Lúc nộp bản thảo, chạy git tag -a nop-lan-1 -m 'Ban nop tap chi lan 1'. Khi phản biện yêu cầu sửa, bạn sẽ thay đổi mã và số liệu; đến lúc nộp lại, gắn tiếp nop-lan-2. Lệnh git diff nop-lan-1 nop-lan-2 --stat liệt kê mọi tệp đã đổi giữa hai lần nộp, rất tiện để viết thư trả lời phản biện và kiểm không bỏ sót.

Thẻ cũng là điểm neo khi phát hành mã: bản phát hành trên GitHub gắn với một thẻ, và Zenodo cấp DOI cho đúng bản đó. Đặt tên thẻ không dấu, không dấu cách.

Một buổi làm việc mẫu từ đầu tới cuối

Đầu buổi

Mở Terminal ở thư mục dự án, chạy git status để chắc không còn thay đổi dở dang từ hôm trước. Nếu có, hoặc ghi nhận nốt, hoặc bỏ đi bằng git restore. Bắt đầu một ngày từ trạng thái sạch giúp mỗi lần ghi nhận trong ngày chỉ chứa đúng việc của ngày đó.

Trong buổi

Sửa tệp làm sạch để loại các phiếu trùng mã hộ. Chạy lại phân tích, kiểm số phiếu còn lại. Xem lại thay đổi bằng git diff, rồi git add ma/lam_sach.R và git commit -m 'Loai phieu trung ma ho, con 588 phieu'. Tiếp tục sang việc thứ hai, sửa nhãn trục cho hình 3, ghi nhận riêng.

Cuối buổi

Chạy git log --oneline xem lại những gì đã làm trong ngày. Nếu có kho từ xa, đẩy lên bằng git push để có bản sao lưu ngoài máy. Lịch sử này về sau chính là nhật ký phân tích, trả lời được câu hỏi vì sao cỡ mẫu trong bài là 588 chứ không phải 600.

Lỗi hay gặp ở tuần đầu dùng Git

Khởi tạo kho trong thư mục quá rộng. Chạy git init ở thư mục người dùng hay ổ Documents làm Git theo dõi hàng nghìn tệp không liên quan. Mỗi dự án một kho, khởi tạo trong đúng thư mục dự án.

Đặt kho trong thư mục đồng bộ đám mây. Dịch vụ đồng bộ có thể chép dở thư mục ẩn .git giữa hai máy và làm hỏng kho. Dùng kho từ xa như GitHub, GitLab để đồng bộ thay vì để Git trong thư mục đồng bộ.

Ghi nhận tệp Word và mong xem được khác biệt. Git lưu được tệp DOCX nhưng git diff không hiển thị khác biệt có nghĩa. Bản thảo muốn theo dõi chi tiết nên viết bằng định dạng văn bản như Markdown, Quarto hoặc LaTeX.

Sợ lệnh, không ghi nhận gì cả. Ghi nhận không làm mất gì. Mất dữ liệu trong Git hầu như chỉ đến từ restore và reset --hard trên thay đổi chưa ghi nhận.

Câu hỏi thường gặp

Người không biết lập trình có dùng Git được không?

Được. Mười lệnh trong bài đủ cho phần lớn nhu cầu, và RStudio, VS Code đều có bảng Git bấm chuột. Chỉ cần quen khái niệm ghi nhận và lịch sử là dùng hiệu quả.

Có nên đưa dữ liệu nghiên cứu vào Git không?

Tệp dữ liệu nhỏ dạng văn bản, không nhạy cảm thì được. Dữ liệu lớn, nhị phân hoặc có thông tin định danh nên để ngoài Git, khai trong .gitignore, lưu ở kho dữ liệu riêng và ghi mã băm.

Git và GitHub khác nhau thế nào?

Git là phần mềm quản lý phiên bản chạy trên máy bạn. GitHub là dịch vụ trực tuyến lưu kho Git để sao lưu và cộng tác. Dùng Git một mình không cần GitHub.

Thông điệp ghi nhận viết tiếng Việt có dấu được không?

Git hỗ trợ UTF-8 nên viết có dấu được. Một số terminal trên Windows hiển thị sai dấu, khi đó dùng Git Bash hoặc viết không dấu cho nhất quán.

Lỡ xoá tệp thì Git có lấy lại được không?

Nếu tệp đã từng được ghi nhận thì lấy lại được bằng git restore với đúng đường dẫn tệp. Phần thay đổi sau lần ghi nhận cuối thì không có trong Git.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

🧭
Bạn đang ở chặng nào của đường học vị?
Nhập chỗ bạn đang đứng và đích bạn nhắm — công cụ trả về số năm, chi phí và việc phải làm từng chặng.
Xem lộ trình của tôi →
Miễn phí, không cần tài khoản. Xem tất cả công cụ

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.

hoặc
[email protected]