Eu tenho um projeto no qual eu tenho que mudar o modo de arquivos com chmod
para 777 durante o desenvolvimento, mas que não deve ser alterado no repositório principal.
O Git pega chmod -R 777 .
e marca todos os arquivos como alterados. Existe uma maneira de fazer o Git ignorar as alterações no modo que foram feitas nos arquivos?
git diff
, e que, portanto, não querem mudar seus arquivos de configuração do Git: você pode usargit diff -G.
por Zed resposta aqui .Respostas:
Tentar:
No git-config (1) :
O
-c
sinalizador pode ser usado para definir esta opção para comandos únicos:E o
--global
sinalizador fará com que seja o comportamento padrão para o usuário conectado.Alterações na configuração global não serão aplicadas aos repositórios existentes. Além disso,
git clone
egit init
explicitamente definidocore.fileMode
comotrue
na configuração do repositório, conforme discutido no Git global core.fileMode false substituído localmente no cloneAtenção
core.fileMode
não é a melhor prática e deve ser usada com cuidado. Essa configuração abrange apenas o bit de modo executável e nunca os bits de leitura / gravação. Em muitos casos, você acha que precisa dessa configuração porque fez algo comochmod -R 777
tornar todos os seus arquivos executáveis. Mas na maioria dos projetos, a maioria dos arquivos não precisa e não deve ser executável por motivos de segurança .A maneira correta de resolver esse tipo de situação é manipular a permissão de pasta e arquivo separadamente, com algo como:
Se você fizer isso, nunca precisará usar
core.fileMode
, exceto em ambientes muito raros.fonte
git config --global core.filemode false
precisará fazer isso apenas uma vez para todos os repositórios.git config
comando grava a configuração no arquivo de configuração correto (.git/config
apenas para o repositório atual ou~/.gitconfig
se usado com--global
).desfazer alteração de modo na árvore de trabalho:
Ou no mingw-git
fonte
-d'\n'
parte,xargs
pois esse é um argumento ilegal (e não é necessário).tr '\n' '\0'
e usar o-0
arg para xargs para usar NUL como delimitador.tr
coisa funcionou! Aqui está o comando completo para OSX:git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7-|tr '\n' '\0'|xargs -0 chmod -x
Se você deseja definir esta opção para todos os seus repositórios, use a
--global
opçãoSe isso não funcionar, você provavelmente está usando uma versão mais recente do git, então tente a
--add
opçãoSe você executá-lo sem a opção --global e seu diretório de trabalho não for um repositório, você receberá
fonte
--add
, como emgit config --add --global core.filemode false
E se
não funciona para você, faça-o manualmente:
cd na pasta .git:
edite o arquivo de configuração:
alterar verdadeiro para falso
->
salve, saia, vá para a pasta superior:
reiniciar o git
você terminou!
fonte
.git/config
,git config core.fileMode false
basta um simples na raiz do seu projeto. Se você editar o arquivo de configuração, é melhor remover completamente a diretiva, para que a global seja escolhida.global
opção faz exatamente a mesma coisa que manualmente edição .git / config~/.gitconfig
, e~/project/.git/config
)git init
, devemos definir o modo de arquivo como true?Adicionando à resposta de Greg Hewgill (do uso da
core.fileMode
variável de configuração):Você pode usar a
--chmod=(-|+)x
opção de git update-index (versão de baixo nível do "git add") para alterar as permissões de execução no índice, de onde seria selecionado se você usar o "git commit" (e não o "git commit -a ").fonte
Você pode configurá-lo globalmente:
git config --global core.filemode false
Se o exposto acima não funcionar, o motivo pode ser que sua configuração local substitua a configuração global.
Remova sua configuração local para que a configuração global entre em vigor:
git config --unset core.filemode
Como alternativa, você pode alterar sua configuração local para o valor certo:
git config core.filemode false
fonte
git config -l
(liste a configuração atual - local e global) #Se você já usou o comando chmod , verifique a diferença de arquivo. Ele mostra o modo de arquivo anterior e o modo de arquivo atual, como:
novo modo: 755
modo antigo: 644
defina o modo antigo de todos os arquivos usando o comando abaixo
sudo chmod 644 .
agora defina core.fileMode como false no arquivo de configuração usando o comando ou manualmente.
aplique o comando chmod para alterar as permissões de todos os arquivos, como
e defina novamente core.fileMode como true.
Para práticas recomendadas, não mantenha o core.fileMode sempre falso.
fonte
For best practises don't Keep core.fileMode false always
Como assim, você deveria explicar isso.For best practises don't Keep core.fileMode false always.
Alguns sistemas de arquivos (FAT, por exemplo) não suportam permissões de arquivo, portanto o sistema operacional reportará um valor padrão (766 no meu sistema, de qualquer maneira). Neste caso,core.filemode
é absolutamente necessário na configuração local, a menos que queira inchar a história comprometer com alterações de permissão desnecessários e não intencionaiscore.filemode=false
, o git ignorará a execução de alterações de bits, sem necessidade de alterar as permissões locais. A menos que você já tenha adicionado alterações de permissão ao índice, nesse caso, você está perdendo a etapa em que precisariagit add
após desligarcore.filemode
.Ao definir o seguinte alias (em ~ / .gitconfig), você pode facilmente desativar temporariamente o comando fileMode per git:
Quando esse alias é prefixado para o comando git, as alterações no modo de arquivo não aparecem com comandos que, de outra forma, os mostrariam. Por exemplo:
fonte
Se você deseja definir o modo de arquivo como false nos arquivos de configuração recursivamente (incluindo submódulos):
find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'
fonte
git submodule foreach git config core.fileMode false
Solução simples:
Pressione este comando Simples na pasta do projeto ( não removerá as alterações originais) ... ele removerá apenas as alterações que foram feitas enquanto você alterava a permissão da pasta do projeto
O comando está abaixo:
git config core.fileMode false
Por que esse arquivo desnecessário é modificado: porque você alterou as permissões da pasta do projeto com o comando sudo chmod -R 777 ./yourProjectFolder
quando você verificará as alterações, o que você não fez? você encontrou abaixo enquanto usava o nome do arquivo git diff
fonte
Isso funciona para mim:
ou reverter, dependendo do seu sistema operacional
fonte