Como transferir seu workspace do TFS de um computador para outro

Imagine o seguinte cenário: você está no meio de um projeto, com vários arquivos em checkout, e por algum motivo precisa trocar de computador e continuar seu trabalho em outro computador.

Se seus arquivos não estivessem sob controle de versão, isso não seria um problema. Era só copiar seu diretório num pen-drive, levar para o outro micro e pronto!

Mas como você está usando o TFS tem algumas coisas que não podem ser esquecidas:

  1. O status do checkout dos arquivos (“pending change”, como chamamos no TFS) é uma informação que é mantida dentro de seu workspace;
  2. O workspace é atrelado ao computadoronde você está trabalhando;
  3. Se você simplesmente levar os arquivos num pen-drive, não vai saber quais estavam em checkout;
  4. Se você nunca mais voltar para o computador antigo vai deixar um monte de arquivos em checkout.

Ou seja, a solução ideal seria podermos levar todos os arquivos (a “solução pen-drive”) e também o status do checkout dos arquivos. Em outras palavras, transferir todo o espaço de trabalho e não só o conteúdo dos arquivos.

Fazer isso parece complicado, mas é daquelas coisas que depois que fazemos uma vez parecem bem simples!

Em linhas gerais, o processo envolve:

  1. Guardar as alterações pendentes num shelveset;
  2. Transferir o workspace para o outro computador;
  3. Atualizar os diretórios de trabalho locais;
  4. Baixar as alterações guardadas no shelveset.

Guardar as alterações pendentes num shelveset

Usar um pen-drive está longe de ser a solução ideal – especialmente se você trabalhar numa empresa onde seu uso não é permitido (bastante comum em empresas do mercado financeiro). Além disso, você não pode sequer fazer um checkin – afinal seu trabalho ainda não está pronto!

A solução é guardar todas as suas alterações num shelveset. Podemos fazer isso via linha de comando ou pela interface gráfica. Para este exemplo, usemos a linha de comando.

Supondo que você tenha mapeado a raiz do controle de versão do TFS para a pasta C:\Projetos, teríamos algo assim:

> C:
> CD \Projetos
> tf shelve Backup_Transferencia /recursive /noprompt

Isso irá criar um shelveset chamado Backup_Transferencia no servidor com todos os arquivos criados/alterados que você precisa manter mas para os quais ainda não poder fazer checkin.

Neste momento você já pode se despedir do seu computador antigo e ir para o novo. Smile

Transferir o workspace para o outro computador

Agora já estamos no novo computador. Quando você conecta pela primeira vez no TFS num computador qualquer é criado um novo espaço de trabalho em branco. O que vamos fazer é trazer o espaço de trabalho que foi criado no computador antigo. Com isso podemos manter todas as informações existentes lá:

  • Mapeamento de diretórios locais/remotos;
  • Status de edição/checkout dos arquivos.

Para mover o espaço de trabalho para o novo computador, executamos o seguinte comando (coloque tudo na mesma linha):

> tf workspaces
    /collection:http://meu-tfs:8080/tfs/MinhaColecao
    /owner:meu_usuario
    /updateComputerName:computador_antigo
    /computer:computador_novo

Onde:

  • http://meu-tfs:8080/tfs/MinhaColecao: URL da TPC (team project collection) do TFS que você está acessando;
  • meu_usuario: Seu usuário no Windows (ou AD) com o qual você conecta no TFS – tipicamente no formato dominio\usuario;
  • computador_antigo: Nome do computador de origem do espaço de trabalho;
  • computador_novo: Nome do computador de destino do espaço de trabalho.

Atualizar os diretórios de trabalho locais

O comando tf workspaces que vimos acima transfere todas as configurações do espaço de trabalho, mas não o seu conteúdo!

Vamos resolver isso agora. Abra o Visual Studio no novo computador, conecte-se ao TFS e abra o Source Control Explorer. Selecione o espaço de trabalho que você moveu para o novo computador (não se esqueça desse passo!):

Seleção no espaço de trabalho ativo no Visual Studio

Pra trazer o conteúdo para o novo computador é preciso baixar novamente os arquivos a partir do TFS. Mas, ao contrário do que muitos estariam tentados a fazer, você não poder usar o Get Latest Version! Isso porque:

  • O TFS assume que você já tem todos os arquivos no seu computador (ele não sabe que você transferiu apenas o espaço de trabalho sem os arquivos); e
  • Alguém pode ter feito um novo checkin que você ainda não está pronto para incorporar ao seu trabalho. Um Get Latest Version poderia desestabilizar a versão do código-fonte em que você está trabalhando.

O primeiro ponto (“O TFS assume que você já tem todos os arquivos no seu computador”) é fácil de resolver. Quem já usa o TFS há algum tempo certamente já deve ter pensado no famoso comando Get Specific Version, com a opção de force get:

Caixa de diálogo Get Specific Version

Mas isso não elimina o segundo problema. Você não pode, em hipótese alguma, usar Latest Version como seletor de versão – afinal alguém pode ter feito um checkin recentemente. O “truque” é usar Workspace Version como seletor de versão:

Caixa de diálogo Get Specific Version com a opção Workspace Version selecionada

Com isso o TFS baixará para sua máquina exatamente a mesma versão dos arquivos que existiam inicialmente no espaço de trabalho. Essa “mágica” só é possível porque o TFS guarda no espaço de trabalho qual era a versão do arquivo no instante em que ele foi baixado para seu computador. Sem isso o comando Undo Pending Changes, por exemplo, não funcionaria!

Vamos à linha de comando para fazer tudo isso?

> C:
> MD \Projetos
> CD \Projetos
> tf get /version:W /recursive /force /noprompt

Reparou nos argumentos /version:W e /force? O W no nosso exemplo significa Workspace – ou seja, use a versão armazenada no espaço de trabalho.

Executar o comando a partir do diretório C:\Projetos é de especial importância. Como a pasta C:\Projetos estava mapeada ao diretório $/ do TFS (no nosso exemplo; em seu computador pode estar diferente) o TFS consegue inferir, a partir do diretório atual, qual o espaço de trabalho correto a usar.

Baixar as alterações guardadas no shelveset

Neste ponto você tem seu espaço de trabalho transferido, restaurado e preenchido no computador novo. Mas ainda falta trazer de volta nossas alterações pendentes. É só fazer um unshelve agora:

> C:
> CD \Projetos
> tf unshelve Backup-Transferencia /recursive /noprompt

E pronto! Agora você pode começar a trabalhar no seu novo computador com todos os arquivos tal como estavam no computador antigo!

Um abraço,
Igor

  • http://blog.lambda3.com.br/L3/giovannibassi/ Giovanni Bassi

    Muda alguma coisa se estivermos usando o novo modelo do TFS12, onde o TFS não faz tracking dos checkouts, Igor? Poderia só fazer uma cópia pro outro PC?