Posso desencaixar para um branch diferente no tfs 2008?


105

Vamos supor que algum desenvolvedor de minha equipe arquivou suas alterações que ele fez no branch A. E estou trabalhando no branch B. Posso desempacotar suas alterações no branch B? (Por GUI ou prompt de comando)


Demonstração do comando acima: Unshelve command básico
Rohit

Respostas:


129

As ferramentas avançadas do Visual Studio devem permitir que você faça isso.

C:\src\2\Merlin\Main>tfpt unshelve /?
tfpt unshelve - Unshelve into workspace with pending changes

Allows a shelveset to be unshelved into a workspace with pending changes.
Merges content between local and shelved changes. Allows migration of shelved
changes from one branch into another by rewriting server paths.

Usage: tfpt unshelve [shelvesetname[;username]] [/nobackup]
                     [/migrate /source:serverpath /target:serverpath]

 shelvesetname          The name of the shelveset to unshelve
 /nobackup              Skip the creation of a backup shelveset
 /migrate               Rewrite the server paths of the shelved items
                        (for example to unshelve into another branch)
 /source:serverpath     Source location for path rewrite (supply with /migrate)
 /target:serverpath     Target location for path rewrite (supply with /migrate)
 /nobackup              Skip the creation of a backup shelveset

Por exemplo, para mesclar um conjunto de prateleira chamado "Nome do conjunto de prateleira" criado na Filial1 para Filial2, use isto:

>tfpt unshelve "Shelve Set Name";domain\userName /migrate /source:"$/Project/Branch1/" /target:"$/Project/Branch2/"

2
Ooohhh ... Curt, acho que você acabou de fazer o meu dia. Vou ter que tentar isso mais tarde.
Herms

De onde você consegue as ferramentas elétricas?
Guy

3
Sim, as ferramentas elétricas DEVEM permitir que você faça isso, mas infelizmente a mesclagem dá terrivelmente errado a cada vez, então é quase inútil.
Tim Booker

A fusão não é tão ruim. Descobri que o Auto Merge funciona em 90% dos casos.
Justin Rudd

2
Apenas tentei. Mudei muitos arquivos dentro do conjunto de prateleiras e, infelizmente, isso não parece funcionar bem. Você precisa "migrar" manualmente todos esses arquivos (também não há seleção múltipla). E então eles são adicionados como novos arquivos à área de trabalho. Não posso usar, porque não posso mais mesclar.
Stefan Steinegger

34

Solução alternativa para tfpt que evita ter que mesclar cada arquivo manualmente

O problema com a ferramenta elétrica tfs é que você está fazendo uma 'mesclagem sem base', então tem que confirmar todos os arquivos . Eu tinha um conjunto de prateleiras com mais de 800 arquivos e nunca confiei no botão 'mesclagem automática' e não queria examinar cada arquivo por vez - então tive que encontrar outra maneira!

  • Baixe e instale o TFS Shelveset Sidekick .
  • A ferramenta aparece em 'Ferramentas' no VS2010
  • Execute a ferramenta 'Shelveset Sidekick', clique em Pesquisar para mostrar shelvesets
  • Clique com o botão direito em seu shelveset e selecione 'Export Shelveset'
  • Salve em um local vazio, como C:\temp\shelveset-name
  • Agora tem uma estrutura de diretório completa contendo APENAS os novos arquivos

(Observação: não há barra de progresso ao exportar - então, se você tiver um conjunto de prateleiras grande que leva muito tempo para exportar, você apenas terá que verificar no Windows Explorer (Arquivo> Propriedades> Tamanho) se os arquivos ainda estão sendo baixados se você acho que está congelado).

Agora você só precisa copiá-los para a nova ramificação com o Windows Explorer.

Isso funcionou para mim:

  • Verificar toda a solução primeiro (no novo ramo)
  • Feche essa solução
  • Colocar o TFS offline de dentro do VS ( ferramenta para fazer isso ) - veja abaixo por que isso é importante ...
  • Copie os arquivos no Windows Explorer. A estrutura do diretório em c:\temp\shelveset-nameterá que ser renomeada para corresponder ao novo branch.Dica: certifique-se de copiar para o lugar certo !!!
  • Coloque o VS online
  • Ele deve encontrar todas as mudanças e adicionar os novos arquivos
  • Se ele solicitar que você vincule o controle de origem, certifique-se de verificar se o caminho está correto para a nova ramificação.
  • Teste - e, em seguida, verifique os novos arquivos

Importante: descobri que se você não colocar o TFS off-line primeiro, acabará com novos arquivos (do seu changeset unshelves) aparecendo sem uma pequena marca de seleção vermelha e você terá que excluí-los e incluí-los novamente para levá-los a adicionar. Se alguém tiver uma solução alternativa para este problema, eu adoraria saber - refrescar não parece funcionar.


Este método é mais fácil para shelvesets maiores e é o que segui. Obrigado!
Ani

Este método é realmente melhor para estantes maiores
Aamir

Bem, você pode escapar sem colocar o TFS offline. Mas não tenho certeza se vale a pena. O que fiz foi executar a ação Comparar - no Source Control Explorer a partir do menu de contexto aberto na pasta relevante. Pode-se filtrar a saída para mostrar apenas os itens que são diferentes. Em seguida, permite fazer uma seleção múltipla sobre eles e verificar todos de uma vez. Mas acho que colocar o TFS offline é mais rápido e simples do que isso.
marcar

Infelizmente, isso não funciona para mim quando tenho "adicionar" alterações no shelveset. Recebo um erro "Falha ao recuperar o arquivo arquivado. É necessária uma alteração pendente arquivada em um arquivo".
John Saunders

@JohnSaunders, você quer dizer um conjunto de prateleiras com quaisquer anúncios ou anúncios exclusivos? Eu não preciso fazer isso há anos :)
Simon_Weaver

1

As informações da prateleira incluem o caminho específico para o qual ela segue. Infelizmente, não conheço nenhuma maneira automática de desencavar para qualquer local diferente daquele onde foi colocado. As vezes que eu quis fazer isso, tive que verificar os arquivos equivalentes no novo branch, descompactar do branch antigo e, em seguida, copiar manualmente os arquivos.

EDIT: Bem, acho que estava fazendo da maneira mais difícil. Terei que experimentar a solução de Curt. :)


0

Gastei uma boa quantidade de tempo para fazer isso e tive poucos problemas para superar. É possível, mas aqui há alguns problemas e poucas regras a seguir para evitar esses problemas

Erro:

incapaz de determinar o espaço de trabalho

Este problema específico foi resolvido executando o comando da pasta raiz da filial de origem . Isso é contrário a algumas respostas no SO, onde dizem para usar o branch "destino" - não, use "source":

cd [your !!source!! branch root]
tfpt unshelve /migrate /source:"$/MyCollection/Development/Maint1.1" /target:"$/MyCollection/Development/Maint1.2" "myShelveset;UserName"

O segundo problema apareceu depois disso. Parece que não foi possível conectar ao servidor TFS. O que percebi é que tenho vários VS instalados e conectados a diferentes servidores TFS. Eu estava usando o VS12 e tinha espaço de trabalho e conexão com o servidor. Mas não percebi que a mesma conexão precisa ser replicada no VS13 para que o TFPT2013 funcione. Ele se conecta ao mesmo servidor e espaço de trabalho.

Também tentei fazer usando o TFPT2015, mas instalei e não instalei o TFPT.exe, portanto foi inútil. Tentei do TFPT2013 ao TFS2015 e funcionou para este comando específico. Eu me pergunto, por que não, se o VS12 / 13 funciona bem contra o TFS2015?

Para resumir

  • Use CMD ou DevCMD - não importa
  • execute o comando da pasta raiz da filial de origem
  • verificar a conexão do Team Explorer Server para um VS específico
  • TF Power Tools 2013 funciona em relação ao TFS v15, pelo menos a opção de migração funciona

0

As etapas a seguir podem ser usadas para shelvesets de tamanho pequeno (~ 20 arquivos ou menos).

  1. No shelveset e nos branches de destino, comece tendo todas as atualizações pendentes registradas ou revertidas.
  2. Na ramificação shelveset, retire os arquivos do shelveset aplicável.
  3. Na ramificação de destino, verifique qualquer um dos arquivos existentes que estavam no shelveset não armazenado.
  4. Compare os arquivos não armazenados na ramificação shelveset com aqueles na ramificação de destino para identificar os arquivos que requerem atualizações de mesclagem (se houver).
  5. Se necessário, faça manualmente as atualizações de mesclagem nos arquivos aplicáveis ​​da etapa anterior e salve esses arquivos no espaço de trabalho da ramificação de destino.
  6. Copie os outros arquivos shelveset da área de trabalho da ramificação shelveset para a área de trabalho da ramificação de destino.
  7. Compare os novos arquivos atualizados no espaço de trabalho da ramificação de destino com os arquivos com check-in. Faça as correções necessárias.
  8. Faça check-in dos novos arquivos atualizados na ramificação de destino.
  9. Reverta os arquivos não armazenados na ramificação shelveset.
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.