Como posso compartilhar um stash git?


32

Existe uma maneira de compartilhar um esconderijo no git?

Eu trabalho em várias máquinas e muitas vezes quero poder mover meu estado de trabalho atual de uma para outra.

Estou procurando uma maneira de empurrar / puxar um estoque de um clone para outro e fazer com que ele apareça como o estoque do outro clone ou como um aparente ramo remoto. Não estou esperando que o primeiro funcione necessariamente se o controle remoto já tiver seu próprio estoque.

Dado que o stash já é, de fato, um ramo com commit (aparentemente), não estou procurando soluções ao longo das linhas "submeta cada stash a um ramo e depois as compartilhe" - eu já tenho muitas, muitos galhos. Portanto, estou procurando o refspec ou similar que eu possa usar para controlar o push / pull.

Respostas:


26

O stash é justo stashou refs/stash, que você pode enviar para uma ramificação remota:

git push origin stash@{2}:refs/heads/otherstash

O Git se recusará a pressionar diretamente para refs/stash, no entanto. Além disso, não parece haver uma maneira de enviar reflexos inteiros , onde os stashes anteriores são armazenados.


6
git push origin $(for sha in $(git rev-list -g stash); do echo $sha:refs/heads/stash_$sha; done)deve ser bom para todos os esconderijos; Veja também stackoverflow.com/a/5248758/85371
sehe

11

Não é tão integrado como isso, git pushmas para evitar a criação de ramificações, eu uso git stash show -p > change.patch(depois de ocultar as alterações) ou até mesmo git diff --cached > change.patchpara criar um patch no qual eu trabalho git apply change.patchna próxima máquina.

Com esta solução, pelo menos, se muitos arquivos forem alterados no seu estado atual de trabalho, tudo estará contido em uma única unidade de dados.


Sim mas como ? O git stash -p só me pergunta interativamente sobre cada pedaço - depois cospe uma longa fila que eu não entendo. Onde está o "patch" que posso levar comigo para outra máquina? e qual é o diferencial do git? e como você usa o git apply? Você pode elaborar um pouco mais, por favor?
Motti Shneor

Eu detalhei e corrigi a minha resposta #
01/02 Neo

4

Você pode fazer o patch e enviá-lo para alguém. o que eles precisam fazer é aplicá-lo.

git diff >> file.diff

3
Observe que isso funcionará apenas para objetos que geram um diff; cuidado com "Arquivos binários diferem" na saída.
Liam
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.