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

Igor Abade

Igor Abade V. Leite ([email protected]) é Microsoft MVP (Most Valuable Professional) de Visual Studio ALM desde 2006. Palestrante em diversos eventos da comunidade de desenvolvimento de software (TechEd Brasil, The Developers’ Conference, DevOps Summit Brasil, Agile Brazil, Visual Studio Summit, QCON e outros), é também autor de artigos em revistas e sites como o MSDN Brasil. Desde março de 2011 é um dos sócios da Lambda3, uma consultoria especializada em ALM, desenvolvimento de software e treinamentos. Siga-o no Twitter @igorabade.