2010-02-11 2 views
17

У коллеги есть тайник в своем репозитории, к которому я могу получить доступ (через файловую систему), и я хотел бы вытащить этот штамп в ветку в моем репозитории.Могу ли я получить кошелек из удаленного репо в локальную ветвь?

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

Но когда я пытаюсь принести что, мерзавец говорит мне «не удалось найти 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 

Есть ли способ, что я могу принести удаленный притон?

ответ

8

Update: Прямой ответ на вопрос оригинального плаката заключается в следующем:

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

'tempbranch' будет на последней притона (копить @ {0}) от пульта дистанционного управления. К сожалению, я не думаю, что reflog извлекается из удаленных филиалов, поэтому нет способа получить доступ к другим записям, если у вас нет доступа к исходному репо.

Scripting это: Я опубликовал более полное «сценарий» решения в течение по вышеуказанному вопросу

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

Кроме того, как я обнаружил, в то же время, ГИТ-отправить-пакет может быть инструментальным, если вы имеете доступ к источнику репо:

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

Спасибо, я видел это (и поддержал его). Однако этот вопрос пытается решить другую проблему; Я мог видеть отдаленное репо, но мой коллега спрятался вместо того, чтобы совершить сделку, затем вернулся домой и рассказал мне о кошельке, так что я просто хотел захватить этот кошелек. Несколько более длинных намотанных решений представляют себя (например, делают патч и применяют его локально), но я искал прямой способ принести кошелек в свое репо. –

+0

Отредактированный комментарий с большим количеством оплошностей – sehe

+0

О, НИКОГДА! Благодаря! –

1

Вы не можете, но это дает вам альтернативный путь. is-it-possible-to-push-a-git-stash-to-a-remote-repository

+0

Hi naven87. Я видел этот другой вопрос, но мне это не понравилось. Спасибо за ваш ответ, и я буду принимать его через некоторое время, если никто не отправит более прямое решение. –

+0

OK, принято. Спасибо naven87. –

8

Да, вы можете, частично. stash - это еще один ref. Вы можете получить refs, которые не являются головками (ветвями), указав refspec с полным каналом ref.

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

Вы можете настроить это до извлечения тайника при запуске обычной выборки, тоже:

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

Но это не сработает, если нет тайника с «Invalid refspec», как реф не существует, поэтому вам, вероятно, лучше делать это по требованию. Вы можете настроить псевдоним типа:

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 

Предостережение заключается в том, что вы не можете получить несколько задержек. Они хранятся в виде записей в reflog, и вы не можете получить лог-файл удаленного.

+2

Это должен быть принятый ответ – HerrSerker

+0

Согласовано. Первая комбинация git fetch + git stash - магия. –