Como ignorar arquivos / diretórios no TFS para evitar que eles acessem o repositório de origem central?


254

É possível configurar arquivos / pastas para serem ignorados por projeto no controle de origem TFS?

Por exemplo, eu tenho um site com uma pasta de ativos que não quero acessar no controle de origem. Esses ativos são mantidos por um sistema separado. Além disso, não quero colocar vários gigabytes de ativos no controle de origem, mas preciso de algumas amostras na minha máquina de desenvolvimento, mas também não quero verificá-las.

Se eu estiver trabalhando neste site enquanto estiver vinculado ao controle de origem e atualizar a árvore, esses arquivos serão adicionados automaticamente novamente

Eu quero impedir que isso aconteça.


1
Para espaços de trabalho locais, você pode usar os arquivos -tfignore-como Richard Banks aponta. Para ajustar esse arquivo com o menu de contexto no team-Explorerer, consulte minha resposta. Para Server-Workspaces, forneci um link nos comentários.
Grex

Respostas:


88

Para VS2015 e VS2017

Funciona com TFS (no local) ou VSO (Visual Studio Online - a oferta hospedada pelo Azure)

A documentação do NuGet fornece instruções sobre como fazer isso e eu as segui com sucesso no Visual Studio 2015 e Visual Studio 2017 no VSTS (TFS hospedado no Azure). Tudo está totalmente atualizado a partir de novembro de 2016 e agosto de 2018.

Eu recomendo que você siga as instruções do NuGet, mas apenas para recapitular o que fiz:

  1. Verifique se sua packagespasta não está comprometida com o TFS. Se for, tire-o de lá.
  2. Todo o resto que criamos abaixo vai para a mesma pasta em que seu .slnarquivo existe, a menos que seja especificado de outra forma (as instruções do NuGet não são totalmente claras sobre isso).
  3. Crie uma .nugetpasta Você pode usar o Windows Explorer para nomeá- .nuget.lo para salvar com êxito como.nuget (ele remove automaticamente o último período), mas tentar nomeá-lo diretamente .nugetpode não funcionar (você pode receber um erro ou alterar o nome, dependendo da sua versão do Windows ) Ou nomeie o nuget do diretório e abra o diretório pai no prompt da linha de comandos. tipo. ren nuget .nuget
  4. Dentro dessa pasta, crie um NuGet.configarquivo, adicione o seguinte conteúdo e salve-o:

NuGet.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <solution>
        <add key="disableSourceControlIntegration" value="true" />
    </solution>
</configuration>
  1. Volte para a .slnpasta da sua e crie um novo arquivo de texto e nomeie-o .tfignore(se estiver usando o Windows Explorer, use o mesmo truque que o descrito acima e nomeie-o.tfignore. )
  2. Coloque o seguinte conteúdo nesse arquivo:

.tfignore:

# Ignore the NuGet packages folder in the root of the repository.
# If needed, prefix 'packages' with additional folder names if it's 
# not in the same folder as .tfignore.
packages

# include package target files which may be required for msbuild,
# again prefixing the folder name as needed.
!packages/*.targets
  1. Salve tudo isso, envie-o para o TFS e feche e abra novamente o Visual Studio. O Team Explorer não deve mais identificar a pasta packages como um check-in pendente.
  2. Copie / cole no Windows Explorer o .tfignorearquivo e a .nugetpasta em todas as minhas várias soluções e as confirmei e não tenho mais a packagespasta tentando entrar no meu repositório de controle de origem!

Personalização adicional

Embora não seja meu, achei este .tfignoremodelo de sirkirby útil. O exemplo na minha resposta cobre a packagespasta Nuget, mas esse modelo inclui outras coisas, além de fornecer exemplos adicionais que podem ser úteis se você desejar personalizar ainda mais.


1
Sigai isso no VS 2017 - TFS 2015. Funcionou como um encanto. Todos os meus pacotes Nuget não apareceram mais como alterações pendentes.
James Walsh Jr

Eu apenas tive que abrir as alterações detectadas e adicionar os arquivos recém-criados às alterações pendentes manualmente. Exceto que tudo funcionou bem.
Machado

Isso não funcionou para mim. VS 2017 - TFS 2015. Não consigo fazer check-in. Quando tento, recebo o seguinte erro: "D: \ Src \ MiniCoreWebAPI \ packages \ Microsoft.IdentityModel.Protocols.5.2.1 \ lib \ net451 \ Microsoft.IdentityModel.Protocols .dll: Não foi possível encontrar uma parte do caminho "
Rod

Minha pasta de pacotes não estava registrada, mas ela já foi detectada como uma alteração pendente. Depois de aplicar essas instruções, tive que "Desfazer alterações pendentes" na pasta packages, tudo estava bem quando eu reconstruí e o NuGet restaurava os pacotes.
CodeHxr 30/08/19

172

Se você estiver usando espaços de trabalho locais (TFS 2012+), agora poderá usar o .tfignorearquivo para impedir que pastas e arquivos locais sejam verificados.

Se você adicionar esse arquivo ao controle de origem, poderá garantir que outras pessoas da sua equipe compartilhem as mesmas configurações de exclusão.

Detalhes completos no MSDN - http://msdn.microsoft.com/en-us/library/ms245454.aspx#tfignore

Para os preguiçosos:

Você pode configurar quais tipos de arquivos são ignorados colocando um arquivo de texto chamado .tfignorena pasta em que deseja aplicar as regras. Os efeitos do .tfignorearquivo são recursivos. No entanto, você pode criar arquivos .tfignore em subpastas para substituir os efeitos de um .tfignore arquivo em uma pasta pai.

As regras a seguir se aplicam a um arquivo .tfignore:

  • # inicia uma linha de comentário
  • O e ? curingas são suportados.
  • Uma especificação de arquivo é recursiva, a menos que seja prefixada pelo caractere \.
  • ! nega um especificação de arquivo (os arquivos que correspondem ao padrão não são ignorados)

Arquivo de exemplo:

# Ignore .cpp files in the ProjA sub-folder and all its subfolders
ProjA\*.cpp
# 
# Ignore .txt files in this folder 
\*.txt
#
# Ignore .xml files in this folder and all its sub-folders
*.xml
#
# Ignore all files in the Temp sub-folder
\Temp
#
# Do not ignore .dll files in this folder nor in any of its sub-folders
!*.dll

35
Eu tentei fazer isso. a única coisa que é ignorada é o conteúdo do arquivo .tfignore :(
user1852503

15
@SerjSagan meu computador não me permite criar .tfignoreassim que eu criei .tfignore.e removido o último ponto sobre o seu próprio ..
Peter

5
O problema é que ele ignora apenas os recursos que foram 1) excluídos explicitamente na janela do Source Control Explorer antes do check-in e 2) explicitamente excluídos na janela Alterações pendentes . Por exemplo, se você for usá-lo para ignorar a pasta packages e confiar no NuGet Package Restore, será necessário 1) excluir a pasta packages no Source Control Explorer e 2) excluí-la na janela Pending Changes após o processo NuGet Package Restore . Caso contrário, ele ainda fará o check-in na pasta packages .
Deilan

1
Se o Windows não permitir que você crie o .tfignorearquivo devido à falta de um nome adequado, você poderá criá-lo ou renomeá-lo através de uma janela da linha de comando.
Zarepheth

1
um grande problema com o .tfignore no VS2015. As pessoas são muito infelizes , mas não parece haver uma declaração clara do problema ou um compromisso claro de corrigi-lo.
precisa saber é o seguinte

71

ele faz parecer um pouco complicado para ignorar arquivos (e pastas) no Team Foundation Server. Encontrei algumas maneiras de fazer isso (usando o TFS / Team Explorer / Visual Studio 2008). Esses métodos também funcionam com o tipo de projeto ASP do site.

Uma maneira é adicionar um item novo ou existente a um projeto (por exemplo, clique com o botão direito do mouse no projeto, Adicionar item existente ou arraste e solte do Windows Explorer para o Solution Explorer), deixe o TFS processar o (s) arquivo (s) ou pasta (s) e, em seguida, desfazer a pendência alterações nos itens. O TFS irá desmarcá-los como tendo uma alteração de adição pendente, e os arquivos ficarão quietos no projeto e ficarão fora do TFS.

Outra maneira é com o comando Adicionar itens à pasta do Source Control Explorer. Isso inicia um pequeno assistente e, em uma das etapas, você pode selecionar itens a serem excluídos (embora eu ache que seja necessário adicionar pelo menos um item ao TFS com esse método para que o assistente continue).

Você pode até adicionar uma política de check-in de padrões proibidos (em Equipe -> Configurações do projeto de equipe -> Controle de origem ... -> Política de check-in) para impedir que outras pessoas na equipe façam check-in por engano em determinados ativos.


7
Eu não tinha uma política de padrões proibidos. A resposta a uma pergunta relacionada revela onde obtê-lo. Aparentemente, faz parte das TFS Power Tools .
Leif Carlsen

1
Estou enfrentando problema semelhante, você pode fornecer mais detalhes sobre uma pasta específica para não ser check-in usando Check-in Política
Imran Rizvi

Opa - você está certo, Leif. Faz parte das TFS Power Tools.
Derek Morrison

Infelizmente, troquei de emprego e não uso mais o TFS e não tenho acesso aos meus projetos anteriores, portanto, não tenho certeza sobre a sintaxe da sintaxe da política de check-in de padrões proibidos. Talvez essas perguntas ajudem? stackoverflow.com/questions/2741412/…
Derek Morrison

TFS 2010 Depois de escolher os arquivos a serem incluídos, você pode excluir dessa lista. Não pode tocar arquivos existentes ...
JNF

47

Para o TFS 2013 :

Inicie no VisualStudio- Team Explorer , na caixa de diálogo PendingChanges, desfaça as alterações com o estado [add], que deve ser ignorado.

O Visual Studio detectará os Add (s) novamente. Clique em "Detectado: x add (s)" em Alterações excluídas

No diálogo "Promover alterações de cadidato" aberto, você pode excluir facilmente arquivos e pastas com o menu de contexto. As opções são:

  • Ignorar este item
  • Ignorar por extensão
  • Ignorar pelo nome do arquivo
  • Ignorar por ffolder (sim, ffolder, atualização 4 do TFS 2013 / atualização 4 do Visual Studio 2013 Premium)

Não se esqueça de fazer check-in no arquivo .tfignore alterado.

Para o VS 2015/2017 :

O mesmo procedimento: Na "Guia Mudanças Excluídas" no TeamExplorer \ Mudanças Pendentes, clique em Detectado: xxx add (s)

A guia Alterações excluídas no TeamExplorer \ Alterações pendentes

A caixa de diálogo "Promover alterações de candidatos" é aberta e, nas entradas, você pode clicar com o botão direito do mouse no menu de contexto. O erro de digitação está corrigido agora :-)


Não consigo encontrar essa opção. Estou no VS 2015 RC.
Shimmy Weitzhandler

isso só funcionará se você estiver trabalhando com um espaço de trabalho local, como descrito em detalhe, aqui: msdn.microsoft.com/library/vstudio/...
stvn

@Shimmy: O procedimento no VS 2015 RC é o mesmo, com o mesmo erro de digitação. Veja minha resposta atualizada. Mas, como stvn aponta, o .tfignore funciona apenas com áreas de trabalho locais. Para server-espaços de trabalho que você tem que desfazer a incluir no Checkins pendentes, ver a resposta aqui: stackoverflow.com/questions/21887308/...
Grex

@Shimmy: Você está conectado ao TFS-Server 2015? Certifique-se de que você começa com Team Explorer no VS
Grex

@ qw1564 Tenho certeza de que, quando a pergunta foi feita primeiro, não era possível o guia. Mas agora, esta é a resposta que eu escolheria. Obrigado pelos créditos!
Grex

5

Encontrei a maneira perfeita de ignorar arquivos no TFS, como o SVN.
Primeiro, selecione o arquivo que você deseja ignorar (por exemplo, o Web.config).
Agora vá para a guia do menu e selecione:

Controle de origem do arquivo> Avançado> Excluir web.config do controle de origem

... e boom; seu arquivo é excluído permanentemente do controle de origem.


1
isso está funcionando para mim no TFS 2010 para arquivos gerados por código. THX!
BozoJoe

1
Isso realmente funciona, o .tfignore não funciona para mim. Muito obrigado
EpicKip

2
Não tenho essa opção no VS 2018
Adam

4

Eu vou assumir que você está usando projetos de sites. Eles rastreiam automaticamente o diretório do projeto e colocam tudo no controle de origem. Não há como detê-los.

No entanto, não se desespere. Os projetos de aplicativos da Web não exibem esse comportamento estranho e bastante inesperado (imho: idiota). O WAP é um complemento para o VS2005 e vem direto com o VS2008.

Como alternativa para alterar seus projetos para WAP, considere mover a pasta Assets para fora do controle Source e para uma Biblioteca de Documentos TFS. Faça isso apenas se o projeto em si não usar diretamente os arquivos de ativos.


sim, sua suposição está correta. Eu pensei que seria o caso, só queria ter duplamente certeza de que não perdi nada.
295 Dave
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.