git kho lưu trữ đồng bộ giữa các máy tính, khi di chuyển xung quanh?


89

Giả sử rằng tôi có một máy tính để bàn và một máy tính xách tay, đôi khi tôi làm việc trên máy tính để bàn và đôi khi tôi làm việc trên máy tính xách tay.

Cách dễ nhất để di chuyển kho lưu trữ git qua lại là gì?

Tôi muốn các kho lưu trữ git giống hệt nhau, để tôi có thể tiếp tục ở nơi tôi đã rời khỏi máy tính khác.

Tôi muốn đảm bảo rằng tôi có các nhánh và thẻ giống nhau trên cả hai máy tính.

Cảm ơn Johan

Lưu ý: Tôi biết cách thực hiện điều này với SubVersion, nhưng tôi tò mò về cách điều này sẽ hoạt động với git. Nếu dễ dàng hơn, tôi có thể sử dụng máy tính thứ ba làm máy chủ cổ điển mà hai máy tính: s có thể đồng bộ hóa với nhau.

Lưu ý: Cả hai máy tính đều chạy Linux.


Cập nhật :

Vì vậy, hãy thử ý tưởng của XANI: với một repo git trần trên máy chủ và cú pháp lệnh đẩy từ KingCrunch. Trong ví dụ này có hai máy khách và một máy chủ.

Vì vậy, hãy tạo phần máy chủ trước.

ssh user@server
mkdir -p ~/git_test/workspace
cd ~/git_test/workspace
git --bare init

Vì vậy, sau đó từ một trong những máy tính khác, tôi cố gắng lấy một bản sao của repo với clone:

git clone user@server:~/git_test/workspace/
Initialized empty Git repository in /home/user/git_test/repo1/workspace/.git/
warning: You appear to have cloned an empty repository.

Sau đó vào repo đó và thêm tệp:

cd workspace/
echo "test1" > testfile1.txt
git add testfile1.txt
git commit testfile1.txt -m "Added file testfile1.txt"
git push origin master

Bây giờ máy chủ được cập nhật với testfile1.txt.

Dù sao, hãy xem liệu chúng ta có thể lấy tệp này từ máy tính khác không.

mkdir -p ~/git_test/repo2
cd ~/git_test/repo2
git clone user@server:~/git_test/workspace/
cd workspace/
git pull

Và bây giờ chúng ta có thể thấy testfile.

Tại thời điểm này, chúng tôi có thể chỉnh sửa nó với một số nội dung hơn và cập nhật lại máy chủ.

echo "test2" >> testfile1.txt
git add testfile1.txt
git commit -m "Test2"
git push origin master

Sau đó, chúng tôi quay lại ứng dụng khách đầu tiên và thực hiện thao tác kéo git để xem tệp đã cập nhật. Và bây giờ tôi có thể di chuyển qua lại giữa hai máy tính và thêm một phần ba nếu tôi muốn.


Tập lệnh đồng bộ hóa để tự động hóa quá trình sử dụng git để đồng bộ hóa từ PC1 sang PC2 một cách nhanh chóng và sử dụng dữ liệu thấp, thậm chí qua điểm phát sóng wifi điện thoại di động (nhanh hơn hàng trăm lần so với rsync cho trường hợp sử dụng này!): Stackoverflow.com/questions / 4948190 /…
Gabriel Staples

Câu trả lời:


28

Tôi nghĩ, có nhiều cách tiếp cận. Tôi sẽ chỉ mô tả, cách tôi xử lý việc này

Tôi có một netbook làm máy chủ 24/7, chứa nhiều kho lưu trữ git. Từ / đến đó, tôi đẩy và kéo các thay đổi qua SSH. Để truy cập từ bên ngoài, tôi sử dụng dyndns.org. Nó hoạt động tốt, đặc biệt là vì tôi có nhiều hơn hai hệ thống, cần quyền truy cập vào một số kho lưu trữ.

Cập nhật: Một ví dụ nhỏ. Giả sử netbook của tôi được gọi là "netbook". Tôi tạo một kho lưu trữ ở đó

$ ssh username@netbook.local
$ cd ~/git
$ mkdir newThing
$ cd newThing
$ git init --bare

Trên máy tính để bàn của tôi, tôi sẽ tạo ra một bản sao của nó. Có lẽ tôi cũng sẽ thêm một số tệp

$ git clone username@netbook.local:/home/username/git/newThing
$ git add .
$ git commit -m "Initial"
$ git push origin master

Trên các thiết bị di động của tôi, tôi (trước tiên) sẽ làm như vậy, nhưng để truy cập từ xa (từ bên ngoài mạng LAN của tôi), tôi cũng sẽ thêm địa chỉ bên ngoài.

$ git clone username@netbook.local:/home/username/git/newThing
$ git remote add externalName username@mydyndns.home-ip.org:/home/username/git/newThing
$ git pull externalName master

Nó chỉ là cách git (/ git workflow) hoạt động. Bạn có thể thêm bao nhiêu kho lưu trữ từ xa tùy thích. Nó không quan trọng, nếu hai hoặc nhiều hơn đề cập đến cùng một kho lưu trữ "vật lý". Bạn không cần một "máy chủ" cục bộ riêng, bạn có thể sử dụng bất kỳ máy chủ công cộng nào mà bạn có quyền truy cập ssh. Và tất nhiên bạn không cần máy chủ công cộng, nếu bạn không cần truy cập từ bên ngoài. Kho lưu trữ trống cũng có thể nằm trên hệ thống máy tính để bàn và sau đó bạn có thể tạo một kho lưu trữ làm việc-sao chép trong hệ thống tệp cục bộ.

$ mkdir myRepo; cd myRepo
$ git init --bare
$ cd /path/to/myProject
$ git remote add origin /path/to/myRepo
$ git add .; git commit -m "Initial"; git push origin master

Đây là cách, cách tôi xử lý điều này, và đối với tôi, nó hoạt động khá ổn (nếu không muốn nói là hoàn hảo;))

Vài thứ để đọc: http://progit.org/ Cuốn sách thực sự hay.-


Nó sẽ trông như thế nào, khi bạn sử dụng các cách khác nhau vào repo? Bạn có muốn làm rõ câu trả lời của mình bằng một ví dụ không?
Johan

Cảm ơn, những ví dụ đó đã làm rõ rất nhiều :)
Johan

6

Tôi sẽ sao chép repo từ hộp này sang hộp khác, và sau đó thiết lập hai repo để tôi có thể chỉ git fetchtừ hộp khác.

Đổi tên điều khiển từ xa originthành tên của hộp khác làm cho các chi nhánh điều khiển từ xa dễ đọc hơn.

Lưu ý rằng bằng cách chỉ sử dụng git fetch(và không git push), điều này hoạt động tốt với các kho lưu trữ không trống:

[user@foo repo]$ git fetch -v bar

[user@bar repo]$ git fetch -v foo

5

Cách dễ nhất: repo trung tâm được tạo bằng --bare(vì vậy không có tệp đã kiểm xuất, chỉ có nội dung .git) hoặc github

"Đã phân phối" sẽ trông như thế:

Thiết lập:

  1. Trên máy tính xách tay: git remote add desktop ssh://user@desktop/home/user/repo/path
  2. Trên máy tính để bàn: git remote add laptop ssh://user@laptop/home/user/repo/path

Đồng bộ hóa:

git pull laptop/desktop (push sẽ không hoạt động tốt trên các repo không phải là trống vì git sẽ không sửa đổi các tệp đã kiểm tra khi đẩy sang repo từ xa)

Hoặc, thực hiện repo trên ổ đĩa;)


Tôi đã cố gắng sử dụng --bare repo, nhưng tôi không thể làm đúng toàn bộ quy trình công việc.
Johan

Tôi chỉ mới bắt đầu với git, và chuyển từ git cục bộ sang github và trở lại, tôi có thể làm cho đến nay, nhưng phương pháp máy tính với máy tính tôi không thể hoạt động. Câu hỏi ngu ngốc - tôi sử dụng thông tin đăng nhập nào user? Đối với github, tôi chỉ cần thêm các khóa rsa-pub. Tôi đã cố gắng thêm rsa-pub cho máy tính của người yêu cầu nhân bản vào known_hosts, nhưng điều đó không thành công ...
Dave

Đây là cách đơn giản nhất để tôi đồng bộ hóa giữa hai máy cục bộ mà không liên tục nhấn vào máy chủ từ xa.
johnzachary 16/10/12

1

Làm thế nào về việc sử dụng đơn giản rsync?


3
Tôi đã sử dụng rsync trong nhiều năm để giữ cho ba máy chủ được đồng bộ hóa. Nó hoạt động nhưng rsync không cung cấp cho bạn cách quay lại các thay đổi sau khi đồng bộ hóa xong. Tôi cũng đã mất rất nhiều tệp theo cách này vì tôi không đọc đủ gần đầu ra chạy khô và rsync được đặt để xóa các tệp không có trên tệp chính. Kể từ đó, tôi đã chuyển sang git và thấy đó là cách an toàn hơn nhiều để giữ các thư mục quan trọng được đồng bộ hóa.
Cloudkiller,

1

Bạn không thể chỉ tạo một kho lưu trữ từ xa trên GitHub, BitBucket hoặc GitLab? (Hai công ty sau cung cấp kho lưu trữ riêng miễn phí không giới hạn). Khi bạn kết thúc ngày làm việc, chỉ cần sử dụng git pushđể đẩy các thay đổi của bạn vào kho lưu trữ từ xa. Khi bạn về đến nhà, chỉ cần thực hiện thao tác git pullkéo các thay đổi từ cơ quan vào máy tại nhà. Tương tự như vậy, khi bạn hoàn thành việc ở nhà, hãy làm git pushvà sau đó khi bạn trở lại làm việc, hãy làm git pull.


1

Cách dễ nhất để di chuyển kho lưu trữ git qua lại [giữa 2 máy tính] là gì?

Tình huống 1: Tôi làm việc (chỉnh sửa mã và tệp) độc quyền trên PC1 nhưng muốn có bản sao trùng lặp của tệp (ví dụ: để xây dựng toàn bộ cơ sở mã) cũng trên PC2.

Đồng bộ hóa từ PC1 sang PC2 sau <1 phút qua điểm phát sóng wifi khi sử dụng <25 MB dữ liệu:

Tôi làm việc trên một máy tính yếu mà tôi mang theo (máy tính xách tay), nhưng xây dựng trên một máy tính mạnh hơn đặt ở nơi khác. Tôi sử dụng git mọi lúc để đồng bộ hóa từ máy tính xách tay của mình sang máy tính khác bằng tập lệnh. Tôi chỉ cần gõ lệnh này để chạy nó:

sync_git_repo_from_pc1_to_pc2

Đó là nó! Nó thường mất khoảng 25 MB dữ liệu và ~ 30 giây đến 1 phút, ngay cả khi sử dụng điểm phát sóng wifi điện thoại di động và làm việc trên repo có kích thước hàng chục gigabyte . Tôi đang sử dụng PC2, vì vậy tôi thực hiện git log -1trên PC2 để xác minh rằng đồng bộ hóa hoạt động, sau đó tôi chạy lệnh xây dựng. Hoạt động hoàn hảo. Cho nó một shot. Xem các liên kết bên dưới để biết chi tiết.

Lưu ý: repo nhân bản trên PC2 sẽ nằm trên nhánh git có tên somename_SYNC. Sửa đổi tập lệnh một cách thích hợp nếu bạn muốn nó có cùng tên nhánh thay vì luôn sử dụng "nhánh ĐỒNG BỘ". Có thể sửa đổi tập lệnh để có hiệu ứng giống như Kịch bản 2 bên dưới nếu muốn. Tuy nhiên, thực hiện Kịch bản 2 theo cách thủ công không khó, vì vậy bạn có thể chỉ muốn tiếp tục thực hiện Tình huống 2 theo cách thủ công. Đó là Kịch bản 1 trong đó tập lệnh tự động là có lợi nhất và tiết kiệm thời gian, vì nó cho phép quy trình làm việc "sửa đổi, đồng bộ hóa, xây dựng" dễ dàng và nhanh chóng nơi "sửa đổi" diễn ra trên PC1, "đồng bộ hóa" được chạy từ PC1 nhưng cũng ảnh hưởng PC2, và "xây dựng" diễn ra trên PC2.

Liên kết:

  1. Hướng dẫn thiết lập và cài đặt đầy đủ tại đây:
    Làm việc trên một dự án từ xa với Eclipse qua SSH
  2. Readme, tài liệu & repo tại đây: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/README_git-sync_repo_from_pc1_to_pc2.md .
  3. Tập lệnh chính xác được đề cập ở đây:
    https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/sync_git_repo_from_pc1_to_pc2.sh

Tình huống 2: Tôi làm việc (chỉnh sửa mã và tệp) trên nhiều máy tính và muốn có thể chỉnh sửa cùng một kho mã từ bất kỳ máy tính nào trên thế giới:

Tôi muốn các kho lưu trữ git giống hệt nhau, để tôi có thể tiếp tục ở nơi tôi đã rời khỏi máy tính khác. Tôi muốn đảm bảo rằng tôi có các nhánh và thẻ giống nhau trên cả hai máy tính.

  1. Truy cập https://github.com và tạo tài khoản và tùy chọn (được khuyến nghị) thiết lập khóa ssh .

  2. Bây giờ sử dụng giao diện web của họ để tạo một kho lưu trữ mới.

    1. Kể từ năm 2020 trở về trước, GitHub cũng cho phép các kho lưu trữ riêng miễn phí , vì vậy điều này hoạt động tốt ngay cả đối với các dự án riêng tư, nguồn đóng.
  3. Tìm URL bản sao của kho lưu trữ mới ssh hoặc https. Ví dụ: git@github.com: ElectricRCAircraftGuy / eRCaGuy_dotfiles.git hoặc https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git .

  4. Sao chép dự án vào PC1. Ví dụ:

     git@github.com:ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
     cd eRCaGuy_dotfiles
    
  5. Và lặp lại lệnh sao chép chính xác đó trên PC2.

  6. Bây giờ trên PC1, hãy thực hiện một số thay đổi, cam kết và đẩy chúng vào kho lưu trữ "từ xa" của bạn trên github:

     # edit some files, then do the following
     git add -A  # stage ("add") all changed files to be committed 
     git commit  # commit them
     git push    # push them to your remote github repo
    
  7. Bây giờ trên PC2, hãy kéo các thay đổi của bạn:

     # pull all changes from github (which includes the changes
     # you just pushed from PC1) to PC2
     git pull  
    
  8. Giờ đây, bạn có thể chỉnh sửa tệp trên PC2, cam kết và đẩy chúng lên github bằng cách sử dụng các lệnh hiển thị chỉ trong 2 bước ở trên và sau đó từ PC1, bạn có thể chạy git pullđể lấy những thay đổi đó từ PC2.

  9. Tiếp tục thực hiện quy trình này, theo yêu cầu, hoạt động trên PC1 HOẶC PC2, và dễ dàng chia sẻ tệp cũng như chia tách công việc của bạn giữa hai máy tính. Chỉ cần nhớ rằng tất cả các thay đổi của bạn phải được cam kết và đẩy lên github trên một PC trước khi bạn có thể kiểm tra chúng (kéo chúng) và tiếp tục làm việc trên PC kia.

  10. Nếu bạn từng rơi vào trường hợp các tệp hơi không đồng bộ giữa hai PC, bạn có thể sẽ phải sử dụng thêm một số nhánh phụ, thực hiện một số hợp nhất, giải quyết xung đột, v.v. Sau đó, nó trở nên giống với hoạt động hơn với một nhóm nhỏ, nơi tất cả các bạn đang làm việc trên cùng một repo. Google là bạn của bạn. Git rất mạnh mẽ và có một lệnh, một bộ lệnh hoặc quy trình làm việc cho mọi thứ.


0

Vâng, bạn có thể đẩy và kéo (thông qua Git) đến máy chủ mà bạn có thể thiết lập. Hoặc bạn có thể lưu trữ các repo của mình tại GitHub và sử dụng nó như một cầu nối đồng bộ hóa.


0

Bạn có thể tạo kho lưu trữ trên bất kỳ máy tính nào của mình, có thể là máy tính để bàn và đẩy / kéo đến nó từ cả máy tính xách tay và chính nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.