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.

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>

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.

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.


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.


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.


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.