Por que por que POR QUE os TFSs não conseguem o trabalho mais recente de forma consistente?
Você pensaria que esse recurso teria sido testado completamente.
O que tenho que fazer é obter uma versão específica e, em seguida, verificar a substituição de arquivos graváveis e a substituição de todos os arquivos.
Minha configuração local está bagunçada ou você também faz isso?
Respostas:
O TFS redefiniu o que "Get Latest" faz. Nos termos do TFS, Obter Mais Recente significa obter a versão mais recente dos arquivos, mas ignore os que o servidor acha que já estão em sua área de trabalho. O que para mim e para quase todo mundo no planeta está errado.
Consulte este link: http://blogs.microsoft.co.il/blogs/srlteam/archive/2009/04/13/how-get-latest-version-really-works.aspx
A única maneira de fazer o que você quer é obter a versão específica e marque as duas caixas "Substituir ...".
fonte
Às vezes
Get specific version
, marcar as duas caixas de seleção não gera o arquivo mais recente. Você provavelmente fez uma alteração em um arquivo e deseja desfazer essas alterações ao obter novamente a versão mais recente. Bem ...Undo pending changes
é para isso e não é o objetivoGet specific version
.Se em dúvida:
E este é o meu favorito que eu acabei de descobrir:
fique de olho na
Output
janela para mensagens como esta:Aviso - Não é possível atualizar R: \ TFS-PROJECTS \ www.example.com \ ExampleMVC \ Example MVC \ Example MVC.csproj porque você tem uma edição pendente.
Esta mensagem crítica aparece na janela de saída. Nenhuma outra notificação! Nada nas alterações pendentes e nenhuma outra mensagem de diálogo informando que o arquivo que você solicitou explicitamente não foi recuperado! E sim - você resolve isso executando
Undo pending changes
e obtendo o arquivo.fonte
Undo pending changes
) funcionou para mim.O TFS, como alguns outros provedores de controle de origem, como o Perforce, faz isso, pois o sistema sabe qual foi a última versão que você obteve com êxito, portanto, faça as alterações mais recentes em "obter alterações desde x". Se você seguir as regras e realmente verificar as coisas antes de editá-las, não confunda as coisas e "receba as últimas" realmente faz o que diz.
Como você viu, você pode forçá-lo a reavaliar tudo, que tem um uso de largura de banda muito maior, mas se comporta mais perto de como o SourceSafe costumava.
fonte
É difícil responder a uma declaração sem exemplos de como não está funcionando, mas é crucial entender que o TFVC (no modo "Área de Trabalho do Servidor", que era o mecanismo anterior ao TFS 2012) não examina o estado do seu sistema de arquivos local . Os Espaços de Trabalho do Servidor TFVC são um tipo de sistema "checkout-edit-checkin", onde isso é planejado por projeto, uma decisão intencional tomada para reduzir massivamente a quantidade de E / S de arquivo necessária para determinar o estado do seu espaço de trabalho. Em vez disso, as informações da área de trabalho são salvas no servidor.
Isso permite que Workspaces TFVC Server para escala para muito grandes bases de código de forma muito eficiente. Se você estiver em uma base de código de vários gigabytes (como o Visual Studio ou a árvore de origem do Windows), seu cliente não precisará verificar o sistema de arquivos local, procurando arquivos que possam ter sido alterados, porque o contrato que você possui com o TFS é que você fará o check-out explícito de um arquivo quando você quiser editá-lo.
Espera-se que você não marque um arquivo como somente gravação e altere-o sem primeiro fazer check-out explicitamente. Se você seguir esse caminho, o servidor não saberá que você fez alterações no seu arquivo e a execução de uma operação "Get Latest" não atualizará o espaço de trabalho local, porque você não informou ao servidor que fez alterar.
Se você fazer subverter este mecanismo, então você pode usar o
tfpt reconcile
comando para examinar o seu espaço de trabalho local para as mudanças que você fez localmente.Se você estiver usando a versão "Obter versão específica" e selecionando as opções "forçar" e "substituir", é muito provável que você tenha o hábito de ignorar todos os reforços que o TFS implementou para impedir que você se machuque, e você provavelmente deve considerar os Espaços de trabalho locais do TFVC.
Os Espaços de trabalho locais do TFVC fornecem um tipo de sistema de controle de versão "editar, mesclar e confirmar", o que significa que você não precisa fazer check-out explicitamente dos arquivos antes de editá-los e eles não são somente leitura em disco. Em vez disso, basta editar o arquivo e seu cliente verificará o sistema de arquivos, notará a alteração e a apresentará como uma alteração pendente.
Os Espaços de trabalho locais do TFVC são recomendados para pequenos projetos que não exigem controle de permissões refinadas, pois apresentam um fluxo de trabalho muito melhor. Você não precisa estar online e não precisa fazer check-out explicitamente dos arquivos antes de editá-los.
Os Espaços de Trabalho Locais TFVC são o padrão no TFS 2012 e, se não estiverem ativados para você, pergunte ao administrador do servidor. (Organizações com bases de código muito grandes ou requisitos rigorosos de auditoria podem desativar os Espaços de Trabalho Locais do TFVC.)
O excelente livro de Eric Sink, Version Control By Example, descreve as diferenças entre os sistemas checkout-edit-checkin e edit-merge-commit e quando um é mais apropriado que o outro.
O manual do Professional Team Foundation Server 2013 também fornece informações excelentes sobre as diferenças entre os Espaços de trabalho do servidor TFVC e os Espaços de trabalho locais do TFVC. A documentação e os blogs do MSDN também fornecem informações detalhadas:
fonte
O Team Foundation Server (TFS) controla sua cópia local em um diretório oculto chamado $ TF. Quando você emite a "versão mais recente", o TFS examina essa pasta e vê se o tempo está com a cópia mais recente. Se isso acontecer, não fará o download da cópia mais recente. Não importa se você possui o arquivo original ou não. Na verdade, você pode ter excluído a pasta inteira (como no meu caso) e o TFS não buscará a cópia mais recente, porque não analisa o arquivo real, mas o diretório oculto onde ele registra as alterações. A falha nesse design é que qualquer coisa feita fora do sistema não será gravada no TFS. Por exemplo, você pode acessar o Windows Explorer, excluir uma pasta ou arquivo e o TFS não o reconhecerá. Será totalmente cego. Pelo menos eu espero que o Windows não permita que você exclua esse arquivo, mas sim!
Uma maneira de impor a cópia mais recente é excluir a pasta oculta $ TF manualmente. Para fazer isso, vá para o prompt de comando e navegue até a pasta raiz onde seu projeto foi retirado e emita este comando
Se você quiser apenas verificar a pasta oculta, poderá fazê-lo usando
Nota: Se você fizer isso, o tf pensará que você não possui nenhuma cópia local, mesmo que você a possua em arquivos e sincronizará tudo novamente.
Cuidado: Use este método por sua conta e risco. Por favor, não o use em trabalhos críticos.
fonte
"Obter versão mais recente" por padrão só fará o download dos arquivos que foram alterados no servidor desde a última vez em que você executou "Obter versão mais recente". O TFS mantém o controle dos arquivos baixados para que não gaste tempo baixando a mesma versão dos arquivos novamente. Se você estiver modificando os arquivos fora do Visual Studio, isso poderá causar problemas de consistência, como parece que você está vendo.
fonte
Infelizmente, deve haver um ou mais erros no TFS 2008, pois esse problema surge regularmente em máquinas de desenvolvedores e constrói servidores nos quais eu também trabalho.
Posso fazer o Get Latest, posso ver na lista do histórico do projeto que houve confirmações após a última vez que obtive o Get Latest, não toquei nos arquivos do disco de forma alguma, mas após a função "Get Latest" concluído, quando verifico a guia TFS, alguns dos arquivos ainda informam que não são a versão mais recente.
Obviamente, o TFS pode determinar que eu tenho arquivos antigos localmente, pois a lista diz isso. No entanto, o Get Latest não consegue fazer isso, obtenha a versão mais recente. Se eu fizer o que você fez, use a versão Get Specific e marque as duas caixas de seleção na parte inferior da caixa de diálogo, para que os arquivos sejam recuperados.
Alteramos nossos servidores de compilação para sempre usar o tipo de função da versão Get Specific, portanto, esta parte agora funciona, mas como nosso servidor de compilação (TeamCity) também depende de verificar se houve alterações nos arquivos para iniciar uma compilação , às vezes passa para o modo "nada mudou, nada para ver aqui, siga em frente" e não faz nada até executarmos forçosamente a configuração da compilação.
Observe que experimentei esse problema em uma máquina que nunca foi tocada, exceto para obter as versões mais recentes +, ambas manualmente, para que não haja nada de adulteração nos arquivos. É apenas TFS ficando confuso.
Uma vez que isso ocorreu, verifiquei que os arquivos no disco eram realmente binários idênticos à versão recuperada anteriormente, portanto, nenhuma violação manual foi feita com os arquivos.
Além disso, não consigo ver como o TFS pode "saber" se os arquivos foram alterados no disco ou não, sem realmente examinar o conteúdo. Se uma parte do TFS perceber que os arquivos realmente não são a versão mais recente, a versão Get Latest deverá conseguir absolutamente a versão mais recente. Isso em referência aos comentários para outras respostas aqui.
fonte
Pode ser porque você está efetuando login no TFS como o mesmo usuário e o nome da área de trabalho (com base no nome da máquina por padrão) também é o mesmo; portanto, o TFS acha que você está na mesma máquina e na mesma área de trabalho; portanto, você já tem a versão mais recente do os arquivos, para que não os obtenha para você.
tente renomear sua máquina e crie um novo espaço de trabalho como uma nova máquina.
fonte
Eu tive o mesmo problema com o Visual Studio 2012. Não importa o que eu fiz, ele não recebeu o código do controle de origem TFS.
No meu caso, a causa foi o mapeamento de uma pasta + subpasta do controle de origem separadamente, mas para a mesma árvore no meu HD local.
A solução foi remover o mapeamento da subpasta usando a janela "gerenciar áreas de trabalho".
fonte
A maioria dos problemas que eu vi com os desenvolvedores reclamando que o Get Latest não faz o que eles esperam decorre do fato de que eles estão executando o Get Latest no Solution Explorer e não no Source Control Explorer. O Solution Explorer obtém apenas os arquivos que fazem parte da solução e ignora qualquer coisa que possa ser exigida pelos arquivos na solução e, portanto, parte do controle de origem, enquanto o Source Control Explorer compara seu espaço de trabalho local com o repositório no servidor para determinar quais arquivos são precisos.
fonte
Quando me deparei com esse problema, não obtendo as últimas e as incompatibilidades de versão, primeiro faço uma "Obter versão específica", defina-a como changeset e insira 1. Isso removerá todos os arquivos do espaço de trabalho local (para esse projeto, pasta, arquivo etc) e também terá a atualização do TFS, para que você saiba que agora não há nenhuma versão baixada. Você pode fazer um "Get Latest" e viola, na verdade você terá as últimas
fonte
Isso pode acontecer quando você usa o TFS de duas máquinas diferentes com a mesma conta. Nesse caso, você deve comparar para ver os arquivos alterados e verificá-los, obter as últimas e desfazer alterações pendentes para remover a verificação
fonte
Isso funcionou para mim:
1. Saia do Visual Studio
2. Abra uma janela de comando e navegue até a pasta: "% localappdata% \ Local \ Microsoft \ Team Foundation \"
3. Navegue até as subpastas de todas as versões e exclua a subpasta "cache" e seu conteúdo
4. Reinicie o Visual Studio e conecte-se ao TFS.
5. Teste a versão mais recente.
fonte
só quero adicionar o TFS O MSBuild não suporta caracteres especiais em pastas, como "@"
eu tinha experimentado no passado onde uma de nossas pastas de projeto chamada External @ Project1
criamos uma definição de compilação do TFS para executar um arquivo msbuild personalizado; a pasta da área de trabalho não está recebendo nenhum conteúdo da pasta External @ Project1 durante a atualização da área de trabalho. Parece que o tfs get está falhando, mas não mostra nenhum erro.
após algumas tentativas e erros e renomear a pasta para _Project1. voila, temos arquivos na pasta (_Project1).
fonte
Ferramenta: Ferramentas elétricas TFS
Fonte: http://dennymichael.net/2013/03/19/tfs-scorch/
Comando: tfpt scorch / recursive / exclui C: \ LocationOfWorkspaceOrFolder
Isso exibirá uma caixa de diálogo solicitando que você exclua ou faça o download de uma lista de arquivos. Marque ou desmarque os arquivos de acordo e pressione ok. Aparência na grade (CheckBox, FileName, FileAction, FilePath)
Causa: o TFS será comparado somente aos itens na área de trabalho. Se alterações foram feitas fora do espaço de trabalho, o TFS não as notará.
Espero que alguém ache isso útil. Encontrei esta postagem depois de excluir um punhado de pastas em vários locais. Não lembrar as pastas que excluí excluía a opção usual Forçar / Substituir que eu teria usado.
fonte
No meu caso, obter versão específica, mesmo marcando as duas caixas de seleção e desfazendo todas as alterações pendentes, não funcionou.
Verificou os espaços de trabalho. Edite o espaço de trabalho atual. Verifique todos os caminhos. O caminho da solução estava incorreto e estava apontando para uma pasta excluída.
Corrigido o caminho e obter as atualizações mais recentes.
fonte
Clique com o botão direito do mouse em: Avançado> Obter versão específica . Selecione "Versão Letest" e agora, importante, marque duas verificações:
As verificações são:
Substituir arquivos graváveis que não estão marcados
Substitua todos os arquivos, mesmo que a versão local corresponda à versão especificada
fonte