linux - instalar - install git debian 9
El estado de Git ignora los finales de línea/archivos idénticos/windows & linux environment/dropbox/mled (5)
Creé un script para ignorar las diferencias en los finales de línea:
Mostrará los archivos que no se agregan a la lista de confirmaciones y se modificaron (después de ignorar las diferencias en los finales de línea). Puede agregar el argumento "agregar" para agregar esos archivos a su confirmación.
#!/usr/bin/perl
# Usage: ./gitdiff.pl [add]
# add : add modified files to git
use warnings;
use strict;
my ($auto_add) = @ARGV;
if(!defined $auto_add) {
$auto_add = "";
}
my @mods = `git status --porcelain 2>/dev/null | grep ''^ M '' | cut -c4-`;
chomp(@mods);
for my $mod (@mods) {
my $diff = `git diff -b $mod 2>/dev/null`;
if($diff) {
print $mod."/n";
if($auto_add eq "add") {
`git add $mod 2>/dev/null`;
}
}
}
Código fuente: https://github.com/lepe/scripts/blob/master/gitdiff.pl
Actualizaciones :
- fix by evandro777: cuando el archivo tiene espacio en el nombre del archivo o directorio
¿Cómo hago
estado de git
ignorar las diferencias de final de línea?
Información de fondo:
Uso aleatoriamente Windows y Linux para trabajar en el proyecto. El proyecto está en Dropbox.
Encontré mucho sobre cómo hacer que git diff ignore los finales de línea. Como uso meld git diff abre meld para cada archivo. Y meld dice "archivo idéntico".
Entonces, ¿cómo puedo evitar esto? Git solo debería abrir la fusión para los archivos modificados. Y el estado de git no debe informar los archivos como cambiados si solo el final del archivo es diferente.
EDITAR: Causa:
Esto sucedió debido a esta configuración en Windows
core.autocrlf true
Así que revisé la copia de trabajo en Linux y establecí core.autocrlf como falso en Windows.
Sería bueno saber cómo hacer que el estado de git ignore las nuevas líneas.
Pruebe a establecer el valor core.autocrlf de esta manera:
git config --global core.autocrlf true
Use .gitattributes en su lugar, con la siguiente configuración:
# Ignore all differences in line endings
* -crlf
.gitattributes se encontraría en el mismo directorio que su .gitconfig global. Si .gitattributes no existe, agréguelo a ese directorio. Después de agregar / cambiar .gitattributes, tendrá que hacer un restablecimiento completo del repositorio para aplicar correctamente los cambios a los archivos existentes.
Utilizo Windows y Linux, pero la solución core.autocrlf true
no me ayudó. Incluso no he cambiado nada después de que git checkout <filename>
.
Así que uso una solución alternativa para sustituir el git status
- gitstatus.sh
#!/bin/bash
git status | grep modified | cut -d'' '' -f 4 | while read x; do
x1="$(git show HEAD:$x | md5sum | cut -d'' '' -f 1 )"
x2="$(cat $x | md5sum | cut -d'' '' -f 1 )"
if [ "$x1" != "$x2" ]; then
echo "$x NOT IDENTICAL"
fi
done
Simplemente comparo md5sum
de un archivo y su hermano en el repositorio.
Ejemplo de salida:
$ ./gitstatus.sh
application/script.php NOT IDENTICAL
application/storage/logs/laravel.log NOT IDENTICAL
Problema relacionado con los comandos de git en el sistema operativo Windows:
$ git add --all
advertencia: LF será reemplazado por CRLF en ...
El archivo tendrá sus finales de línea originales en su directorio de trabajo.
Resolución :
$ git config --global core.autocrlf false
$ git add --all
No aparece ningún mensaje de advertencia.