Tạo một nhân bản github chính thức


108

Làm cách nào để tạo một nhân bản github cho kho lưu trữ git bên ngoài, sao cho nó xuất hiện dưới dạng "bản sao thực", chẳng hạn như trong https://github.com/mirrors ?

Cho đến nay, tôi đã thiết lập một gương bằng cách sử dụng:

cd /path/to/bare/repository
git remote add --mirror github git@github.com:user/repo.git

và cấu hình hook nhận post để thực hiện a git push --quiet github. Tuy nhiên, theo cách này, github không nhận dạng được gương.

Bất kỳ ý tưởng nào về cách thực hiện theo cách github, chẳng hạn như "Mirrorred from" xuất hiện bên dưới tên kho lưu trữ?


2
github.com/apache/libcloud một ví dụ khác về repo được sao chép, tất cả đều từ Apache LOL
Colin Su

Câu trả lời:


113

Dựa trên giao tiếp với nhóm hỗ trợ của GitHub, tôi nhận thấy rằng GitHub hiện không cung cấp cơ chế trực tiếp để người dùng phản chiếu kho lưu trữ theo cách này.

Tuy nhiên, người ta có thể yêu cầu GitHub cài đặt dịch vụ này cho các kho lưu trữ là một phần của tổ chức. Sau đó, GitHub định cấu hình một kho lưu trữ hiện có như một máy nhân bản và lấy từ đó trong một khoảng thời gian là một hàm của số lượng máy nhân bản tổng thể mà chúng có.

CHỈNH SỬA : như Stuart đã chỉ ra, GitHub không còn chấp nhận các yêu cầu sao chép các kho lưu trữ tùy ý. Tùy chọn còn lại duy nhất là giải pháp tôi đã đăng trong câu hỏi của mình, tức là tạo một móc nối sau nhận để tự động đẩy đến kho lưu trữ GitHub của bạn.


9

Đánh giá theo nội dung hiện tại của https://github.com/mirrors , có vẻ như GitHub không còn "phản chiếu chính thức" nữa, vì hầu hết các dự án muốn mã của họ được phản chiếu trên GitHub ngày nay chỉ là một tổ chức cho nó, chẳng hạn như Git .

Cũng có một yêu cầu tính năng tại: https://github.com/isaacs/github/issues/415


Trên thực tế, một số trong số đó có các repo được sao chép GitHub. Họ vẫn làm điều đó, nhưng chỉ khi bạn là nhà phát triển của dự án, tức là không có nhân bản "không chính thức".
nyuszika7h

Và như họ nói, chỉ dành cho các tổ chức.
nyuszika7h


4

Theo Nhập khẩu Git :

Với mục đích trình diễn, chúng tôi sẽ sử dụng:

  • Một tài khoản bên ngoài có tên là người tống tiền
  • Tài khoản người dùng cá nhân GitHub có tên ghuser
  • Kho lưu trữ GitHub có tên repo.git

Dòng lệnh:

# Makes a bare clone of the external repository in a local directory  
$ git clone --bare https://githost.org/extuser/repo.git

# Pushes the mirror to the new GitHub repository
$ cd *repo.git*
$ git push --mirror https://github.com/ghuser/repo.git

# Remove the temporary local repository.
$ cd ..
$ rm -rf repo.git

1
Sự khác biệt giữa git clone --barevà là git clone --mirrorgì? Không phải là biến thể thứ hai phù hợp hơn ở đây?
user7610 Ngày

0

Tôi đã sử dụng một công cụ có tên github-backup với mức độ thành công vừa phải để, nếu không phải là nhân bản, ít nhất là tạo một bản sao lưu đầy đủ (bao gồm các sự cố và siêu dữ liệu khác) của người dùng hoặc tổ chức Github. Để trích dẫn tệp README :

Mỗi lần bạn chạy github-backup, nó sẽ tìm thấy bất kỳ nhánh mới nào trên GitHub. Nó sẽ thêm điều khiển từ xa vào kho của bạn cho các nhánh, sử dụng các tên như github_torvalds_subsurface. Nó sẽ lấy từ mọi ngã ba.

Nó tải xuống siêu dữ liệu từ mỗi ngã ba. Điều này được lưu trữ trong một nhánh có tên "github". Mỗi ngã ba có một thư mục trong đó, như torvalds_subsurface. Bên trong thư mục sẽ có một số tệp, như torvalds_subsurface/watchers. Có thể có thư mục hơn nữa, như để lấy ý kiến: torvalds_subsurface/comments/1.

Bạn có thể theo dõi các cam kết đối với nhánh github để xem thông tin nào đã thay đổi trên GitHub theo thời gian.

Định dạng của các tệp trong nhánh github hiện là kiểu dữ liệu được tuần tự hóa của Haskell. Đây là văn bản thuần túy và có thể đọc được, nếu bạn liếc mắt.

Các hạn chế bao gồm:

  • không hỗ trợ kho lưu trữ riêng
  • không có nội dung "xã hội" như ngôi sao, người theo dõi, v.v.
  • ghi chú cho các dòng cam kết chưa được hỗ trợ (chưa?)
  • phát hành 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.