Могу ли я получить тайник из удаленного репо в локальную ветвь?
У коллеги есть своп в своем репозитории, к которому я могу получить доступ (через файловую систему), и я хотел бы вытащить этот штамп в ветку в моем репозитории.
% 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, и вы не можете получить удаленный рефлок.
Ответ 3
Вы не можете, но это дает вам альтернативный путь.
is-it-possible-to-push-a-git-stash-to-a-remote-repository