J'utilise des tabulations pour l'indentation dans mes python programmes), mais j'aimerais collaborer (avec git) avec des personnes utilisant plutôt des espaces.
Existe-t-il un moyen pour git de convertir automatiquement entre les espaces et les onglets (par exemple, 4 espaces = 1 onglet) en poussant/récupérant? (similaire à la conversion CR/LF)
Voici la solution complète:
Dans votre référentiel, ajoutez un fichier .git/info/attributes
qui contient:
*.py filter=tabspace
Linux/Unix
Maintenant, lancez les commandes:
git config --global filter.tabspace.smudge 'unexpand --tabs=4 --first-only'
git config --global filter.tabspace.clean 'expand --tabs=4 --initial'
OS X
Commencez par installer les coreutils avec le breuvage:
brew install coreutils
Maintenant, lancez les commandes:
git config --global filter.tabspace.smudge 'gunexpand --tabs=4 --first-only'
git config --global filter.tabspace.clean 'gexpand --tabs=4 --initial'
Tous les systèmes
Vous pouvez maintenant consulter tous les fichiers de votre projet. Vous pouvez le faire avec:
git checkout HEAD -- **
et tous les fichiers python vont maintenant avoir des onglets au lieu d'espaces.
Edit: modification de la commande d'extraction forcée. Vous devez bien sûr commencer par engager votre travail.
Oui, une solution potentielle consiste à utiliser un pilote de filtre d'attribut git (voir aussi livre GitPro ) pour définir un mécanisme de purification/nettoyage.
De cette façon:
Vous pouvez déclarer ce pilote de filtre (nommé ici 'tabspace
') dans le fichier .git/info/attributes
(pour un filtre appliqué à tous les fichiers du référentiel Git), avec le contenu suivant:
*.py filter=tabspace
Maintenant, lancez les commandes:
# local config for the current repo
git config filter.tabspace.smudge 'script_to_make_tabs'
git config filter.tabspace.clean 'script_to_make_spaces'
Voir Olivier 's answer pour obtenir un exemple de travail concret d'un tel ensemble d'instructions très simples.
~/.gitconfig
[filter "tabspace"]
smudge = unexpand --tabs=4 --first-only
clean = expand --tabs=4 --initial
[filter "tabspace2"]
smudge = unexpand --tabs=2 --first-only
clean = expand --tabs=2 --initial
Ensuite, j'ai deux fichiers: attributes
*.js filter=tabspace
*.html filter=tabspace
*.css filter=tabspace
*.json filter=tabspace
et attributes2
*.js filter=tabspace2
*.html filter=tabspace2
*.css filter=tabspace2
*.json filter=tabspace2
mkdir project
cd project
git init
cp ~/path/to/attributes .git/info/
De cette façon, lorsque vous pousserez enfin votre travail sur github, il n’aura pas l’air idiot en mode code avec 8 space tabs
_ qui correspond au comportement par défaut de tous les navigateurs.
mkdir project
cd project
git init
cp ~/path/to/attributes2 .git/info/attributes
git remote add Origin [email protected]:some/repo.git
git pull Origin branch
De cette façon, vous pouvez travailler avec des onglets normaux sur 2 space indented
projets.
Bien sûr, vous pouvez écrire une solution similaire pour convertir de 4 space to 2 space
_ ce qui est le cas si vous souhaitez contribuer aux projets que je publie et que vous avez tendance à utiliser 2 espaces lors de votre développement.
Si vous êtes sur Windows, vous avez quelques étapes supplémentaires pour obtenir la solution @ Olivier Verdier .