Могу ли я получить тайник из удаленного репо в локальную ветку? - PullRequest
18 голосов
/ 12 февраля 2010

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

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

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

Есть ли способ получить удаленный тайник?

Ответы [ 3 ]

10 голосов
/ 24 апреля 2015

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

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

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

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 , и вы не можете получить список удаленных ссылок.

8 голосов
/ 10 марта 2011

Обновление : Прямой ответ на вопрос автора плаката:

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

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

Написание сценария : я опубликовал более всеобъемлющее «скриптовое» решение по указанному вопросу

Можно ли отправить git stash в удаленный репозиторий?

Кроме того, как я обнаружил, git-send-pack может быть полезен, если у вас есть доступ к исходному репо:

git send-pack ../myworkingfolder/ stash@{0}:refs/heads/collegue_stash
1 голос
/ 12 февраля 2010

Вы не можете, но это дает вам альтернативный путь. это-это возможно к толчку-а-ГИТ-тайник к-а-удаленного хранилищу

...