Por alguma razão, quando inicialmente fiz um puxão do repositório para um projeto git meu, recebi uma tonelada de arquivos em minha cópia de trabalho que não fizeram alterações discerníveis, mas continuam aparecendo na minha unstaged changes
área.
Estou usando o Git Gui no Windows xp e quando vou ver o arquivo para ver o que mudou. Tudo o que vejo é:
old mode 100755
new mode 100644
Alguém sabe o que isso significa?
Como posso obter esses arquivos da minha lista de alterações sem etapas? (Muito chato ter que passar por centenas de arquivos, apenas para escolher os arquivos que eu editei recentemente e quero confirmar).
git update-index --chmod=(+|-)x <path>
.git config --global ...
para definir a opção no seu arquivo de configuração global.Definir
core.filemode
como false faz o trabalho, mas certifique-se as configurações em~/.gitconfig
não estão sendo substituídas por aqueles no.git/config
.fonte
~/.gitconfig
arquivo!git config --list --show-origin | sls filemode
ou no Linuxgit config --list --show-origin | grep filemode
. Isso mostrará onde você precisa fazer os ajustes.Encontrei esse problema ao copiar um repositório Git com arquivos de trabalho de um disco rígido antigo algumas vezes. O problema decorre do fato de o proprietário e as permissões terem mudado da unidade / máquina antiga para a nova. Por muito tempo, execute os seguintes comandos para corrigir as coisas ( graças a esta resposta do superusuário ):
O comando anterior realmente resolverá as diferenças relatadas pelo git diff, mas revogará sua capacidade de listar os diretórios, por isso
ls ./
falharáls: .: Permission denied
. Para corrigir isso:A má notícia é que, se você possui algum arquivo que deseja manter executável, como
.sh
scripts, precisará revertê-los. Você pode fazer isso com o seguinte comando para cada arquivo:fonte
git config core.filemode
está definido comotrue
, caso contrário, as alterações de permissão não serão detectadas. Eu também precisava atualizar o índice git após cada alteração para buscá-lo.Geralmente acontece quando o repositório é clonado entre máquinas Windows e Linux / Unix.
Apenas diga ao git para ignorar a alteração do modo de arquivo, aqui estão várias maneiras:
Configure SOMENTE para o repo atual:
Configure globalmente:
Adicione ~ / .gitconfig:
Basta selecionar um deles.
fonte
Parece que você alterou algumas permissões do diretório. Eu executei as seguintes etapas para restaurá-lo.
fonte
Você pode tentar git reset --hard HEAD para redefinir o repo para o estado padrão esperado.
fonte
git reset --hard HEAD
funcionou perfeitamente para mim. graçasEu enfrentei o mesmo problema. E isso salvou minha vida: https://gist.github.com/jtdp/5443498
fonte
Isso acontece quando você puxa e todos os arquivos foram executáveis no repositório remoto. Torná-los executáveis novamente fará com que tudo volte ao normal novamente.
Você pode precisar fazer:
em vez disso, para arquivos que não foram definidos como executáveis e que foram alterados devido à operação acima. Existe uma maneira melhor de fazer isso, mas isso é apenas uma correção muito rápida e suja.
fonte
Você pode usar o seguinte comando para voltar ao modo de arquivo.
git add --chmod=+x -- filename
Em seguida, comprometa-se com o ramo.fonte
Eu tinha apenas um arquivo problemático com as permissões alteradas. Para revertê-lo individualmente, apenas o excluí manualmente
rm <file>
e, em seguida, fiz um checkout para obter uma nova cópia.Felizmente eu ainda não o havia encenado.
Se tivesse, poderia ter corrido
git reset -- <file>
antes de corrergit checkout -- <file>
fonte
Eu acabei de encontrar esse problema ao diferenciar meu ramo com o mestre. O Git retornou um erro de 'modo' quando eu esperava que meu ramo fosse idêntico ao mestre. Corrigi o problema excluindo o arquivo e depois mesclando o master novamente.
Primeiro, executei o diff:
Isso retornou:
Em seguida, executei o seguinte para corrigir:
Depois disso,
git diff
não retornou diferenças entre meu ramo e mestre.fonte