tener - ¿Puede git cambiar automáticamente entre espacios y pestañas?
tipos de etiquetas en git (3)
Utilizo pestañas para la sangría en mis programas de Python, pero me gustaría colaborar (usando git) con personas que usan espacios en su lugar.
¿Hay alguna manera de que git convierta automáticamente entre espacios y pestañas (por ejemplo, 4 espacios = 1 pestaña) al presionar / ir a buscar? (similar a la conversión CR / LF)
Información muy útil para todos los que usan GitHub (u otro servicio similar)
~/.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
Entonces tengo dos archivos: attributes
*.js filter=tabspace
*.html filter=tabspace
*.css filter=tabspace
*.json filter=tabspace
y attributes2
*.js filter=tabspace2
*.html filter=tabspace2
*.css filter=tabspace2
*.json filter=tabspace2
Trabajando en proyectos personales
mkdir project
cd project
git init
cp ~/path/to/attributes .git/info/
De esta forma, cuando finalmente presiona su trabajo en github, no se verá tonto en la vista de código con 8 space tabs
que es el comportamiento predeterminado en todos los navegadores.
Contribuyendo a otros proyectos
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 esta forma, puede trabajar con pestañas normales en 2 space indented
proyectos con 2 space indented
.
Por supuesto, puede escribir una solución similar para convertir de 4 space to 2 space
que es el caso si desea contribuir a proyectos publicados por mí y tiende a usar 2 espacios mientras desarrolla.
Aquí está la solución completa:
En su repositorio, agregue un archivo .git/info/attributes
que contenga:
*.py filter=tabspace
Linux / Unix
Ahora ejecute los comandos:
git config --global filter.tabspace.smudge ''unexpand --tabs=4 --first-only''
git config --global filter.tabspace.clean ''expand --tabs=4 --initial''
OS X
Primero instala coreutils con brew:
brew install coreutils
Ahora ejecute los comandos:
git config --global filter.tabspace.smudge ''gunexpand --tabs=4 --first-only''
git config --global filter.tabspace.clean ''gexpand --tabs=4 --initial''
Todos los sistemas
Ahora puede ver todos los archivos de su proyecto. Puedes hacer eso con:
git checkout HEAD -- **
y todos los archivos de python ahora tendrán pestañas en lugar de espacios.
Editar : cambió el comando de pago forzado. Primero debes comprometer tu trabajo, por supuesto.
Sí, una posible solución es usar un controlador de filtro de atributo git (ver también el libro de GitPro ) para definir un mecanismo de borrado / limpieza.
De esa manera:
- cada vez que compra algunos archivos de su repositorio, los espacios se pueden convertir en pestañas,
- pero cuando ingresa (y empuja y publica), esos mismos archivos se almacenan usando solo espacios.
Puede declarar este controlador de filtro (denominado aquí '' tabspace
'') en .git/info/attributes
(para un filtro aplicado a todos los archivos dentro del repositorio Git), con el siguiente contenido:
*.py filter=tabspace
Ahora ejecute los comandos:
# local config for the current repo
git config filter.tabspace.smudge ''script_to_make_tabs''
git config filter.tabspace.clean ''script_to_make_spaces''
Vea la answer Olivier para un ejemplo concreto de trabajo de tal mancha / conjunto limpio de instrucciones.