Come creare i permessi in modalità esecuzione file in Git su Windows?

Uso Git in Windows e voglio inserire lo script della shell eseguibile in git repo con un commit.

Di solito ho bisogno di fare due passi ( 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 

Come posso combinare questi due passaggi in un unico passaggio? configurazione git? comando di Windows?

Riferimento: vedere la domanda nelle autorizzazioni del file Git su Windows per il secondo commit

Non è necessario eseguire questa operazione in due commit, è ansible aggiungere il file e contrassegnarlo come eseguibile in un singolo 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 

Come si nota, dopo l’aggiunta, la modalità è 0644 (cioè non eseguibile). Tuttavia, possiamo contrassegnarlo come eseguibile prima di eseguire il commit:

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

E ora il file è in modalità 0755 (eseguibile).

 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 ora abbiamo un singolo commit con un singolo file eseguibile.

In effetti, sarebbe bello se git-add avesse un flag --mode

git 2.9.x / 2.10 (3 ° trim. 2016) in realtà consentirà (grazie a Edward Thomson ):

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

Ciò rende tutto più veloce e funziona anche se core.filemode è impostato su false.

Vedi commit 4e55ed3 (31 maggio 2016) di Edward Thomson ( ethomson ) .
Aiutato: Johannes Schindelin ( dscho ) .
(Unita da Junio ​​C Hamano – gitster – in commit c8b080a , 06 lug 2016)

add : aggiungi --chmod=+x / --chmod=-x opzioni

Il bit eseguibile non verrà rilevato (e quindi non verrà impostato) per i percorsi in un repository con core.filemode impostato su false, sebbene gli utenti possano ancora voler aggiungere file come eseguibili per la compatibilità con altri utenti che hanno core.filemode funzionalità.
Ad esempio, gli utenti di Windows che aggiungono script di shell potrebbero desiderare di aggiungerli come eseguibili per la compatibilità con utenti non Windows.

Anche se questo può essere fatto con un comando plumbing ( git update-index --add --chmod=+x foo ), insegnare il comando git-add consente agli utenti di impostare un file eseguibile con un comando a loro già familiare .

Devi eseguire il seguente comando:

 git update-index --chmod=+x  

Impegnati a darti e dovresti andare!

Se i file hanno già il flag + x, git update-index --chmod=+x non fa nulla e git pensa che non ci sia nulla da commettere, anche se il flag non viene salvato nel repository.

Devi prima rimuovere il flag, eseguire il comando git, quindi rimettere la bandiera:

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

allora git vede un cambiamento e ti permetterà di commettere il cambiamento.

La nota è innanzi tutto che devi essere sicuro che il filemode impostato su false nel file config git, o usare questo comando:

 git config core.filemode false 

e quindi è ansible impostare il permesso 0777 con questo comando:

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