Estou tendo um problema com um repositório no momento e, embora meu Git-fu seja geralmente bom, não consigo resolver esse problema.
Quando clono este repositório, cd
em seguida, no repositório, git status
mostra vários arquivos conforme alterados. Nota: Eu não abri o repositório em nenhum editor ou qualquer coisa.
Tentei seguir este guia: http://help.github.com/dealing-with-lineendings/ , mas isso não ajudou em nada com o meu problema.
Eu tentei git checkout -- .
muitas vezes, mas parece não fazer nada.
Estou em um Mac e não há submódulos no próprio repositório.
O sistema de arquivos é um sistema de arquivos "Journaled HFS +" no Mac e não faz distinção entre maiúsculas e minúsculas. Os arquivos são de uma linha e têm cerca de 79 KB cada (sim, você ouviu direito), portanto, analisar git diff
não é particularmente útil. Ouvi falar sobre o git config --global core.trustctime false
que pode ajudar, o que tentarei quando voltar ao computador com o repositório.
Mudei os detalhes do sistema de arquivos com os fatos! E eu tentei o git config --global core.trustctime false
truque que não funcionou muito bem.
* text=auto
faz? O que significa removê-lo.gitattributes
? Vejo que isso corrige esse problema para mim, mas não sei por que isso ocorre, o que está realmente fazendo e quais os possíveis problemas que está criando.git add
egit commit
normalizei o arquivo e me livrei do problema.git config --global core.autocrlf input
consertou para mim. Obrigado.Deixa comigo. Todos os outros desenvolvedores estão no Ubuntu (eu acho) e, portanto, têm sistemas de arquivos que diferenciam maiúsculas de minúsculas. Eu, no entanto, não (como estou em um Mac). De fato, todos os arquivos tinham gêmeos em minúsculas quando os observei usando
git ls-tree HEAD <path>
.Vou pegar um deles para resolver o problema.
fonte
git ls-tree HEAD <path>
mostrou apenas um único arquivo. Pude ver os arquivos duplicados na interface do GitHub.com, no entanto, e também usá-la para excluir uma versão.resolveu esse problema no meu caso
https://git-scm.com/docs/git-config
TL; DR;
core.fileMode
Se falso, as diferenças de bits executáveis entre o índice e a árvore de trabalho são ignoradas; útil em sistemas de arquivos quebrados como o FAT. Veja git-update-index (1).
O padrão é true, exceto que o git-clone (1) ou o git-init (1) analisará e definirá core.fileMode false, se apropriado, quando o repositório for criado.
fonte
git diff
, descobri que as alterações estavam apenas no modo de arquivo. git pega emchmod -R 777 .
que foi causado quando eu corri meu projeto e esta configuração permitiu-me a ignorar as mudanças chmod por git stackoverflow.com/q/1580596/6207775Presumo que você esteja usando o Windows. Essa página do GitHub a que você vinculou tem os detalhes ao contrário. O problema é que as terminações de linha CR + LF já foram confirmadas no repositório e porque você tem core.autocrlf definido como true ou input , o Git deseja converter as terminações de linha em LF, o que
git status
mostra que todos os arquivos foram alterados.Se este é um repositório que você deseja acessar apenas, mas não tem envolvimento, execute o seguinte comando para apenas ocultar o problema sem realmente resolvê-lo.
Se este é um repositório no qual você estará envolvido ativamente e poderá confirmar alterações. Você pode resolver o problema executando uma confirmação que altera todas as terminações de linha no repositório para usar LF em vez de CR + LF e, em seguida, tomar medidas para impedir que isso aconteça novamente no futuro.
O seguinte é obtido diretamente da página do manual gitattributes e deve ser pré-formado a partir de um diretório de trabalho limpo.
Se algum arquivo que não deve ser normalizado aparecer
git status
, desmarque o atributo de texto antes de executargit add -u
.Por outro lado, os arquivos de texto que o Git não detecta podem ter a normalização ativada manualmente.
fonte
git diff
mostrado para os arquivos quegit status
dizem serem modificados, e também o sistema de arquivos que você está usando?git config core.autocrlf false
foi suficiente). Fomos enganados pelo fato de o cliente estar executando no Linux (SL / RHEL), mas a sessão do Linux é iniciada via x2go a partir de um host do Windows. Portanto, essa pode ser a solução mais provável em um contexto homogêneo do Win + Lin.Por favor, execute os seguintes comandos. Isso pode resolver o problema.
fonte
No Visual Studio, se você estiver usando o Git, poderá gerar automaticamente os arquivos .gitignore e .gitattributes. O arquivo .getattributes gerado automaticamente tem a seguinte linha:
Esta linha está próxima ao topo do arquivo. Nós só precisamos comentar a linha adicionando um # na frente dela. Depois de fazer isso, as coisas funcionaram como esperado.
fonte
O problema também pode surgir de diferentes permissões de arquivo , como foi o meu caso:
Repositório clonado fresco (Windows, Cygwin):
Repositório remoto nu (Linux):
fonte
Eu queria adicionar uma resposta mais direcionada a "Por que" isso acontece, porque já existe uma boa resposta sobre como corrigi-lo.
Portanto,
.gitattributes
tem uma* text=auto
configuração que causa esse problema.No meu caso, os arquivos no ramo mestre do GitHub tinham
\r\n
finais. Eu disquei as configurações no repositório para fazer check-in com\n
finais. Eu não sei o que o Git verifica, no entanto. Ele deveria fazer check-out com finais nativos na minha caixa do Linux (\n
), mas acho que ele fez check-out do arquivo com\r\n
finais. O Git reclama porque vê as\r\n
terminações com check-out que estavam no repositório e me avisa que fará o check-in nas\n
configurações. Portanto, os arquivos devem "ser modificados".Esse é o meu entendimento por enquanto.
fonte
Eu tive o mesmo problema. Também com um Mac. Observando o repositório em uma máquina Linux, notei que tinha dois arquivos:
geoip.dat e GeoIP.dat
Eu removi o que estava obsoleto na máquina Linux e clonei o repositório novamente no Mac. Não pude extrair, confirmar, ocultar ou extrair da minha cópia do repositório quando havia duplicatas.
fonte
O mesmo problema para mim. Eu pude ver várias imagens com o mesmo nome, como "textField.png" e "textfield.png" no repositório remoto do Git, mas não no meu repositório local. Eu só consegui ver "textField.png", que não foi usado no código do projeto.
Acontece que a maioria dos meus colegas está no Ubuntu usando o sistema de arquivos ext4, enquanto eu estou em um Mac usando o APFS.
Graças à resposta de Sam Elliott , a solução foi bastante simples. Primeiro, pedi a um colega no Ubuntu para excluir as versões redundantes de arquivos com letras maiúsculas, depois confirmar e pressionar remotamente.
Então eu executei o seguinte:
Por fim, decidimos que todo desenvolvedor deve alterar sua configuração do Git para impedir que isso aconteça novamente:
ou
fonte
upvoted
@ kds !=
) porque ele terminará noignorecase = =
arquivo de configuração.Eu também tive o mesmo problema. No meu caso, eu clonei o repositório e alguns arquivos estavam imediatamente ausentes.
Isso foi causado pelo caminho para o arquivo e pelo nome de arquivo ser muito longo para o Windows. Para resolvê-lo, clone o repositório o mais próximo possível da raiz da unidade de disco rígido para reduzir o comprimento do caminho para o arquivo. Por exemplo, clone-o para em
C:\A\GitRepo
vez deC:\Users Documents\yyy\Desktop\GitRepo
.fonte
Edite o arquivo chamado
.git/config
:Ou:
Conteúdo
Mude
filemode=true
parafilemode = false
.fonte
git config core.Filemode false
Para novas versões do macOS, isso pode ser causado por um recurso de segurança do sistema operacional.
No repositório em que eu estava trabalhando, havia um arquivo binário que tinha * .app como tipo de arquivo.
Foram apenas alguns dados serializados, mas o macOS trata todos os arquivos * .app como um aplicativo e, como esse arquivo não foi baixado pelo usuário, o sistema considerou-o inseguro e adicionou o
com.apple.quarantine
atributo file, garantindo que o arquivo não possa ser executado.Mas definir esse atributo no arquivo também estava alterando o arquivo e, portanto, apareceu no conjunto de alterações do Git sem nenhuma maneira de revertê-lo.
Você pode verificar se você tem o mesmo problema executando
$ xattr file.app
.A solução é bastante simples, desde que você não precise trabalhar com o arquivo. Basta adicionar
*.app binary
ao seu.gitattributes
.fonte
Copiei meu repositório local para outra pasta e um monte de arquivos modificados apareceu. Minha solução alternativa foi: eu escondi os arquivos modificados e excluí o esconderijo . O repositório ficou limpo.
fonte
Eu descobri que o Git estava tratando meus arquivos (.psd nesse caso) como texto. A configuração para um tipo binário nos atributos .gitat resolveu.
fonte
Eu estava tentando fazer uma nova análise interativa, mas alegava que havia alguns arquivos modificados, por isso não me deixou fazê-lo agora. Tentei de tudo para voltar a um repositório limpo, mas nada funcionou. Nenhuma das outras respostas ajudou. Mas isso finalmente funcionou ...
Estrondo! Repositório limpo. Problema resolvido. Depois, tive que abandonar o último commit quando fiz o meu
rebase -i
e, finalmente, tudo estava limpo novamente. Bizarro!fonte
No caso de ajudar alguém, pode haver outra causa para esse problema: versões diferentes do Git. Eu estava usando a versão padrão instalada do Git em uma caixa do Ubuntu 18.04 (Bionic Beaver) e tudo estava funcionando bem, mas ao tentar clonar o repositório usando o Git no Ubuntu 16.04, alguns arquivos estavam aparecendo como modificados.
Nenhuma das outras respostas aqui resolveu meu problema, mas a atualização das versões do Git para corresponder nos dois sistemas resolveu o problema.
fonte