git update-index --assume-inalterado retorna "fatal incapaz de marcar o arquivo"

133

Estou tendo o mesmo problema que o OP nesta postagem, mas não entendo a resposta marcada como correta (não vejo como isso explica como corrigir a situação)

Eu faço isso e recebo este erro:

$ git update-index --assume-unchanged web.config
fatal: Unable to mark file web.config
  1. O arquivo É adicionado ao repositório

  2. NÃO está em .git/info/exclude

  3. Ele NÃO está dentro .gitignore(estava, mas eu o removi e forçou o web.config a ser adicionado usando git add -f web.config, confirmado e enviado essas alterações ao repositório)

  4. Quando eu faço o Git ls-files -o NÃO está lá

Então, o que posso fazer para corrigir?

Karen
fonte
1
releia a resposta aceita na pergunta referenciada: NÃO deve aparecer na saída de git ls-files -o. Nesse caso, não está no repositório.
Eckes
meu erro de digitação, não é na lista, e é o mais definitivamente no repo
Karen

Respostas:

108

Eu estava tendo o mesmo problema que você e segui os mesmos quatro passos que você indicou acima e teve os mesmos resultados. Isso incluiu o fato de que meu arquivo foi listado durante a execução git ls-files -o. No entanto, no meu caso, também tentei executargit update-index --assume-unchanged um arquivo que não estava listado durante a execução ls-files -oe ainda recebi o mesmo erro " fatal: Unable to mark file".

Eu pensei que talvez fosse um bug e baixei a versão mais recente do git, mas isso não ajudou.

O que finalmente percebi é que esse comando diferencia maiúsculas de minúsculas! Isso inclui o caminho completo e o nome do arquivo. Depois de atualizar o caminho para o diretório para que o caminho completo fosse especificado com a caixa apropriada, o comando foi executado corretamente.

Observe que isso foi feito com o Git for Windows, portanto, os resultados podem variar com outras plataformas.

David Marchelya
fonte
4
Muito obrigada! Isso funcionou! Eu acho que estava usando todas as letras minúsculas antes, ou cd para a pasta e tentei usar esse comando.
Karen
Se o arquivo mudar, isso está errado. O comando é uma promessa, para o usuário, ao Git, de que ele não precisa desperdiçar ciclos indicando o arquivo para detectar se ele foi alterado (para sistemas de arquivos lentos ;-). Eventualmente, um dos comandos do Git notará e você ficará surpreso. A documentação está sendo atualizada para esclarecer isso.
Philip Oakley
1
Obrigado, isso indiretamente me ajudou a descobrir algum script de shell ruim em um projeto. Se um caminho não existir, isso irá falhar! :)
uchuugaka
Observe também que este comando não funcionará para arquivos não versionados. Se você tem um arquivo que não existe no repositório, ele pode ser ignorado no .gitignore, e garoto, eu me sinto bobo ao digitar isso, mas acho que pode ajudar alguém tão burro quanto eu. :)
Jesse Ivy
Apenas para esclarecer o que alguns dos comentários sugeriram, se você estiver usando um shell do Windows que permita evitar diferenças de casos em seus CDs, você receberá esse erro. Dê ao git o caminho completo para o arquivo (com a caixa correta) ou faça o backup e o CD novamente e novamente (novamente, com a caixa correta em todos os estágios).
dlf
54

Eu estava tendo o mesmo problema em um Mac. A distinção entre maiúsculas e minúsculas não foi um problema para mim - o problema era que eu precisava redefinir meu git primeiro:

Problema:

 git update-index --assume-unchanged index.php
 fatal: Unable to mark file index.php

Solução:

git reset HEAD
Unstaged changes after reset:
M   index.php
git update-index --assume-unchanged index.php
Toby Beresford
fonte
2
Estou tendo o mesmo problema no Mac e nenhuma das soluções sugeridas funcionou para mim. Qualquer ideia? Estou tentando parar de rastrear um diretório temporariamente apenas na minha máquina, o nome do diretório é intellij_idea_project_files /. Aparentemente, todos os arquivos deste diretório foram marcados corretamente, exceto um, e esse é meu_projeto_nome.iml.
Javad Sadeqzadeh
1
teve o mesmo problema e esta é a solução que funcionou para mim, não aquela sobre a maiúsculas e minúsculas
CesarPim
Eu também estou no Mac e para mim a "solução" era excluir o arquivo. (Eu postaria isso como resposta, mas não tenho certeza do que aconteceu, talvez mais tarde.) Algo estranho aconteceu. Git estava dizendo que o arquivo foi alterado (eu queria --skip-worktree). Livre-me das alterações locais executando, git restore .mas ignorar ainda deu o erro. Finalmente, tentei excluir o arquivo. Surpreendentemente, o git não disse que houve uma mudança. Claramente, algo estranho aconteceu desde que o git definitivamente o rastreava e eu definitivamente o excluí e definitivamente não dizia que isso era uma mudança.
Capitão Homem
25

No meu caso, a árvore que eu estava marcando era um diretório, e não um arquivo, como no seu caso, e estava faltando a barra após o nome.

Incorreta -

git update-index --assume-unchanged directory-name

Correto -

git update-index --assume-unchanged directory-name/

Observe a barra (/) no final.

Sahil Singh
fonte
1
Obrigado, mas quando eu faço isso eu recebo "Ignorando caminho do diretório-name /"
damian
@damian Especifique o caminho completo do arquivo em vez do diretório pai.
Nahid
6

fatal: Não foi possível marcar a localização do arquivo / el-GR.js

O que você pode fazer é:

  1. Vá para o caminho correto em que o arquivo está presente no seu local (no GITBASH)
  2. Atualize o índice $git update-index --assume-unchanged <file name>

Isso me ajudou! :)

Grace Aloysius
fonte
2
$ git update-index --assume-unchanged ./.idea/vcs.xml fatal: Unable to mark file .idea/vcs.xml $ cd .idea git update-index --assume-unchanged .Trabalhou, obrigado!
AVProgrammer
4

Se o seu caminho tiver espaços, você poderá receber esse erro mesmo se tiver a caixa correta.

Isso resulta no erro "fatal":

git update-index --assume-unchanged code/Solution Files/WebEssentials-Settings-json

Para corrigi-lo, basta adicionar aspas ao redor do caminho.

git update-index --assume-unchanged "code/Solution Files/WebEssentials-Settings-json"
Jon Crowell
fonte
No meu caso, eu tinha o / para trás.
Erik Bergstedt
4

Meu problema foi que tentei o comando com um curinga *, assumindo que seria recursivo, mas não foi.

Então o que eu fiz foi

$ git reset HEAD
Unstaged changes after reset: 
M   .gradle/1.9/taskArtifacts/cache.properties.lock
M   .gradle/1.9/taskArtifacts/fileHashes.bin
M   .gradle/1.9/taskArtifacts/fileSnapshots.bin
M   .gradle/1.9/taskArtifacts/outputFileStates.bin
M   .gradle/1.9/taskArtifacts/taskArtifacts.bin

executando

$ git update-index --assume-unchanged .gradle/1.9/taskArtifacts/*

funcionou para mim na época e não resultou em OPs e meu problema.

metical
fonte
4

Eu tive esse problema quando estava tentando rastrear arquivos * .orig.

Isto é o que eu fiz para rastreá-los:

$git reset -- *.orig

se isso não funcionar:

$git clean -fd
EdC
fonte
5
É perigoso pedir às pessoas para executarem o comando sem dizer a elas que esse comando excluirá os arquivos. $ git clean -fd
HS Rathore
4

Verifique se o arquivo foi adicionado ao git repo, caso contrário, adicione o arquivo no git repo e tente se ele funcionará.

bisw
fonte
3

--assume-unchangedtrata-se de sistemas de arquivos lentos, e os usuários prometem que o Git não precisa verificar esse arquivo, pois o Git pode assumir sua alteração. Mas algum comando ainda verifica e produz 'surpresa'!

Não use em arquivos que mudam.

Desculpe por ser o portador dessa notícia (tenho um patch em andamento para alterar essa documentação).

Philip Oakley
fonte
1
Então, como alguém deve atualizar um arquivo para marcá-lo como 'não me rastreie'?
Javadba 26/07/2015
@javadba consulte stackoverflow.com/a/6964492/717355 'git rm --cached filename'
Philip Oakley
thx - votou nisso: eu realmente o usei logo após postar aqui. trabalho.
Javadba 26/07/2015
nota que git rm --cached filenameirá apagar o arquivo quando os outros puxar
Ryan Taylor
@RyanTaylor sim, é importante que os usuários percebam o que seu comando está dizendo, que é 'pare de rastrear isso, remova-o das minhas revisões'. Leia a visão mais recente do mantenedor e meu novo patch. public-inbox.org/git/[email protected]/...
Philip Oakley
3

No meu caso, tentei usar qualquer um dos métodos acima, mas sem sorte.

Após muitas tentativas, pensei em adicionar meu arquivo para indexar.

git add myfile.php

Git recusou essa ação, mas ele me aconselhou a fazê-la à força.

git add myfile.php -f

E isso funcionou para mim.

Stepanov Max
fonte
2

Verifique se você tem "web.config" marcado.

Caso contrário, você receberá esta mensagem de erro.

OneSolitaryNoob
fonte
1

Talvez útil para alguém. Eu tinha o mesmo problema e não havia nenhum problema de sintaxe, nenhum nome com espaços, nenhum problema de caminho e o comando git reset não funcionou. Eu estava saindo de uma pasta dentro do apache www e o serviço apache foi interrompido. Iniciado novamente o serviço apache e o erro se foi

hernancortes
fonte
1

Um erro comum ao usar esse comando é tentar assumir o arquivo não rastreado ou o arquivo ignorado pelo git.

Certifique-se primeiro de que o arquivo seja rastreado executando

git ls-files | grep relative_path/to/file

Se ele não estiver mostrando seu arquivo, adicione-o primeiro:

git add relative_path/to/file

Se isso mostrar seu arquivo, ou você já o adicionou ao git, poderá executar os comandos git assume normalmente:

git update-index --skip-worktree relative_path/to/file

ou para pastas

git update-index --skip-worktree relative_path/to/folder/

você pode verificar se seu arquivo é considerado ignorado executando

git ls-files -v | grep ^S

O caractere S representa arquivos ignorados.

Ahmed Amr
fonte
0

Para todos os futuros visitantes. Nenhuma das opções acima resolveu meu problema. O que eu percebi é que o .gitignorearquivo deve ser colocado no diretório certo. No meu caso, depois que mudei .gitignorepara o diretório raiz do aplicativo, o problema foi resolvido.

Amir
fonte
0

Verifique se o arquivo a ser marcado existe e se escreve corretamente, especialmente o caminho e o separador. Os separadores de arquivos do sistema windows e linux estão em direções diferentes.

chengwengao
fonte
1
Embora não esteja errada, essa resposta realmente não adiciona nada à pergunta. Todas as suas sugestões já foram apresentadas nas respostas existentes.
Matt
0

Descobri que, às vezes, isso não funciona porque você já confirmou o arquivo no seu .gitignore e fez um push ou pull. Você só precisa fazer o push e seu arquivo deve ser ignorado nas confirmações subsequentes, mesmo quando você modifica o arquivo localmente.

larrytech
fonte
0

Eu tive o mesmo problema com o cygwin no Windows. Fornecendo o caminho completo do arquivo

Sudeep
fonte