2011-10-25 23 views
9

Tôi đang viết một công cụ để sao lưu tất cả các kho lưu trữ của mình từ Bitbucket (hỗ trợ Git và Mercurial) cho máy cục bộ của tôi.Làm cách nào để kéo/tìm nạp với Git * INTO * một kho lưu trữ trống?

Nó đã làm việc cho Mercurial, nơi tôi làm điều đó như thế này:

  • tạo ra một kho trống mới mà không có một bản sao làm việc trên máy tính cục bộ
    (giống như một kho lưu trữ bare Git)
  • kéo từ kho lưu trữ từ xa vào kho trống cục bộ

Bây giờ tôi đang cố gắng làm tương tự với Git.

Tôi already found out mà tôi không thể trực tiếp pull vào kho trống và tôi nên sử dụng fetch thay thế.

Vì vậy, tôi đã thử nó:

C:\test>git fetch https://github.com/SamSaffron/dapper-dot-net.git 
remote: Counting objects: 1255, done. 
remote: Compressing objects: 100% (1178/1178), done. 
remote: Total 1255 (delta 593), reused 717 (delta 56) 
Receiving objects: 100% (1255/1255), 13.66 MiB | 706 KiB/s, done. 
Resolving deltas: 100% (593/593), done. 
From https://github.com/SamSaffron/dapper-dot-net 
* branch   HEAD  -> FETCH_HEAD 

Rõ ràng Git đã lấy một cái gì đó, nhưng kho địa phương có sản phẩm nào sau đó.
(git log nói fatal: bad default revision 'HEAD')

Tôi đang làm gì sai?

Disclaimer:
Tôi đã chỉ rất, kiến ​​thức rất cơ bản Git (Tôi thường sử dụng Mercurial).
Và tôi đang sử dụng Windows, nếu điều đó quan trọng.

+0

bản sao có thể có của [git log và hiển thị trên repo trần] (http://stackoverflow.com/questions/6214711/git-log-and-show-on-a-bare-repo) – CharlesB

+0

@CharlesB : Không có câu trả lời nào trong liên kết này phù hợp với tôi. Ngay cả những thứ như 'git branch -va' làm việc cho người hỏi, không phải là' git log branchname' được đề xuất (tôi đã thử 'master'), cũng không phải lệnh" Để hình dung mọi thứ trong kho lưu trữ ... "ở cuối câu trả lời. –

Trả lời

14

Hãy thử

git fetch https://github.com/SamSaffron/dapper-dot-net.git master:master 
+2

Điều này dường như chỉ lấy nhánh master (tôi chỉ thử nó với https://github.com/dontangg/nocco, bởi vì Dapper không có nhánh khác). Có thể tìm nạp ** tất cả các chi nhánh ** không? Đây sẽ là một công cụ sao lưu, và tất nhiên tôi muốn sao lưu mọi thứ ở đó. –

+2

Một cái gì đó như '" *: * "' hoặc '" refs/heads/*: refs/heads/* "' nên làm. –

+0

'*: *' không hoạt động đối với tôi ('fatal: Invalid refspec '*. *''), Nhưng 'refs/heads/*: refs/heads/*' thực hiện thủ thuật. Cảm ơn bạn! –

3

Tôi nghĩ bạn nếu bạn thực sự muốn sao lưu. Bạn có thể thử lệnh $ git clone --mirror XXXX. nó sẽ nhận được gần như tất cả mọi thứ từ kho lưu trữ. Hy vọng nó là hữu ích.

+2

Có, nhưng tôi muốn sao lưu để chạy thường xuyên. Vì vậy, sau lần chạy đầu tiên, kho lưu trữ cục bộ đã tồn tại -> Tôi phải chạy 'pull' /' fetch'/bất cứ điều gì và chắc chắn rằng điều này kéo ** mọi thứ **. –

+1

Sau khi bạn nhân đôi bạn trần. bạn có thể sử dụng 'git fetch --all --progress -v' để cập nhật các thanh địa phương của bạn. –

2
$ git fetch https://github.com/SamSaffron/dapper-dot-net.git +refs/heads/*:refs/heads/* --prune 
2

Để sao lưu kho lưu trữ từ xa vào kho trần regulary cấu hình đầu tiên

git config remote.origin.url https://github.com/SamSaffron/dapper-dot-net.git 
git config remote.origin.fetch "+*:*" 

và sau đó chỉ cần chạy

git fetch --prune 

để sao lưu.

  • Bạn có thể bỏ qua phần bổ sung cấu hình nắm tay vì điều này lẽ ra phải được đặt trong khi nhân bản kho lưu trữ từ xa.
  • Cũng xin lưu ý các dấu ngoặc kép kèm theo (") trong lệnh trên để bảo vệ dấu hoa thị (*) không được diễn giải từ trình bao của bạn.
  • Dấu cộng là cần thiết để cho phép cập nhật không nhanh chóng. Đó có lẽ là ý định của bạn nếu bạn muốn sao lưu trạng thái hiện tại của điều khiển từ xa.
  • Tùy chọn --prune cũng được sử dụng để xóa các chi nhánh không tồn tại.
+2

Một lời giải thích tốt với tất cả các sự kiện thích hợp ở một nơi, đặc biệt hữu ích là điểm về dấu ngoặc kép và sự cần thiết của '+' tiền tố [refspec] (https://git-scm.com/book/en/ v2/Git-Internals-The-Refspec). – starfry

Các vấn đề liên quan