De acordo com a documentação oficial , você pode definir ou remover o sinalizador "executável" em qualquer arquivo rastreado usando o update-indexsubcomando.
Para definir o sinalizador, use o seguinte comando:
git update-index --chmod=+x path/to/file
Para removê-lo, use:
git update-index --chmod=-x path/to/file
Sob o capô
Embora isso pareça o sistema de permissão de arquivos unix comum, na verdade não é. O Git mantém um "modo" especial para cada arquivo em seu armazenamento interno:
100644 para arquivos regulares
100755 para executáveis
Você pode visualizá-lo usando o ls-filesubcomando, com a --stageopção:
$ git ls-files --stage
100644 aee89ef43dc3b0ec6a7c6228f742377692b50484 0 .gitignore
100755 0ac339497485f7cc80d988561807906b2fd56172 0 my_executable_script.sh
Por padrão, quando você adiciona um arquivo a um repositório, o Git tenta honrar seus atributos do sistema de arquivos e define o modo de arquivo correto de acordo. Você pode desativar isso configurando a core.fileModeopção para false:
git config core.fileMode false
Solução de problemas
Se em algum momento o modo de arquivo Git não estiver definido, mas o arquivo tiver o sinalizador correto do sistema de arquivos, tente remover o modo e configure-o novamente:
git update-index --chmod=-x path/to/file
git update-index --chmod=+x path/to/file
Bônus
Começando com o Git 2.9, você pode preparar um arquivo E definir o sinalizador em um comando:
git add --chmod=+x path/to/file