2013-11-23 16 views
14

Tôi muốn sao chép kho lưu trữ git có máy chủ git:// bị hỏng.kho lưu trữ nhân bản từ gitweb

May mắn thay giao diện gitweb của nó vẫn hoạt động và tất cả dữ liệu cần thiết để xây dựng lại kho lưu trữ git có sẵn từ đó.

Vì vậy, có lệnh git nào hoặc công cụ khác có thể sao chép kho git từ gitweb không?

(tôi có thể viết một bot bản thân mình, nhưng không muốn lãng phí thời gian của tôi làm việc đó nếu có một cách khác)

Trả lời

1

Bạn có thể thử lấy repo sử dụng http:// thay vì git://.

Ví dụ, Linux git repo tại https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/ có thể được nhân bản bằng http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

Hãy thử thay thế git:// với http:// hoặc https:// và xem nếu nó hiện các trick.

Việc xây dựng lại tệp git kho-by-file có thể có thể, nhưng xem xét rằng kho lưu trữ vẫn tồn tại, nó không có ý nghĩa nhiều. Bạn có thể thử liên hệ với chủ sở hữu repo và kiểm tra xem họ có sẵn lòng sửa lỗi truy cập repo hay không.

+0

's/^ git/http /' không hoạt động, tôi đã thử một số biến thể khác mà không thành công. Cho đến nay, các chủ sở hữu repo đã không trả lời thư của tôi. – salva

+0

Xem xét đó là một repo git, rất có thể là có những người khác * làm * có bản sao. Nếu dự án có danh sách gửi thư, bạn có thể thử vận ​​may của mình ở đó. – ArtemB

+2

@ArtenB, chắc chắn, giải pháp * xã hội * có ở đó, nhưng vấn đề là đây không phải là lần đầu tiên tôi tìm thấy trong tình huống này và tôi chắc chắn ai đó đã viết kịch bản đó để có thể tái tạo kho chứa đầy đủ của git nhận được tất cả các khác biệt từ máy chủ gitweb. – salva

6

gitweb chỉ là một perl script (gitweb.perl) là:

Nếu enabled in the gitweb.conf, gitweb có thể phân phối "ảnh chụp nhanh" (ở định dạng zip hoặc tag.gz), đây không phải là lịch sử đầy đủ của kho lưu trữ. được sản xuất bởi git-archive.

http://<gitweburl>/gitweb.cgi?p=<repo>.git;a=snapshot;h=HEAD 

Nếu có bất kỳ lệnh nào, nó cần phải được thực hiện trên máy chủ.
Ví dụ, bạn có thể yêu cầu một bó (git bundle):

cd /path/to/bare/repo 
git bundle create ../repo.bundle --all 

Điều đó sẽ tạo một tập tin, bạn có thể sftp trở lại đài địa phương của bạn, và hoạt động như một kho git (chỉ đọc , clone/pull only, no push):

cd /path/to/repo.bundle 
git clone repo.bundle 
cd repo 
Các vấn đề liên quan