Tôi đã từ bỏ GitHub và xây dựng một hệ thống đồng bộ Git riêng giữa các máy tính

Tác giả T-X, T.M.Hai 30, 2025, 09:00:10 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 3 Khách đang xem chủ đề.

Với hồ sơ được cập nhật và toàn bộ lịch sử công việc của tôi, đây quả là một hệ thống lý tưởng.

Khi làm việc từ xa, tôi thường xuyên chuyển đổi giữa máy tính để bàn ở nhà và máy tính xách tay khi ra ngoài. Về lý thuyết, mọi chuyện đơn giản chỉ có vậy; tôi có thể làm việc ở bất cứ đâu, trên bất kỳ máy tính nào, chỉ cần đáp ứng một vài yêu cầu cơ bản.


Tuy nhiên, một trong những nhu cầu đó lại là một trở ngại nghiêm trọng: tôi cần phải mang theo công việc hiện tại của mình. Mọi nỗ lực trước đây để giải quyết vấn đề này đều có sai sót, nhưng Git chính là câu trả lời mà tôi đang tìm kiếm.

1. Tại sao nên sử dụng Git để đồng bộ hóa các tập tin cục bộ?

Được rồi, có những lựa chọn thay thế: ổ đĩa chia sẻ, ssh, rsync, vân vân. Vậy tại sao lại sử dụng Git trong trường hợp cụ thể này?

Thứ nhất, tôi rất quen thuộc với Git. Tôi sử dụng nó hàng ngày, đã cấu hình nó theo cách mình muốn và thậm chí còn hiểu khá rõ về cách hoạt động của nó! Git hiện là một công cụ đã được kiểm chứng, với vô số ứng dụng và lệnh hỗ trợ. Về cơ bản, nó là tiêu chuẩn thực tế cho việc kiểm soát phiên bản và nhìn chung nó hoạt động tốt, bất chấp sự phức tạp của nó.


Tôi cũng đang muốn sử dụng hệ thống quản lý phiên bản cho các tập tin này, để có bản sao lưu và lịch sử công việc đầy đủ. Git là lựa chọn hiển nhiên, vì vậy nếu tôi có thể tận dụng nó để đồng bộ hóa các tập tin trên các thiết bị, thì đó là hai việc cùng lúc được giải quyết.

Thỉnh thoảng, tôi sẽ dùng Google Drive để nhanh chóng lưu trữ thứ gì đó lên đám mây, nhưng nó có vẻ dễ hỏng và tốn nhiều công sức hơn mức cần thiết. Tương tự với USB, vốn không phải lúc nào cũng đáng tin cậy, hoặc ổ cứng ngoài: quá nhiều thao tác phức tạp cho một việc đáng lẽ phải diễn ra tức thì.

2. Tại sao bạn nên tránh sử dụng GitHub?

Một giải pháp khả thi cho vấn đề này là lưu trữ kho mã nguồn trên GitHub. Điều này cung cấp cho bạn một vị trí tập trung luôn khả dụng ( hầu hết thời gian ), miễn là bạn có kết nối internet.

Tuy nhiên, có hai vấn đề nhỏ ở đây. Thứ nhất, thời gian ngừng hoạt động mà tôi đã đề cập có thể là một vấn đề, mặc dù nó không phổ biến đến mức tôi phải dựa hoàn toàn vào điều đó để đưa ra quyết định. Nhưng việc lưu trữ một số tệp này trên máy chủ của bên thứ ba khiến tôi lo lắng: một số công việc này có thể là bí mật, và điều gì sẽ xảy ra nếu tôi vô tình gửi nhầm mật khẩu hoặc dữ liệu nhạy cảm khác?

Tất nhiên, tôi có thể làm việc với một kho lưu trữ riêng tư, nhưng tất cả điều này có vẻ không cần thiết: tại sao phải nhờ đến bên thứ ba từ xa trừ khi thực sự cần thiết? Tôi cũng không định sử dụng bất kỳ tính năng cộng tác hay quản lý dự án nào của nền tảng GitHub, vì vậy điều này có vẻ hơi thừa thãi. Chắc chắn phải có cách tốt hơn.

3. Cách giữ cho các tập tin luôn đồng bộ bằng Git

Và có một cách tốt hơn: sử dụng Git cục bộ. Việc đồng bộ hóa tập tin giữa các máy tính, xét cho cùng, là một phần cốt lõi trong chức năng của Git, và việc thực hiện điều đó trên mạng cục bộ thực chất không khác gì so với việc thực hiện trên internet.

Bạn sẽ thấy việc thiết lập hệ thống này rất nhanh chóng; nó chỉ bao gồm một vài bước riêng biệt. Nhưng mỗi bước đều đơn giản, và khi bạn đã thiết lập xong một lần, việc đồng bộ hóa sẽ dễ dàng.

3.1. Cho phép đăng nhập từ xa

Việc đầu tiên bạn cần thiết lập là quyền truy cập SSH. macOS gọi đây là "Đăng nhập từ xa", và bạn cần sử dụng cơ chế mà hệ điều hành của bạn cung cấp để thực hiện điều tương tự. Bạn chỉ cần thực hiện việc này trên một máy tính duy nhất, máy tính này sẽ lưu trữ kho lưu trữ.


Việc thay đổi thiết lập này sẽ cho phép bạn truy cập vào dòng lệnh khi chạy lệnh sau:

Mã nguồn [Chọn]
ssh username@ip-address
3.2. Thiết lập địa chỉ IP tĩnh

Đây là một bước khác sẽ phụ thuộc vào môi trường của bạn. Trên thực tế, nếu bạn đã thiết lập sẵn mạng cục bộ, bạn có thể bỏ qua bước này hoàn toàn và sử dụng DNS để cấu hình thiết lập Git của mình.

Tôi bắt đầu từ con số không, và tôi muốn giảm thiểu tối đa công việc mình phải làm. Để tránh làm phức tạp quá trình, tôi đã chọn sử dụng địa chỉ IP. Vấn đề duy nhất là bạn cần có các địa chỉ IP cục bộ nhất quán, nhưng chỉ cần cấu hình bộ định tuyến nhanh chóng là đủ.


Tóm lại, bạn chỉ cần thực hiện thao tác này trên máy chủ lưu trữ kho mã nguồn, nhưng việc thiết lập cho các thiết bị khác của bạn trong khi đang làm việc này cũng không có hại gì.

3.3. Tạo khóa SSH

Nếu bạn không muốn nhập thông tin đăng nhập mỗi khi đồng bộ hóa kho lưu trữ, tôi khuyên bạn nên thiết lập khóa SSH trên mỗi máy khách. Đây là thiết lập một lần duy nhất, sau đó sẽ cho phép bạn đồng bộ hóa tệp đến và từ mỗi máy mà bạn chạy nó trên đó.

Hãy bắt đầu bằng cách tạo một cặp khóa bằng chương trình ssh-keygen:

Mã nguồn [Chọn]
ssh-keygen
Bạn sẽ được yêu cầu nhập tên tệp và mật khẩu (tùy chọn), bạn có thể muốn sử dụng mật khẩu này vì lý do bảo mật. Sau khi tạo khóa, hãy tải khóa đó lên máy chủ bằng lệnh này:

Mã nguồn [Chọn]
ssh-copy-id -i /path/to/key/file username@ip-address
Đến bước này, tôi khuyên bạn nên kiểm tra xem mọi thứ có hoạt động bình thường hay không bằng cách:

Mã nguồn [Chọn]
ssh username@ip-address
3.4. Thiết lập một kho lưu trữ trống

Tôi thấy đây là giải pháp gọn gàng và dễ thiết lập nhất. Đầu tiên, bạn cần chọn một máy tính để lưu trữ kho mã nguồn: không phải là thư mục làm việc, mà là một kho Git trống có thể đóng vai trò là trung tâm đồng bộ hóa giữa các máy khách.

Chọn một thư mục thích hợp (tốt nhất là thư mục sẽ không bị di chuyển) và, bên trong thư mục đó, chạy lệnh sau:

Mã nguồn [Chọn]
git init --bare
Một kho lưu trữ trần (bare repository) chứa các tệp siêu dữ liệu Git—như HEAD và config—ở thư mục gốc chứ không phải trong thư mục.git như trong thư mục work tree.

Bài viết này hướng dẫn cách thiết lập kho lưu trữ (repo) từ đầu. Nếu bạn muốn thực hiện điều tương tự với một kho lưu trữ hiện có, hãy xem thêm tài liệu hướng dẫn khác git clone --bare.

3.5. Sao chép kho lưu trữ trên mỗi máy

Trên mỗi máy mà bạn muốn chia sẻ tập tin, hãy nhập tên thư mục bạn chọn, sau đó chạy lệnh để sao chép kho lưu trữ vào một cây thư mục làm việc mới. Trên máy đã lưu trữ kho lưu trữ gốc, bạn có thể sử dụng đường dẫn cục bộ, ví dụ:

Mã nguồn [Chọn]
git clone /path/to/repo
Trên bất kỳ máy nào khác, bạn cần sử dụng định dạng login@host:

Mã nguồn [Chọn]
git clone username@ip-address:path-to-repo
Ví dụ, trên hệ thống cục bộ của tôi, tôi đã chạy lệnh này:

Mã nguồn [Chọn]
git clone [email protected]:/Users/bobby/src/repos/bare/myproject
Thao tác này sẽ sao chép kho lưu trữ vào thư mục làm việc, tương tự như việc sao chép kho lưu trữ từ GitHub.

4. Tiếp tục công việc như thường lệ (thêm, cam kết và đẩy lên)

Giờ thì bạn có thể làm việc như bình thường. Chỉnh sửa tập tin, lưu chúng lại và thỉnh thoảng cập nhật chúng lên Git:

Mã nguồn [Chọn]
git add.
git commit -m 'my latest work'
git push

Hãy nhớ chạy lệnh `git push` khi bạn kết thúc công việc trong ngày, hoặc khi bạn chuẩn bị rời khỏi văn phòng và làm việc ở nơi khác. Khi bắt đầu làm việc mỗi ngày, hãy nhớ chạy lệnh `git pull` để cập nhật phiên bản mới nhất trên máy tính bạn đang sử dụng.

Rõ ràng, bạn có thể bỏ qua quy trình hàng ngày này nếu bạn biết mình chỉ làm việc trên cùng một máy, nhưng việc tạo thói quen này rất tốt để bạn luôn biết mình có bản sao công việc mới nhất.

Một lựa chọn khác là tự động hóa quy trình Git bằng cách sử dụng một công cụ như cron. Điều này sẽ giúp Git hoạt động hoàn toàn ngầm, cho phép bạn tập trung vào việc lưu tệp và làm việc của mình. Phương pháp tự động hóa sẽ dễ dàng hơn nhiều nếu bạn có lịch trình cố định và luôn bật máy tính.