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


Giả sử tôi có máy tính để bàn và máy tính xách tay, và đô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 kho chứa 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ùng các chi nhánh và thẻ trên cả hai máy tính.

Cảm ơn Johan

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

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


Cập nhật:

Vì vậy, hãy thử XANI: s ý tưởng với một repo git trần trên một máy chủ, và cú pháp lệnh push 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ủ đầu tiên.

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

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

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 đó đi vào repo đó và thêm một tập tin:

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, chúng ta 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 các testfile.

Tại thời điểm này, chúng tôi có thể chỉnh sửa nó bằng một số nội dung khác 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 ta quay trở lại client đầu tiên và thực hiện một lệnh git pull để xem tập tin 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.


76
2018-02-09 17:18


gốc




Các câu trả lời:


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

Tôi có một netbook như một 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 thông 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 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 sẽ (đầu tiên) làm tương tự, nhưng đối với 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 "vật lý". Bạn không cần một "máy chủ" cục bộ, 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ột máy chủ công cộng ở tất cả, 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ữ bản sao làm việc 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, làm thế nào tôi xử lý này, và tôi cho tôi nó hoạt động khá tốt (nếu không hoàn hảo;))

Thứ gì đó để đọc: http://progit.org/ Thực sự tốt cuốn sách.-


23
2018-02-09 17:25



Nó 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 bạn với một ví dụ? - Johan
Cảm ơn, những ví dụ đã làm rõ rất nhiều :) - Johan


Tôi sẽ nhân bản repo từ hộp này sang hộp kia, và sau đó thiết lập hai bản repo để tôi có thể git fetchtừ hộp khác.

Đổi tên từ xa từ origin vào tên của hộp khác làm cho các chi nhánh từ xa dễ đọc hơn.

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

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

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

6
2018-02-09 18:31





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 nào, chỉ .git stuff) hoặc github

"Phân phối" sẽ trông giống như sau:

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

Đang đồng bộ hóa:

git pull laptop/desktop (push sẽ không hoạt động tốt trên các repos không trần vì git sẽ không sửa đổi các file đã kiểm tra khi đẩy đến repo từ xa)

Hoặc, tạo repo trên pendrive;)


4
2018-02-09 22:10



Tôi đã cố gắng sử dụng một repo - bare, nhưng tôi không thể có được toàn bộ dòng công việc. - Johan
Tôi chỉ bắt đầu với git, và đi từ git địa phương đến github và trở lại tôi có thể làm cho đến nay, nhưng phương pháp máy tính-to-máy tính tôi không thể làm việc. Câu hỏi ngớ ngẩn - tôi sử dụng thông tin đăng nhập nào cho 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 yêu cầu bản sao để known_hosts, nhưng điều đó đã không làm các trick ... - Dave
Đây là cách đơn giản nhất để tôi đồng bộ giữa hai máy cục bộ mà không phải liên tục nhấn vào một máy chủ từ xa. - johnzachary


Cách sử dụng đơn giản rsync?


1
2018-02-09 17:36



Nên có một cách "git-chính xác" hơn để làm điều đó? - Johan
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 một cách để khôi phục các thay đổi sau khi đồng bộ được thực hiện. Tôi cũng đã mất rất nhiều tập tin theo cách này bởi vì tôi đã không đọc kết quả chạy khô gần đủ và rsync đã được thiết lập để xóa các tập tin không có mặt trên tổng thể. Tôi đã chuyển sang git và tìm thấy nó một cách an toàn hơn để giữ cho các thư mục quan trọng được đồng bộ hóa. - Cloudkiller


Bạn không thể tạo một kho lưu trữ từ xa trên GitHub, BitBucket hay 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 một ngày tại nơi làm việc, chỉ cần sử dụng git push để đẩy các thay đổi của bạn vào repo từ xa. Khi bạn về nhà, chỉ cần làm git pull để kéo các thay đổi của bạn khỏi công việc trên máy tính ở nhà. Tương tự như vậy, khi bạn kết thúc ở nhà, hãy làm git push và sau đó khi bạn trở lại làm việc, hãy làm git pull.


1
2018-03-28 16:43





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


0
2018-02-09 17:23





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


0
2018-02-09 17:26