Eu tenho um repositório git que é usado apenas para armazenar arquivos de som e gráficos usados em vários projetos. Eles estão todos em um diretório sem subdiretórios. Agora, acabei de criar um script para copiar esses ativos de outro diretório estruturado, com vários níveis de subdiretórios.
Agora, só quero que a estrutura hierárquica do arquivo (origem) seja rastreada pelo git, e o diretório simples (destino) (com todos os arquivos em uma pilha) deve ser ignorado.
Adicionei o diretório de destino ao .gitignore, mas o git ainda está rastreando alterações nele. Eu pensei que se eu confirmar a exclusão do arquivo antigo no diretório de destino, o git pode parar de rastrear o novo conteúdo (copiado pelo script), mas não o faz.
Como faço para o git esquecer o diretório de destino?
fonte
Respostas:
Este comando fará com que o git rastreie seu diretório e todos os arquivos nele sem excluí-los:
git rm -r --cached <your directory>
A
-r
opção causa a remoção de todos os arquivos no seu diretório.A
--cached
opção faz com que os arquivos sejam removidos apenas do índice do git, não da sua cópia de trabalho. Por padrãogit rm <file>
, excluiria<file>
.fonte
add -f
ou seja a sua situação. Como Gordon disse, isso evita que você acidentalmente elimine vários arquivos - o repositório é a lista principal, não o gitignore. Isso também permite que você rastreie manualmente algumas coisas que seriam ignoradas por uma regra curinga, algo que eu achei útil.-r
opção não é "causar a remoção de todos os arquivos no seu diretório", mas sim recursar pelos subdiretórios.Se você precisa ter um arquivo rastreado (com check-in), mas não deseja rastrear outras alterações de um arquivo enquanto o mantém no repositório local e no repositório remoto, isso pode ser feito com:
Depois disso, qualquer alteração nesse arquivo não será mais exibida
git status
.fonte
git update-index --no-assume-unchanged dirname/**/*
Para um subdiretório chamado
blah/
adicionado ao git, os seguintes itens parecem funcionar para ignorar novos arquivos noblah/
. Adicionado ao .gitignore:fonte
TL; DR para limpar seu repositório git e garantir que TODOS os seus itens ignorados sejam realmente ignorados:
Nota: você não precisa especificar um diretório, assim você está limpando todo o repositório remoto .
Para ir além, leia isto
fonte
Não tenho certeza se isso conta ou me faz uma pessoa ruim, mas aqui vai.
*Generated*
ao arquivo .gitignore raizdir *.CheckedIn -Recurse | %{ copy $_.FullName "$($_.FullName)".Replace("CheckedIn","") -EA SilentlyContinue}
Eu me sinto um pouco mal comigo mesma ... mas de fato funciona.
fonte
Ok, parece que você deve primeiro fazer um check-in com o diretório completamente vazio (nem os arquivos antigos nem os novos), e os arquivos adicionados posteriormente serão ignorados. Se você remover os arquivos antigos adicionar e novos antes de confirmar, os novos serão adicionados ao repositório, embora devam ser ignorados.
Pelo menos, isso funcionou para mim nessa situação. Ainda seria ótimo se alguém pudesse fornecer mais informações sobre o que está acontecendo.
fonte