Eu tenho um diretório tmp em meu repo git que gostaria que ainda existisse, mas ser ignorado. Eu o adicionei .gitignore
, mas git status
ainda me informa sobre as alterações nos arquivos desse diretório. Tentei git rm -r --cached
, mas isso o remove do repositório remoto. Como posso interromper o rastreamento de alterações neste diretório, mas ainda permitir que ele exista? Também preciso fazer isso para 1 arquivo, mas as alterações também aparecem git status
depois de .gitignore
carregá-los. O que devo fazer?
git
version-control
21312312
fonte
fonte
Respostas:
Em vez de
.gitignore
, você pode atualizar o repositório git local executando o seguinte comando:Nesse caso, um arquivo está sendo rastreado no repositório de origem. Você pode modificá-lo em seu repositório local e o git nunca o marcará como alterado. Leia mais em:
fonte
git update-index --no-assume-unchanged <file>
. Se você quiser listá-losgit ls-files -v | grep '^h'
.Ignorar as alterações feitas nos arquivos ao permitir que existam é o objetivo exato de
.gitignore
. Portanto, adicionar os arquivos (ou diretórios).gitignore
é a única coisa que você precisa fazer.Mas o seu problema é que o git já está rastreando os arquivos que você deseja ignorar e
.gitignore
não se aplica aos arquivos rastreados. A única maneira de parar esse rastreamento é dizer ao git para removê-los. Ao usargit rm --cached
, você evita que o git exclua seus arquivos locais, mas qualquer outro repositório que obtenha suas alterações aplicará a remoção. Não acho que haja uma maneira de evitar isso em seu próprio repositório. Você deve fazer algo nos outros repositórios ou aceitar que os arquivos serão removidos.Para evitar a remoção de outro repositório, você pode:
git rm --cached
os arquivos e commit antes de puxar suas alterações. O Git mesclará agradavelmente as duas remoções sem tocar nos arquivos já não rastreados.fonte
git update-index --assume-unchanged <file>
. Dê uma olhada em: blog.pagebakers.nl/2009/01/29/…git rm --cached <filename> -r
e depois disso, o envio muda para o repositório novamente para que o arquivo seja removidoColoque um
/
no final do nome do diretório em seu.gitignore
arquivo, ou seja,Se você rastreou arquivos dentro desse diretório, você precisa dizer ao git para esquecê-los primeiro (antes de adicionar o dir à lista de ignorados). Supondo que você não tenha nada de vital lá (ou seja, que você pode arranhá-lo):
Novos arquivos nesse diretório não serão rastreados.
A
--cached
opção degit rm
funciona apenas no índice (alterações pendentes mais ou menos). Não tem efeito na árvore de trabalho ou no status do que foi rastreado ou não.fonte
the/dir/
ethe/dir/*
.gitignore não tem efeito nos arquivos rastreados.
O que você deseja é definir o bit assume-inalterado nos arquivos do diretório tmp /. Há uma boa explicação de como fazer isso aqui: Git: descompactar um arquivo apenas no repo local e mantê-lo no repo remoto
Além disso, uma linha para definir assume-unchanged em todos os arquivos em um diretório - git update-index --assume-unchanged no diretório .
fonte
Parece que você está tentando rastrear um arquivo (por exemplo
index.php
), adicioná-lo a um repositório remoto e, em seguida, parar de assistir ao rastreá-lo, enquanto mantém o arquivo no remoto (ou seja, mantémindex.php
inalterado no repositório remoto enquanto o altera localmente).Pelo que entendi, o git não pode fazer isso. Você pode acompanhar um arquivo ou não. Se você rastreia um arquivo, ele existe no repositório remoto e muda quando você efetua as mudanças nele. Se você não controla um arquivo, ele não existe no repositório remoto.
Como não é possível fazer exatamente o que você deseja com o git, existem potencialmente outras soluções, dependendo da sua situação exata. Por exemplo, por que você não deseja
index.php
alterar no controle remoto quando você altera localmente? Existem configurações específicas do usuário no arquivo? Se for esse o caso, você pode fazer:Agora edite index_template.php para que fique como você deseja que apareça no repositório remoto. Adicione algo ao seu README para dizer às pessoas que usam seu repositório que, uma vez que o clonem, devem copiar index_template.php para index.php e editá-lo para atender às suas necessidades.
Quando alguém clona seu repo, ela deve criar o seu próprio
index.php
. Você fez mais fácil para eles: simplesmente copiarindex_template.php
paraindex.php
e revisá-lo com as configurações específicas do computador.fonte