Могу ли я получить тайник из удаленного репо в локальную ветвь?

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

% 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

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

Ответ 1

Обновить. Прямой ответ на исходный вопрос о посте:

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

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

Сценарий. Я написал более сложное "скриптовое" решение по указанному вопросу.

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

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

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

Ответ 2

Да, вы можете, частично. 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

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

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