2009-12-21 33 views
8

tôi đã thực hiện một cái gì đó như sau:làm thế nào để khôi phục một kho git remote vô tình xóa từ kho lưu trữ địa phương

(1) sao chép một kho git từ xa đến máy chủ địa phương

địa phương # git clone http://www.foo.com foo

(2) thêm một dự án khác trên một máy chủ ssh (bar) như kho lưu trữ từ xa thứ hai

địa phương # git remote add bar ssh://bar/home/project

địa phương # git fetch bar

(3) làm điều gì đó ngu ngốc trên host ssh (bar):

thanh # rm -rf /home/project

Ông có thể xin vui lòng cho tôi biết làm thế nào tôi có thể phục hồi dự án trên host ssh (bar) từ bản sao cục bộ của tôi, vì vậy nhà phát triển khác trên máy chủ ssh có thể tiếp tục công việc của họ và tôi có thể chạy 'git fetch bar' để nhận được cam kết của họ, giống như tôi không làm gì sai với máy chủ ssh của họ, nghĩa là hoàn tác tất cả những gì tôi đã làm để lưu trữ thanh. cảm ơn rất nhiều.

UPDATE:

thanh # mkdir -p /home/project && cd /home/project && git init --bare

địa phương # git branch remote show bar

địa phương # git push bar bar/master:refs/heads/master

địa phương # git push bar bar/branch1:refs/heads/branch1

địa phương # git push bar bar/branch2:refs/heads/branch2

+0

Nếu bạn đã giải quyết được sự cố, hãy đặt các lệnh trong câu trả lời mới. –

Trả lời

7

Bạn có thể thiết lập máy chủ từ xa làm kho lưu trữ git mới và sau đó nhấn vào nó.

Blog này đi qua như thế nào để làm điều đó:

Toolman Tim - Setting up a new remote git repository

giả sử bạn vẫn có thiết lập thanh như một kho lưu trữ từ xa, về cơ bản:

ssh bar "mkdir -p /home/project && cd /home/project && git --init bare" 
git push bar refspec 

refspec là thường xuyên chỉ là đơn giản tên của chi nhánh trong kho lưu trữ địa phương như vậy:

git push bar master 

Xem số git push manpage để biết cách xử lý chi tiết về những gì đủ điều kiện cho refspec.Phần VÍ DỤ là đặc biệt hữu ích trong việc tìm hiểu respecs tiên tiến hơn

+0

nhờ nhưng tôi không thể làm cho nó hoạt: địa phương # ssh bar "mkdir -p/home/dự án && cd/home/dự án && git init --bare" địa phương # git push thanh Không refs trong thông thường và không được chỉ định; Không làm gì cả. Có lẽ bạn nên chỉ định một nhánh như 'master'. tử vong: Kết thúc từ xa treo lên bất ngờ lỗi: không đẩy một số refs để 'ssh: // bar/home/project' – yoda

+0

đó là lý do tại sao tôi tham khảo blog mà đi sâu hơn và sử dụng từ "cơ bản". Tôi sẽ làm cho mẫu mã của tôi rõ ràng hơn để làm cho câu trả lời hoàn chỉnh. –

1
câu trả lời

Follow Đánh dấu Carey, tôi đã particaly phục hồi kho xóa như sau:

thanh # mkdir -p /home/project && cd /home/project && git init --bare

địa phương # git branch remote show bar

địa phương # git push bar bar/master:refs/heads/master

địa phương # git push bar bar/branch1:refs/heads/branch1

địa phương # git push bar bar/branch2:refs/heads/branch2

UPDATE:

How to back up private branches in git

+0

"Làm theo câu trả lời của Mark Carey" ... nếu câu trả lời của tôi là câu trả lời "đúng" thì sẽ không thích hợp để trao giải trạng thái "Trả lời". –

3

Thay vì một trong những:

$ git push bar bar/branchX:refs/heads/branchX 

cho mỗi chi nhánh ref'd ở địa phương. Hãy thử điều này

$ git push bar refs/remotes/bar/*:refs/heads/* 

Lệnh trên sẽ đẩy tất cả từ xa bạn đã lưu vào bộ nhớ cục bộ và đặt chúng vào đúng vị trí.

Lưu ý rằng bạn cũng cần phải đẩy bất kỳ thẻ bạn có thể có:

$ git push --tags bar 

Ngoài ra, nó giúp để biết những gì sẽ xảy ra trước khi bạn thực sự làm việc đẩy mạnh:

$ git push --dry-run ...(rest of push cmd) 

LƯU Ý : Tôi đã sử dụng 'bar', nơi hầu hết mọi người sẽ có 'origin' - thay thế bằng tên remote của bạn.

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