Làm thế nào để chuyển đổi một bản sao nông Git thành một bản sao đầy đủ?


213

Theo dõi của này cái câu hỏi: nếu tôi có một bản sao cạn, làm thế nào để lấy tất cả các cam kết cũ để làm cho nó một bản sao đầy đủ?


4
Bạn có cân nhắc đánh dấu câu trả lời của @ sdram không? Đó là một trong những chính xác.
Ionică Bizău

Câu trả lời:


92

EDIT: git fetch --unshallow bây giờ là một tùy chọn (cảm ơn Jack O'Connor).

Bạn có thể chạy git fetch --depth=1000000(giả sử kho lưu trữ có ít hơn một triệu lần xác nhận).


237
Bây giờ đã git fetch --unshallowtồn tại (như trong câu trả lời của @ sdram), câu trả lời này không còn là câu trả lời hay nhất.
Jack O'Connor

1
Câu trả lời của @ sdram không hiệu quả với tôi (phiên bản git 2.1.1), nhưng câu trả lời này đã có.
kay - SE là ác

2
Không có câu trả lời làm việc cho tôi. Cả hai lệnh đã thành công trong việc tìm nạp tất cả các xác nhận bị thiếu, nhưng khi tôi cố gắng đẩy các xác nhận mới, tôi gặp lỗi về máy chủ không biết về các giới thiệu 'nông'
Tyguy7

3
git fetch --depth=2147483647là độ sâu lớn nhất có thể để cung cấp cho lệnh.
clacke

5
Tôi đã sử dụng git fetch --unshallow, nhưng nó vẫn không hiển thị tất cả các chi nhánh.
Sid

674

Lệnh dưới đây (git phiên bản 1.8.3) sẽ chuyển đổi bản sao nông thành bản thường

git fetch --unshallow

Sau đó, để có quyền truy cập vào tất cả các chi nhánh có nguồn gốc (cảm ơn @Peter trong phần bình luận)

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin

36
Điều này không hoàn tác tác dụng phụ - nhánh đơn. Để làm điều đó, chỉnh sửa .git / config và thay đổi lấy = + refs / heads / BRANCHNAME: refs / điều khiển từ xa / gốc / BRANCHNAME để lấy = + refs / heads / *: refs / điều khiển từ xa / gốc / *
Peter Cordes

3
Điều này không tạo ra các nhánh cục bộ theo dõi các nhánh từ xa, vì vậy bạn vẫn cần kiểm tra -b BRNAME origin / BRNAME để thiết lập nó.
Peter Cordes

25
Xem thêm stackoverflow.com/questions/17714159/ trên : git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"; git fetch origin từ một câu trả lời sẽ giống như chỉnh sửa .git / config bằng tay
Peter Cordes

Điều này chỉ hoạt động nếu repo được đánh dấu là nông. Tôi không thể nhớ làm thế nào, nhưng có những tình huống bạn có thể kết thúc với một repo không hoàn chỉnh mà không thực hiện một bản sao nông cạn. @ svick ' stackoverflow.com/a/6802238/260122 là câu trả lời hoạt động mọi lúc.
clacke

git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*'làm việc cho tôi
gzaripov

19

Tôi cần phải làm sâu sắc thêm một repo xuống một cam kết cụ thể.

Sau khi đọc man git-fetch, tôi phát hiện ra rằng người ta không thể chỉ định một cam kết, nhưng có thể chỉ định một ngày:

git fetch --shallow-since=15/11/2012

Đối với những người cần tăng sâu, một mantrích dẫn khác :

--deepen=<depth>

Tương tự như --depth, ngoại trừ nó chỉ định số lượng xác nhận từ ranh giới nông hiện tại thay vì từ đầu của mỗi lịch sử chi nhánh từ xa.


1

Bạn có thể thử điều này:

git fetch --update-shallow

0

Không có tin nhắn nào ở trên đã lừa được. Tôi đang cố gắng làm việc với các thẻ git bắt đầu từ một bản sao nông.

Đầu tiên tôi đã thử

git fetch --update-shallow

Những loại làm việc nửa chừng. Tuy nhiên, không có thẻ có sẵn!

git fetch --depth=1000000

Lệnh cuối cùng này thực sự đã tìm nạp các thẻ và cuối cùng tôi có thể thực thi

git checkout -b master-v1.1.0 tags/v1.1.0

và được thực hiện với nó.

HTH

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.