Appliquer automatiquement "git update-index --chmod=+x" aux fichiers exécutables
j'ajoute souvent des scripts bash à mon dépôt git, et les scripts ont des permissions exécutables dans le système de fichiers linux avant le git add
. Mais après avoir poussé les fichiers ajoutés dans un dépôt distant et avoir tiré dans un autre endroit, les fichiers apparaissent avec des permissions non exécutables. Il semble y avoir deux façons de corriger le problème:
1. chmod u+x $script
git commit -am "fixing the script permissions... again..."
ou
2. git update-index --chmod=+x $script
au lieu de corriger les permissions à chaque fois, y a-t-il un moyen d'avoir git simplement regarder permissions de fichier sur le script pendant git add
, reconnaissez que " hé, ceci est un fichier exécutable!"et l'ajouter au référentiel avec l'exécutable directement les autorisations?
5 réponses
Il y a plusieurs façons de le faire.
- git alias
- Bash alias
- ou encore combiner des alias bash et git
git alias
vous pouvez toujours utiliser bash dans votre alias git.
Ouvrir votre git config:
vim ~/.gitconfig
ajouter une section d'alias (si on ne existent):
[alias] addscr = !sh -c 'if [[ ${0: -3} == ".sh" ]]; then git update-index --chmod=+x ; git add '
Bash alias
éditez votre fichier de profil bash:
vim ~/.bashrc
Ajouter ceci à la fin du fichier:
function gitadd(){ if [[ ${1: -3} == ".sh" ]] then git update-index --chmod=+x fi git add } alias gitadd='gitadd'
combinez les alias Git et bash
éditez votre fichier de profil bash:
vim ~/.bashrc
ajouter ce à la fin du fichier:
function checkShellFile(){ return ${1: -3} == ".sh" } alias gitadd='checkShellFile ? git addsrcipt "" : && git add ""'
éditez votre fichier de configuration git:
vim ~/.gitconfig
ajouter une section d'alias (si elle n'existe pas):
[alias] addscript = !sh -c 'git update-index --chmod=+x && git add '
aucun des éléments ci-dessus n'a été testé
git 2.9.X / 2.10 (T3 2016) apporte chmod
git add
lui-même!
Voir valider 4e55ed3 (31 Mai 2016) par Edward Thomson (ethomson
).
Aidé par: Johannes Schindelin (dscho
).
(fusionné par Junio C. Hamano -- gitster
--valider c8b080a, 06-Juil-2016)
add
: ajouter--chmod=+x
/--chmod=-x
optionsle bit exécutable ne sera pas détecté (et ne sera donc pas set) pour les chemins dans un référentiel avec
core.filemode
mis à false, bien que les utilisateurs peuvent toujours souhaiter ajouter des fichiers comme exécutable pour compatibilité avec d'autres utilisateurs quicore.filemode
fonctionnalité.
Par exemple, les utilisateurs de Windows ajoutant des scripts shell peuvent souhaiter les ajouter comme exécutables pour la compatibilité avec les utilisateurs sur Non-Windows.bien que cela puisse être fait avec un commandement de la plomberie (
git update-index --add --chmod=+x foo
),enseignementgit-add
la commande permet aux utilisateurs de définir un fichier exécutable avec une commande qu'ils connaissent déjà.
Vous pouvez voir l'origine de cette nouvelle fonctionnalité dans " comment créer des permissions de mode d'exécution de fichier en Git sous Windows?" (Fév. 2011)
voici un script pour appliquer automatiquement "git update-index --chmod+x" aux fichiers exécutables:
for f in `find . -name '*.sh' -o -regex './s?bin/[^/]+' -o -regex './usr/sbin/[^/]+' -o -regex './usr/lib/[^/]+' `;do
( cd `dirname $f` && git update-index --chmod=+x `basename $f` )
done
Une solution sans fantaisie scripts bash:
- Set
fileMode = true
dans votre.git/config
fichier (ou en cours d'exécutiongit config core.filemode true
comme d'autres l'ont souligné) - modifiez le bit exécutable sur les permissions du fichier et propagez cette modification. (
chmod u+x $script
comme vous l'avez souligné). Vous n'avez qu'à faire une seule fois. - Poussoir de la télécommande
la prochaine fois que vous sortirez de là, git définira le bit exécutable engagé sur le fichier. J'ai aussi avait des problèmes similaires, ce qui les a résolus.
fileMode = true
dit à git de suivre la seule chose à propos des permissions qu'il peut: le bit exécutable. Cela signifie que les modifications apportées au bit exécutable seront reconnues par git comme des modifications dans l'arborescence de travail et que ces modifications seront stockées dans le fichier repo lors de votre prochaine propagation.
une fois que vous avez engagé le bit exécutable désiré, vous pouvez également réinitialiser votre fileMode
false
ainsi la prochaine fois git ne vous ennuiera pas avec de tels changements quand vous ne voulez pas à les commettre.
je ne pense pas que cela peut être fait sur l' git add
commande, mais vous pourriez être en mesure d'exécuter un script juste après l'exécution de l' git commit
commande, mais avant que le commit soit créé.
jetez un coup d'oeil au crochet de pre-commit.
http://git-scm.com/book/en/Customizing-Git-Git-Hooks
en gros il suffit de créer un fichier dans votre .git/hooks/ dossier appelé pré-validation. (Il devrait y avoir des échantillons déjà dans votre dossier hooks, renommez-les en supprimer le ".l'échantillon" à la fin de l'activer.)
Theres une chasse aux sorcières. Assurez-vous que votre script fonctionne git stash -q
d'abord pour que votre travail sur les versions mises en scène réelles de fichiers.