Como regenerar um índice para um checkout esparso com alterações locais?

Como regenerar um índice para um checkout esparso com alterações locais?

Eu uso git com checkouts esparsos para trabalhar com subconjuntos de um repositório monolítico muito grande. O desempenho é bom com checkouts esparsos, mas terrível sem.

Ocasionalmente, meu índice é corrompido (a integração git do Xcode é minha causa raiz normal, mas eu consegui isso de várias maneiras diferentes).

Para uma árvore de trabalho normal, tudo bem, apenas excluo o arquivo de índice e git resetposso ter feito algumas alterações preparadas que voltam para não preparadas, mas geralmente não perco nada importante.

Mas para um checkout esparso, git resetnão levarei em conta o manifesto esparso a partir de uma lousa em branco e, portanto, concluirei que todos os arquivos no repositório completo que não estão na árvore de trabalho (ou seja, tudo o que meu checkout esparso excluiu) devem ter sido excluído, deixando-me com uma lista enorme de arquivos "excluídos".

Portanto, a maneira recomendada de redefinir o índice com informações de checkout esparsas (ou seja, definir os sinalizadores skip-worktree) é chamar git read-tree -mu HEAD, mas isso requer que não haja alterações não planejadas, preciso manter essas alterações não planejadas e não posso confirmar ou prepará-los ou algo assim, já que não tenho índice (e dados todos os arquivos "excluídos", também levaria muito tempo para verificá-los, apenas para que o git pudesse excluí-los novamente quando perceber que eles não estão no check-out esparso).

Se eu estivesse disposto a perder minhas alterações locais, poderia ligar git read-tree -m --reset HEAD, o que funciona. Mas como o objetivo é manter minhas alterações não confirmadas, isso não é suficiente.

Responder1

A melhor solução que encontrei até agora é mover todas as minhas alterações para um local temporário, executar e git read-tree -mu HEAD, em seguida, excluir todos os arquivos que o git cria e substituí-los pelas alterações originais.

Isso significa esperar que o git recrie todos os arquivos de checkout esparsos, mas pelo menos não preciso esperar que ele crie todos os outros arquivos no repositório que não quero fazer checkout (o que tende a sermuitomais longo).

informação relacionada