Làm thế nào để cập nhật một bản sao git --mirror?


144

Tôi đã tạo một kho lưu trữ git để phản chiếu một trang web trực tiếp (là một kho lưu trữ git không trống):

git clone --mirror ssh://user@example.com/path/to/repo

Bây giờ, để giữ cho bản sao nhân bản này được cập nhật với tất cả các thay đổi từ nguồn gốc từ xa của nó, tôi phải sử dụng lệnh hoặc lệnh nào?

Tôi muốn giữ mọi thứ được cập nhật: cam kết, refs, hook, chi nhánh, v.v.

Cảm ơn!

Câu trả lời:


213

Đây là lệnh mà bạn cần thực hiện trên gương:

git remote update

@Magnus Skog: Tuyệt vời. Cảm ơn! Đây là tất cả sao? Tôi có cần một người khác, như thế git fetchnào? Hay git remote updatemột mình sẽ làm tất cả?
J. Bruni

11
Tôi cũng muốn biết sự khác biệt của git fetch là gì.
Thorbjørn Ravn Andersen

1
@ Thorbjorn (bạn sẽ phải làm với một thụy điển :)): Git fetch chỉ cập nhật kho lưu trữ của bạn với các tham chiếu từ xa từ xa. Lệnh này cập nhật mọi thứ trên kho lưu trữ được nhân đôi.
ralphtheninja

4
Đây là một câu trả lời hay giải thích thêm: stackoverflow.com/questions/3959924/ từ
ralphtheninja

16
'git update update --prune' sẽ thực hiện tất cả điều này, nhưng xóa các nhánh khi chúng bị xóa khỏi kho lưu trữ ban đầu.
teeks99

8

Về cam kết, refs, chi nhánh và " et cetera ", câu trả lời của Magnus chỉ hoạt động ( git remote update).

Nhưng thật không may, không có cách nào để clone/ gương / update móc , như tôi muốn ...

Tôi đã tìm thấy chủ đề rất thú vị này về nhân bản / phản chiếu các móc:

http://kerneltrap.org/mailarchive/git/2007/8/11/256180/thread

Tôi đã học:

  • Các hook không được coi là một phần của nội dung kho lưu trữ.

  • Có nhiều dữ liệu hơn, như .git/descriptionthư mục, không được sao chép, giống như các hook.

  • Các hook mặc định xuất hiện trong hooksdir đến từTEMPLATE_DIR

  • templatetính năng thú vị này trên git.

Vì vậy, tôi có thể bỏ qua "bản sao móc" này, hoặc đi tìm rsyncchiến lược, dựa trên mục đích của gương của tôi (chỉ sao lưu + nguồn cho các bản sao khác).

Chà ... tôi sẽ quên đi những cái móc nhân bản và bám sát git remote updateđường.

  • Sehe đã chỉ ra rằng không chỉ "hook" không được quản lý bởi clone/ updateprocess, mà còn cả stash, rerere, v.v ... Vì vậy, đối với một bản sao lưu nghiêm ngặt, rsynchoặc tương đương sẽ thực sự là cách tốt nhất. Vì điều này không thực sự cần thiết trong trường hợp của tôi (tôi có thể đủ khả năng không có móc, stash, v.v.), như tôi đã nói, tôi sẽ bám vào remote update.

Cảm ơn! Cải thiện một chút "git-fu" của riêng tôi ... :-)


5

Xem ở đây: Git không nhân bản tất cả các nhánh trên các bản sao tiếp theo?

Nếu bạn thực sự muốn điều này bằng cách kéo cành thay vì push --mirror, bạn có thể xem tại đây:

"Fetch --all" trong kho lưu trữ git trần không đồng bộ hóa các nhánh cục bộ với các nhánh từ xa

Câu trả lời này cung cấp các bước chi tiết về cách đạt được điều đó tương đối dễ dàng:


1
pushkhông phải là một lựa chọn cho tôi bởi vì tôi cần phải làm điều đó ở bên nhận (từ nơi bản sao); pullcũng không phải là một lựa chọn vì kho lưu trữ nhân bản là một kho lưu trữ trần (không có cây làm việc, do đó không có "pull") - có vẻ như git remote updatethực sự làm tất cả (dễ dàng hơn nhiều so với câu trả lời được tham chiếu) ... Dù sao, cảm ơn! Chắc chắn có thông tin có giá trị trong các câu hỏi / câu trả lời được liên kết.
J. Bruni

1
ok, tôi có nghĩa là kéo như trong cách nói thông thường. Công nghệ đẩy và kéo. Hầu như không có từ nào khác ngoại trừ vô nghĩa 'lấy dữ liệu từ xa từ máy khách' mà không đặt tên nào có ý nghĩa với hệ thống git hoặc DVCS :) Liên kết thứ hai sẽ cung cấp các chi tiết bạn muốn. Lưu ý, đó là cập nhật từ xa git 'không không trên thực tế duy trì trạng thái 'gương' mà không có các hoạt động phụ nêu có
sehe

1
hmm ... xin lỗi (HTH) - có vẻ như một tấm gương "tuyệt đối" dễ dàng đạt được hơn thông qua một "rsync" đơn giản của thư mục repo ban đầu ... không phải là điều tôi muốn, nhưng .. tôi mới thực hiện một số thử nghiệm ... và dường như không có gì sao chép các móc nối - điều mà tôi đặc biệt quan tâm ...
J. Bruni

1
FYI, mục đích của chiếc gương này là, chỉ: 1) sao lưu hoàn toàn từ nơi tôi có thể khôi phục nếu dữ liệu tại máy chủ repo ban đầu bị mất; 2) một nơi nào đó từ nơi những người khác có thể sao chép và nhận được một repo làm việc tại địa phương, mà không có quyền truy cập vào repo nguồn gốc
J. Bruni

1
Nếu bạn muốn móc và mọi thứ, gitosis có thể (không nhớ rõ) có những gì bạn cần, nhưng tôi sẽ đi theo rsynctrong trường hợp đó. Ngoài ra, tôi cho rằng bạn đang quên về stash (xem tại đây ) và thông tin lại cũng vậy ...?
sehe
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.