2012-03-21 44 views
14

tôi tạo ra các bản sao lưu của kho git của tôi như thế nào trong How to backup a local Git repository? đề xuất vớikhôi phục kho git từ bó backup

git bundle create /tmp/foo-all --all 

tôi có thể xem tất cả refs đang chờ ở đó, trong đó có một ref từ xa tạo ra bởi git-svn. Bây giờ tôi không thể tìm ra cách khôi phục lại gói này cho một kho lưu trữ cục bộ nữa. Tôi khá chắc chắn rằng tôi đã thực hiện nó một lần. Tôi đã thử git-clone nhưng điều đó mang lại cho tôi một kho lưu trữ chỉ với gói sao lưu của tôi như repo từ xa.

Tôi cũng đã cố gắng

git init 
git bundle unbundle /tmp/foo --all 

nhưng điều này chỉ liệt kê tất cả tài liệu tham khảo ...

Thẩm bó cho:

$ git bundle verify $somewhere/foo.bundle 
The bundle contains 12 refs 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/master 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/heads/xxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx refs/remotes/git-svn 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx HEAD 
The bundle requires these 0 ref 
$somewhere/foo.bundle is okay 

Trả lời

5

Bundle chứa không phải tập tin, nhưng đồng bằng châu thổ, bạn cần cơ sở để tạo lại nội dung tệp. Bạn phải sao chép trước tiên, bỏ nhóm sau. Init thay vì bản sao cho phép chỉ trong trường hợp, nơi bó đòi hỏi 0 refs

Đừng bỏ qua git bundle verify trước unbundling

git-bundle(1) - Linux man page

Được sử dụng để kiểm tra xem một tập tin bó là hợp lệ và sẽ được áp dụng để sạch kho lưu trữ hiện tại. Điều này bao gồm kiểm tra trên định dạng gói chính nó cũng như kiểm tra rằng điều kiện tiên quyết cam kết tồn tại và được được liên kết đầy đủ trong kho lưu trữ hiện tại. git bundle in danh sách thiếu các cam kết, nếu có và thoát với trạng thái khác 0.

Nếu bạn đang tạo kho lưu trữ, sau đó bạn có thể sao chép từ bó như thể nó là một kho lưu trữ từ xa thay vì tạo ra một kho rỗng và sau đó kéo hoặc lấy các đối tượng từ các bó

+0

kiểm định không hiển thị với refs thiếu. – user1283719

+2

@ user1283719 'git clone foo.bundle'? –

+0

'git clone foo.bundle' tạo một kho lưu trữ mới với gói sao lưu của tôi làm kho lưu trữ từ xa như đã nêu ở trên. Kho lưu trữ cục bộ của tôi không thể sửa chữa được, vì vậy tôi muốn khôi phục nó từ bản sao lưu bao gồm khả năng sử dụng git-svn trên nhánh từ xa của nó. – user1283719

17

Câu trả lời ngắn:

$ git bundle verify $somewhere/foo.bundle 
$ git clone $somewhere/foo.bundle 
Cloning into 'foo'... 
Receiving objects: 100% (10133/10133), 82.03 MiB | 74.25 MiB/s, done. 
Resolving deltas: 100% (5436/5436), done. 
$ cd foo 
$ git status 
... 

Lazy Badger đã nói điều này, nhưng trong đoạn cuối cùng. :)

4

tôi phiên bản mới hơn của git là đủ để làm:

git clone bundle.file 

toàn bộ lệnh:

mkdir ~/git 
cd ~/git 
git clone /path/to/bundle.file 

Nó sẽ khôi phục hoàn toàn của git nội dung kho trần của bạn (mà sẽ biên dịch vì nó là nguồn bình thường). Bạn không cần bất kỳ tệp nào khác. Tệp bó là đủ.

Đó là khôn ngoan để luôn xác minh Bạn bó tập tin trước khi Không bắt buộc như sau:

git bundle verify /path/to/bundle.file 
Các vấn đề liên quan