Câu trả lời này hiện chỉ áp dụng cho việc sử dụng hai máy tính Linux [hoặc có thể cũng hoạt động trên Mac? - chưa được kiểm tra trên Mac] (đồng bộ hóa từ máy này sang máy khác) vì tôi đã viết tập lệnh đồng bộ hóa này trong bash. git
Tuy nhiên, nó chỉ đơn giản là một trình bao bọc xung quanh , vì vậy, hãy thoải mái lấy nó và chuyển đổi nó thành một giải pháp Python đa nền tảng hoặc một cái gì đó nếu bạn muốn
Điều này không trả lời trực tiếp câu hỏi của OP, nhưng nó rất gần, tôi đảm bảo nó sẽ trả lời câu hỏi của nhiều người khác trên trang này (bao gồm cả tôi, thực sự, khi tôi đến đây trước khi viết giải pháp của riêng tôi), vì vậy tôi Dù sao tôi cũng đang đăng nó ở đây.
Tôi muốn:
- sau đó phát triển mã bằng IDE mạnh mẽ như Eclipse trên máy tính Linux hạng nhẹ
- xây dựng mã đó thông qua ssh trên một máy tính Linux mạnh hơn, khác (từ dòng lệnh, KHÔNG phải từ bên trong Eclipse)
Hãy gọi máy tính đầu tiên nơi tôi viết mã "PC1" (Máy tính cá nhân 1) và máy tính thứ 2 nơi tôi xây dựng mã "PC2". Tôi cần một công cụ để dễ dàng đồng bộ hóa từ PC1 sang PC2. Tôi đã thử rsync
, nhưng nó cực kỳ chậm đối với các repos lớn và mất hàng tấn băng thông và dữ liệu.
Vì vậy, làm thế nào để tôi làm điều đó? Tôi nên sử dụng quy trình công việc nào? Nếu bạn cũng có câu hỏi này, đây là quy trình làm việc mà tôi đã quyết định. Tôi đã viết một tập lệnh bash để tự động hóa quá trình bằng cách sử dụng git
để tự động đẩy các thay đổi từ PC1 sang PC2 thông qua một kho lưu trữ từ xa, chẳng hạn như github. Cho đến nay nó hoạt động rất tốt và tôi rất hài lòng với nó. Theo tôi, nó nhanh hơn nhiều so với rsync
, đáng tin cậy hơn bởi vì mỗi PC duy trì một repo chức năng và sử dụng ít băng thông hơn để thực hiện đồng bộ hóa, do đó, có thể dễ dàng thực hiện trên một điểm nóng của điện thoại di động mà không cần sử dụng hàng tấn dữ liệu của bạn.
Thiết lập:
Cài đặt tập lệnh trên PC1 (giải pháp này giả định ~ / bin nằm trong $ PATH của bạn):
git clone https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
cd eRCaGuy_dotfiles/useful_scripts
mkdir -p ~/bin
ln -s "${PWD}/sync_git_repo_from_pc1_to_pc2.sh" ~/bin/sync_git_repo_from_pc1_to_pc2
cd ..
cp -i .sync_git_repo ~/.sync_git_repo
Bây giờ hãy chỉnh sửa tệp "~ / .sync_git numpo" mà bạn vừa sao chép ở trên và cập nhật các tham số của nó để phù hợp với trường hợp của bạn. Dưới đây là các tham số chứa:
# The git repo root directory on PC2 where you are syncing your files TO; this dir must *already exist*
# and you must have *already `git clone`d* a copy of your git repo into it!
# - Do NOT use variables such as `$HOME`. Be explicit instead. This is because the variable expansion will
# happen on the local machine when what we need is the variable expansion from the remote machine. Being
# explicit instead just avoids this problem.
PC2_GIT_REPO_TARGET_DIR="/home/gabriel/dev/eRCaGuy_dotfiles" # explicitly type this out; don't use variables
PC2_SSH_USERNAME="my_username" # explicitly type this out; don't use variables
PC2_SSH_HOST="my_hostname" # explicitly type this out; don't use variables
Git sao chép repo của bạn mà bạn muốn đồng bộ hóa trên cả PC1 và PC2.
- Đảm bảo tất cả các phím ssh của bạn được thiết lập để có thể đẩy và kéo đến repo từ xa từ cả PC1 và PC2. Đây là một số liên kết hữu ích:
- https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh
- https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
- Đảm bảo tất cả các khóa ssh của bạn được thiết lập thành ssh từ PC1 đến PC2.
Bây giờ cd
vào bất kỳ thư mục nào trong repo git trên PC1 và chạy:
sync_git_repo_from_pc1_to_pc2
Đó là nó! Khoảng 30 giây sau, mọi thứ sẽ được đồng bộ hóa một cách kỳ diệu từ PC1 sang PC2 và nó sẽ in toàn bộ thời gian để cho bạn biết những gì nó đang làm và nơi nó thực hiện trên đĩa của bạn và trên máy tính nào. Nó cũng an toàn, vì nó không ghi đè hoặc xóa bất cứ thứ gì không được cam kết. Thay vào đó, nó sao lưu nó lên đầu tiên! Đọc thêm dưới đây để biết cách làm việc.
Đây là quá trình tập lệnh này sử dụng (nghĩa là: những gì nó thực sự đang làm)
- Từ PC1: Nó kiểm tra xem có bất kỳ thay đổi không được cam kết nào trên PC1 không. Nếu vậy, nó cam kết cho họ một cam kết tạm thời trên nhánh hiện tại. Sau đó, lực lượng đẩy chúng đến một nhánh SYNC từ xa. Sau đó, nó không tham gia vào cam kết tạm thời của nó, nó đã thực hiện trên nhánh cục bộ, sau đó nó đặt repo git cục bộ trở lại chính xác như thế nào bằng cách dàn dựng bất kỳ tệp nào được dàn dựng trước đó tại thời điểm bạn gọi tập lệnh. Tiếp theo, nó
rsync
sao chép tập lệnh qua PC2 và thực hiện một ssh
cuộc gọi để báo cho PC2 chạy tập lệnh với một tùy chọn đặc biệt để chỉ thực hiện công cụ PC2.
- Đây là những gì PC2 hiện: nó
cd
s vào repo, và kiểm tra xem nếu bất kỳ địa phương thay đổi không bị giam tồn tại. Nếu vậy, nó tạo ra một nhánh sao lưu mới tách khỏi nhánh hiện tại (tên mẫu: my_branch_SYNC_BAK_20200220-0028hrs-15sec
<- thông báo đó là YYYYMMDD-HHMMhrs - SSsec) và cam kết mọi thay đổi không được cam kết với nhánh đó bằng thông báo cam kết như DO BACKUP OF ALL NHỮNG THAY ĐỔI THAY ĐỔI TRÊN PC2 (MỤC TIÊU PC / MÁY XÂY DỰNG). Bây giờ, nó kiểm tra nhánh SYNC, kéo nó từ kho lưu trữ từ xa nếu nó chưa có trên máy cục bộ. Sau đó, nó tìm nạp các thay đổi mới nhất trên kho lưu trữ từ xa và thực hiện thiết lập lại cứng để buộc kho lưu trữ SYNC cục bộ khớp với kho lưu trữ SYNC từ xa. Bạn có thể gọi đây là "kéo cứng". Tuy nhiên, nó an toàn vì chúng tôi đã sao lưu mọi thay đổi chưa được cam kết mà chúng tôi đã có trên PC2, vì vậy không có gì bị mất!
- Đó là nó! Bây giờ bạn đã tạo ra một bản sao hoàn hảo từ PC1 sang PC2 mà không cần phải đảm bảo các thư mục hoạt động sạch sẽ, vì tập lệnh đã xử lý tất cả các cam kết tự động và công cụ cho bạn! Nó nhanh và hoạt động rất tốt trên các kho lưu trữ khổng lồ. Giờ đây, bạn có một cơ chế dễ dàng để sử dụng bất kỳ IDE nào bạn chọn trên một máy trong khi xây dựng hoặc thử nghiệm trên máy khác, một cách dễ dàng, qua điểm nóng wifi từ điện thoại di động của bạn nếu cần, ngay cả khi kho lưu trữ là hàng chục gigabyte và bạn đã có thời gian và hạn chế tài nguyên.
Tài nguyên:
- Toàn bộ dự án: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
- Xem thêm nhiều liên kết và tài liệu tham khảo trong chính mã nguồn trong dự án này.
- Làm thế nào để thực hiện "kéo cứng", như tôi gọi: Làm cách nào để buộc "git pull" ghi đè lên các tệp cục bộ?
Liên quan:
- đồng bộ hóa kho git giữa các máy tính, khi di chuyển xung quanh?