Permissões de arquivo Git no Windows

172

Eu li algumas perguntas sobre permissões de arquivo no Git e ainda estou um pouco confuso. Eu tenho um repositório no GitHub bifurcado de outro. Após a mesclagem, eles devem ser idênticos. Contudo:

$ git diff --summary origin/epsilon master/epsilon
 mode change 100644 => 100755 ants/dist/sample_bots/csharp/compile.sh
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/MyBot.coffee
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/ants.coffee
 mode change 100644 => 100755 ants/util/block_test.sh
 mode change 100644 => 100755 manager/mass_skill_update.py
 mode change 100644 => 100755 worker/jailguard.py
 mode change 100644 => 100755 worker/release_stale_jails.py
 mode change 100644 => 100755 worker/start_worker.sh

Tentei alterar as permissões de arquivo, mas isso não altera os resultados do diff.

Synesso
fonte

Respostas:

346

Encontrei a solução de como alterar permissões (também) no Windows aqui: http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html

Por exemplo, o comando a seguir adiciona permissão de execução do usuário a um arquivo arbitrário:

git update-index --chmod=+x <file>
dedek
fonte
6
+1: exatamente o que eu precisava para garantir que os scripts de shell confirmados no Windows (onde eu core.filemodeconfigurei false) realmente tenham o bit de execução definido.
tomlogic
No meu caso, também adicionei uma nova linha ao arquivo e só então consegui confirmar
oshai 7/16
5
No Windows, usando git-bash, eu precisava de uma --addbandeira para a execução, por algum motivo: git update-index --add --chmod=+x <file>. Depois disso, o arquivo já estava no palco com o chmod
Jefferson Quesado
Não tem mais efeito, nem no prompt do git bash nem no cmd.exe.
Ben
106

De outra pergunta aqui no stackoverflow: Como faço para o Git ignorar alterações no modo de arquivo (chmod)?

Experimentar:

git config core.filemode false

Do git-config (1) :

   core.fileMode
       If false, the executable bit differences between the index and the
       working copy are ignored; useful on broken filesystems like FAT.
       See git-update-index(1). True by default.
Corey Henderson
fonte
Obrigado. Eu também vi isso. Tentei e não fez diferença.
Synesso
3
Eu tive problemas semelhantes ao OP e não consegui fazer alterações, não importa como hardtentei redefinir. Isso fez o truque para mim.
Jo-Herman Haugholt
11
[projeto] / .git / config pode conter a mesma configuração e substituirá ~ / .gitconfig. Se você estiver tentando configurá-lo globalmente, verifique se ele não está sendo substituído localmente.
Php binário
1
Acho que isso também é necessário no NTFS, infelizmente.
Marc.2377
1
Essa é a resposta!
Andrew Surdu 14/04
29

Uma linha prática para o Git Bash:

find . -name '*.sh' | xargs git update-index --chmod=+x

Ele marcará todos os .sharquivos como executáveis. Depois disso, você apenas precisa git commit.

Benoit Blanchon
fonte
2
Correção pequena para @ benoit-blanchon one-liner ... o .sh deve ser citado. encontrar . -name ' .sh' | xargs git update-index --chmod = + x
Steven o facilmente divertido
Você está certo, eu editei a resposta. Obrigado @SteventheEasilyAmused.
Benoit Blanchon
15

Se você usa Cygwin git (ou Linux git também, suponho), há uma boa chance de que sua configuração core.filemode tenha sido definida no nível do projeto em $ projdir / .git / config. Descobri que precisava fazer o seguinte para fazer com que meu Cygwin git e Windows git coexistissem bem em um sistema de arquivos do Windows sem que existissem alterações de modo de arquivo inexistentes o tempo todo:

  • exclua a configuração de linha core.filemode em $ projdir / .git / config
  • no Windows git, execute "git config --global core.filemode false"

Isso permite que meu Cygwin git continue vendo alterações no modo de arquivo, que geralmente são relevantes, enquanto instrui o git do Windows a ignorar as alterações no modo de arquivo que ele vê, que geralmente são falsos positivos.

skiphoppy
fonte
5

Corrigi-o alterando as permissões de arquivo no Ubuntu, commit, push e tudo OK. Parece que não funcionaria com o msysgit no Windows / NTFS.

Synesso
fonte
Eu posso recomendar o GitHub para Windows. Interface maravilhosa e shell muito bom, eu até facilitei a instalação de chaves ssh e o git flow de forma relativamente fácil.
Sangoku
5

Primeiro verifique as permissões do arquivo usando o comando abaixo.

git ls-files --stage

Em seguida, altere as permissões. Aqui "x" representa permissões de execução.

git update-index --chmod=+x 'scriptname.ext'

Agora verifique novamente as permissões.

git ls-files --stage

==============================================

se você estiver usando o Windows PC, mas implantando na máquina Linux. Execute o comando abaixo em primeiro lugar para torná-lo compatível com a máquina linux

dos2unix scriptname.ext scriptname.ext

Sireesh Yarlagadda
fonte
Não há como fazer algo assim git update-index --chmod=1777 'scriptname.ext'?
Alex Barker
Você navegou para o caminho, onde o arquivo de script existe? @alex
Sireesh Yarlagadda 15/06/19