.gitignore e "Os seguintes arquivos de árvore de trabalho desempilhados seriam sobregravados por checkout"

Então eu adicionei uma pasta ao meu arquivo .gitignore.

Quando faço um "status de idiota", ele me diz

# On branch latest
nothing to commit (working directory clean)

No entanto, quando tento mudar de ramo, recebo o seguinte:

My-MacBook-Pro:webapp marcamillion$ git checkout develop
error: The following untracked working tree files would be overwritten by checkout:
    public/system/images/9/thumb/red-stripe.jpg
    public/system/images/9/original/red-stripe.jpg
    public/system/images/8/thumb/red-stripe-red.jpg
    public/system/images/8/original/red-stripe-red.jpg
    public/system/images/8/original/00-louis_c.k.-chewed_up-cover-2008.jpg
    public/system/images/7/thumb/red-stripe-dark.jpg
    public/system/images/7/original/red-stripe-dark.jpg
    public/system/images/7/original/DSC07833.JPG
    public/system/images/6/thumb/red-stripe-bw.jpg
    public/system/images/6/original/website-logo.png
    public/system/images/6/original/red-stripe-bw.jpg
    public/system/images/5/thumb/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/5/original/logocompv-colored-squares-100px.png
    public/system/images/5/original/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/4/thumb/DSC_0001.JPG
    public/system/images/4/original/logo.png
    public/system/images/4/original/DSC_0001.JPG
    public/system/images/4/original/2-up.jpg
    public/system/images/3/thumb/logo2.gif
    public/system/images/3/original/logo2.gif
    public/system/images/3/original/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/3/original/11002000962.jpg
    public/system/images/2/thumb/Profile Pic.jpg
    public/system/images/2/original/Profile Pic.jpg
    public/system/images/2/original/02 Login Screen.jpg
    public/system/images/1/original/Argentina-2010-World-Cup.jpg
Please move or remove them before you can switch branches.
Aborting

Este é o aspecto do meu ficheiro .gitignore:

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*

Como faço para que isto funcione para poder trocar de ramo sem apagar esses ficheiros?

Se eu fizer uma mudança, isso vai afectar esses ficheiros? Em outras palavras, se eu voltasse a este ramo depois, tudo seria perfeito como até o meu último compromisso?

Eu não'não quero perder esses arquivos, só não'não quero que sejam rastreados.

AVISO: irá apagar ficheiros não rastreados, por isso não é uma grande resposta à pergunta que está a ser feita.

Eu também acertei nesta mensagem. No meu caso, não queria ficar com os ficheiros, por isso isto funcionou comigo:

git 2.11 e mais recentes

git clean  -d  -f .

older git

git clean  -d  -f ""

Se você também quiser remover arquivos ignorados pelo git, então execute o seguinte comando.

ESTEJA AVISADO!!! ISTO PROVAVELMENTE DESTRÓI SEU PROJETO, USE SOMENTE SE VOCÊ SOUBER 100% DO QUE ESTÁ FAZENDO

git 2.11 e mais recentes

git clean  -d  -fx .

older git

git clean  -d  -fx ""

http://www.kernel.org/pub/software/scm/git/docs/git-clean.html

  • -x significa que arquivos ignorados também são removidos, assim como arquivos desconhecidos para o git.

  • `-d' significa remover diretórios não rastreados, além de arquivos não rastreados.

  • "-f" é necessário para forçá-lo a correr.

Comentários (28)
Solução

Parece que você quer os arquivos ignorados, mas eles já foram comprometidos. .gitignore não tem efeito sobre os arquivos que já estão no repo, então eles precisam ser removidos com git rm --cached'. O--cached' irá impedir que ele tenha qualquer efeito na sua cópia de trabalho e irá apenas marcar como removido da próxima vez que você se comprometer. Após os arquivos serem removidos do repo, então o .gitignore irá evitar que eles sejam adicionados novamente.

Mas você tem outro problema com o seu .gitignore, você está usando excessivamente wildcards e isso faz com que ele combine menos do que você espera. Em vez disso, vamos mudar o .gitignore e tentar isto.

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
Comentários (7)

Git está lhe dizendo que quer criar arquivos (chamados public/system/images/9/... etc), mas você já tem arquivos existentes nesse diretório que aren't rastreados por Git. Talvez alguém tenha adicionado esses arquivos ao repositório Git, e esta é a primeira vez que você mudou para aquele ramo?

Provavelmente há uma razão pela qual esses arquivos estão no seu ramo develop, mas não no seu ramo atual. Talvez você tenha que perguntar aos seus colaboradores por que isso acontece.

Como faço para que eu possa trocar de ramo sem apagar esses arquivos?*

Não podes fazê-lo sem fazer desaparecer os ficheiros de alguma forma. Você poderia renomear public para my_public ou algo assim, por enquanto.

Se eu voltasse a este ramo depois tudo seria perfeito como até ao meu último compromisso?

Se cometeres as tuas alterações, o Git não as vai perder. Se você não cometer suas mudanças, então Git vai se esforçar não para sobrescrever o trabalho que você fez. É sobre isso que Git está te avisando na primeira instância aqui (quando você tentou trocar de ramo).

Comentários (2)