Lưu trữ Phụ lục Git trên máy chủ không cài đặt git-annex


9

Máy A và B lưu trữ một kho lưu trữ phụ lục git chung . Cả hai đều có chương trình git-annex được cài đặt và tôi chỉnh sửa thủ công / commit / etc trên cả hai máy. A & B không được kết nối với internet cùng một lúc, vì vậy chúng không thể được đồng bộ hóa trực tiếp với nhau.

Máy chủ C luôn được bật và kết nối (và miễn phí và khá an toàn). Nó đã được cài đặt git, nhưng tôi không có quyền quản trị, vì vậy tôi không thể cài đặt git-annex.

Câu hỏi của tôi: Tôi có thể sử dụng Máy chủ C làm trung tâm trung tâm để đẩy và kéo các bản cập nhật git-annex từ cả A và B, mà không phải cài đặt git-annex và toàn bộ phụ thuộc ghc ghc trên C không?

Tôi đã thử sử dụng C với "thư mục" hoặc "rsync" từ xa đặc biệt , nhưng điều này dường như chỉ giữ các tệp, không phải phần còn lại của những gì cần thiết để cập nhật A và B sau khi đẩy / kéo.

Bất kỳ gợi ý sẽ được nhiều đánh giá cao!

Câu trả lời:


6

Với quyền truy cập git và rsync vào cùng một máy chủ, bạn có thể sử dụng máy chủ đó để lưu trữ cả lịch sử (thông qua truy cập git) và kho lưu trữ khóa-giá trị phụ lục (thông qua truy cập rsync). Chúng cũng có thể được tách rời và lưu trữ trên bất kỳ số lượng máy chủ khác nhau.

Có vẻ như bạn đã đọc tất cả các công cụ bạn cần. Về cơ bản, bạn sẽ kết thúc với 2 điều khiển từ xa riêng biệt, cả hai đều chỉ đến các vị trí khác nhau trên máy chủ-c. Điều khiển từ xa đầu tiên (server-c) là một điều khiển git thông thường để đồng bộ hóa lịch sử của bạn và bất cứ điều gì được kiểm tra trực tiếp vào repo git. Điều khiển từ xa thứ hai là một điều khiển từ xa đặc biệt.

[remote "server-c"]
    url = git@example.com:/path/to/repo.git
    fetch = +refs/heads/*:refs/remotes/server-c/*
[remote "server-c-rsync"]
    annex-rsyncurl = example.com:/home/user/annex-rsync
    annex-uuid = ...

Bạn sẽ có thể thiết lập điều này với một cái gì đó dọc theo dòng:

git remote add server-c git@example.com:/path/to/repo.git
git annex initremote server-c-rsync type=rsync rsyncurl=example.com:/home/user/annex-rsync encryption=none

Điều này sẽ cung cấp cho bạn các chức năng cơ bản mà bạn đang tìm kiếm. Nhược điểm duy nhất là bạn có 2 tên từ xa khác nhau thực sự trỏ đến cùng một máy chủ. Cụ thể, bạn chỉ cần nhớ sử dụng điều khiển từ xa đặc biệt (máy chủ-c-rsync) khi sử dụng các đối số --to = hoặc --from = của get, sao chép và di chuyển.

Có thể chỉ một điều khiển từ xa đến cả hai vị trí, tuy nhiên tôi không chắc điều này có thực sự được hỗ trợ hay không. Các lệnh sau xuất hiện để tạo .git / config hợp lý.

git init
git annex init "test"
git remote add server-c git@example.com:/path/to/repo.git
git annex initremote server-c type=rsync rsyncurl=example.com:/rsync/user encryption=none

Đối với tôi, kết quả này trong một điều khiển từ xa trong .git / config với cả url = (đối với các hoạt động git thông thường) và annex-rsyncurl =. Tuy nhiên, tôi đã không kiểm tra điều này thêm nữa để đảm bảo rằng git annex bỏ qua url và chỉ sử dụng mục nhập annex-rsyncurl khi hoạt động với các tệp phụ lục.


Tuyệt quá! Tôi sẽ thực hiện một số thử nghiệm, nhưng điều này sẽ giúp tôi khá gần với một giải pháp khả thi. Cảm ơn rất nhiều cho thời gian và câu trả lời của bạn!
Vincent

Rất vui vì tôi có thể giúp. Tôi mới bắt đầu sử dụng git annex cho mình trong kỳ nghỉ và cho đến nay tôi vô cùng hạnh phúc với nó!
Justin Geibel

Tôi nghĩ rằng ví dụ cuối cùng chỉ nên làm việc. thực tế, tôi nghĩ rằng nó sẽ đặt các tập tin rsync ngay cả khi nó chỉ là một repo trần trụi ...
anarcat
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.