Como criar permissions de modo de execução de arquivo no Git no Windows?

Eu uso o Git no Windows, e quero empurrar o shell script executável para o git repo por um commit.

Normalmente eu preciso fazer duas etapas ( git commit ).

 $ vi install.sh $ git add install.sh $ git commit -am "add new file for installation" # first commit [master f2e92da] add support for install.sh 1 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 install.sh $ git update-index --chmod=+x install.sh $ git commit -am "update file permission" # second commit [master 317ba0c] update file permission 0 files changed mode change 100644 => 100755 install.sh 

Como posso combinar essas duas etapas em uma etapa? configuração do git? comando do windows?

Referência: veja a pergunta nas permissions do arquivo Git no Windows para segundo commit

Não há necessidade de fazer isso em dois commits, você pode adicionar o arquivo e marcá-lo como executável em um único commit:

 C:\Temp\TestRepo>touch foo.sh C:\Temp\TestRepo>git add foo.sh C:\Temp\TestRepo>git ls-files --stage 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 foo.sh 

Como você nota, depois de adicionar, o modo é 0644 (isto é, não executável). No entanto, podemos marcá-lo como executável antes de confirmar:

 C:\Temp\TestRepo>git update-index --chmod=+x foo.sh C:\Temp\TestRepo>git ls-files --stage 100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 foo.sh 

E agora o arquivo é o modo 0755 (executável).

 C:\Temp\TestRepo>git commit -m"Executable!" [master (root-commit) 1f7a57a] Executable! 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 foo.sh 

E agora temos um único commit com um único arquivo executável.

De fato, seria legal se o git-add tivesse um sinalizador --mode

git 2.9.x / 2.10 (3º trimestre de 2016) realmente permitirá isso (graças a Edward Thomson ):

 git add --chmod=+x -- afile git commit -m"Executable!" 

Isso torna todo o processo mais rápido e funciona mesmo se core.filemode estiver definido como false.

Veja commit 4e55ed3 (31 de maio de 2016) por Edward Thomson ( ethomson ) .
Ajudado por: Johannes Schindelin ( dscho ) .
(Mesclado por Junio ​​C Hamano – gitster – em commit c8b080a , 06 de julho de 2016)

add : add --chmod=+x / --chmod=-x opções

O bit executável não será detectado (e, portanto, não será definido) para caminhos em um repository com core.filemode definido como false, embora os usuários ainda possam desejar adicionar arquivos como executáveis ​​para compatibilidade com outros usuários que tenham core.filemode funcionalidade.
Por exemplo, usuários do Windows que adicionam scripts de shell podem adicioná-los como executáveis ​​para compatibilidade com usuários em não-Windows.

Embora isso possa ser feito com um comando de encanamento ( git update-index --add --chmod=+x foo ), ensinar o comando git-add permite que os usuários definam um arquivo executável com um comando com o qual já estão familiarizados .

Você tem que executar o seguinte comando:

 git update-index --chmod=+x  

Comprometa-se com o git e você deve ir!

Se os arquivos tiverem o sinalizador + x definido, o git update-index --chmod=+x não fará nada e o git git update-index --chmod=+x que não há nada para confirmar, mesmo que o sinalizador não esteja sendo salvo no repo.

Você deve primeiro remover o sinalizador, executar o comando git e, em seguida, colocar o sinalizador de volta:

 chmod -x  git update-index --chmod=+x  chmod +x  

então git vê uma mudança e permitirá que você confirme a mudança.

A nota é, em primeiro lugar, você deve ter certeza sobre o filemode configurado como false no arquivo config git, ou use este comando:

 git config core.filemode false 

e então você pode definir a permissão 0777 com este comando:

 git update-index --chmod=+x foo.sh