2010-02-11 26 views
17

Một đồng nghiệp có một stash trong kho lưu trữ của họ mà tôi có thể truy cập (thông qua hệ thống tập tin), và tôi muốn kéo stash đó vào một nhánh trong kho của tôi.Tôi có thể lấy một stash từ một repo từ xa vào một chi nhánh địa phương không?

 
% git ls-remote ~alice/work/repo/ stash 
3ccc82fb1ee0e7bde1250c7926d333ce21c109c0  refs/stash 

Nhưng khi tôi cố gắng để lấy đó, git nói với tôi "không thể tìm thấy 3cc82 ..."

 
% git fetch ~alice/work/repo stash:new_branch 
remote: Total 0 (delta 0), reused 0 (delta 0) 
error: unable to find 3ccc82fb1ee0e7bde1250c7926d333ce21c109c0 
fatal: object 3ccc82fb1ee0e7bde1250c7926d333ce21c109c0 not found 

Có cách nào tôi có thể lấy stash từ xa?

Trả lời

8

Cập nhật: Một câu trả lời trực tiếp cho câu hỏi các poster ban đầu là:

git send-pack ./ 3ccc82fb1ee0e7bde1250c7926d333ce21c109c0:refs/heads/tempbranch 

'tempbranch' sẽ có mặt tại mới nhất stash (stash {0} @) từ xa. Thật không may tôi không nghĩ rằng các reflog được lấy từ các ngành từ xa, do đó, không có cách nào để có được ở stashes khác, trừ khi bạn có quyền truy cập vào repo nguồn.

Scripting nó: Tôi đăng một giải pháp toàn diện hơn 'kịch bản' qua tại các câu hỏi đề cập

Is it possible to push a git stash to a remote repository?

Ngoài ra, như tôi phát hiện ra trong khi chờ đợi, git-gửi-pack có thể là phương nếu bạn có quyền truy cập vào nguồn repo:

git send-pack ../myworkingfolder/ [email protected]{0}:refs/heads/collegue_stash 
+0

Cảm ơn, tôi thấy rằng (và upvoted nó). Tuy nhiên câu hỏi này đang cố gắng giải quyết một vấn đề khác; Tôi có thể nhìn thấy repo từ xa nhưng đồng nghiệp của tôi đã cất giấu thay vì cam kết, sau đó về nhà và nói với tôi về stash, vì vậy tôi chỉ muốn lấy stash đó. Một vài giải pháp có gió dài hơn hiện diện (ví dụ: tạo một bản vá và áp dụng nó cục bộ) nhưng tôi đang tìm kiếm một cách trực tiếp để tìm dấu vết vào repo của tôi. –

+0

Đã chỉnh sửa nhận xét với nhiều thông tin chi tiết hơn – sehe

+0

Ồ, NICE! Cảm ơn! –

1

Bạn không thể nhưng điều này cung cấp cho bạn một con đường thay thế. is-it-possible-to-push-a-git-stash-to-a-remote-repository

+0

Hi naven87. Tôi đã thấy câu hỏi SO khác nhưng nó không phù hợp với những gì tôi cần. Cảm ơn câu trả lời của bạn, và tôi sẽ chấp nhận nó sau một thời gian nếu không ai khác đăng một giải pháp trực tiếp hơn. –

+0

OK, được chấp nhận. Cảm ơn naven87. –

8

Có, bạn có thể, một phần. stash chỉ khác ref. Bạn có thể lấy các tham số không phải là đầu (các nhánh) bằng cách chỉ định một refspec với đường dẫn đầy đủ.

git fetch some-remote +refs/stash:refs/remotes/some-remote/stash 
git stash apply some-remote/stash 

Bạn có thể cấu hình này lên đến lấy stash khi bạn chạy lấy một bình thường, quá:

git config --add remote.some-remote.fetch +refs/stash:refs/remotes/some-remote/stash 
git fetch some-remote 
git stash apply some-remote/stash 

Nhưng điều này sẽ thất bại nếu không có stash với một "refspec không hợp lệ" như ref không tồn tại, vì vậy bạn có thể làm tốt hơn theo yêu cầu. Bạn có thể thiết lập bí danh như:

cat > /usr/local/bin/git-fetch-stash 
git fetch --verbose "$1" +refs/stash:refs/remotes/"$1"/stash 
^D 
chmod +x /usr/local/bin/git-fetch-stash 

git fetch-stash some-remote 

Lưu ý rằng bạn không thể tìm nạp nhiều dấu gạch ngang. Chúng được lưu trữ dưới dạng mục nhập trong reflog và bạn không thể tìm nạp lại từ xa của từ xa.

+2

Đây phải là câu trả lời được chấp nhận – HerrSerker

+0

Đồng ý. Git đầu tiên + cặp git stash đầu tiên là ma thuật. –

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