tag - ¿qué hace git log-oneline?
¿Cómo confirmo cambios de nombre de archivo que solo distinguen mayúsculas y minúsculas en Git? (11)
1) renombrar el archivo Name.jpg
a name1.jpg
2) cometer archivo eliminado Name.jpg
3) renombrar archivo name1.jpg
a name.jpg
4) enmendar el archivo agregado name.jpg
a confirmación anterior
git add
git commit --amend
He cambiado el nombre de algunos archivos descapitalizando la primera letra, como en Name.jpg
a name.jpg
. Git no reconoce estos cambios y tuve que eliminar los archivos y volver a cargarlos. ¿Hay alguna forma en que Git pueda distinguir entre mayúsculas y minúsculas al verificar cambios en los nombres de los archivos? No he hecho ningún cambio en el archivo en sí.
A veces puede ser útil cambiar temporalmente la sensibilidad de Git. Dos posibles métodos: -
Método 1:
git -c core.ignorecase=true checkout mybranch
para desactivar la distinción entre mayúsculas y minúsculas para un solo comando de git -c core.ignorecase=true checkout mybranch
. O más generalmente: git -c core.ignorecase=
<<true or false>>
<<command>>
. (Crédito a VonC por sugerir esto en los comentarios).
Método 2:
Para cambiar la configuración por más tiempo (por ejemplo, si se deben ejecutar varios comandos antes de volver a cambiarlo):
-
git config core.ignorecase
(esto devuelve la configuración actual, por ejemplo,false
). -
git config core.ignorecase
<<true or false>>
: establezca la nueva configuración deseada. - ... Ejecutar varios otros comandos ...
-
git config core.ignorecase
<<false or true>>
: establezca el valor de configuración de nuevo en su configuración anterior.
Bajo OSX, para evitar este problema y evitar otros problemas con el desarrollo en un sistema de archivos que no distingue entre mayúsculas y minúsculas, puede usar la Utilidad de Discos para crear una unidad de disco virtual / imagen que distingue entre mayúsculas y minúsculas.
Ejecute la utilidad de disco, cree una nueva imagen de disco y use la siguiente configuración (o modifíquela como desee, pero tenga en cuenta las mayúsculas):
Asegúrate de decirle a git que ahora está en un FS sensible a mayúsculas y minúsculas:
git config core.ignorecase false
Cuando has hecho muchos cambios de nombre de archivos y algunos de ellos son solo un cambio de carcasa, es difícil recordar cuál es cuál. manualmente "git moving" el archivo puede ser bastante trabajo. Entonces, lo que haría durante mis tareas de cambio de nombre de archivo son:
- eliminar todos los archivos y carpetas que no sean git en una carpeta / repositorio diferente.
- confirma la carpeta de git vacía actual (esto se mostrará como todos los archivos eliminados).
- agrega todos los archivos a la carpeta / repositorio original de git.
- confirma la carpeta actual no vacía de git.
Esto solucionará todos los problemas del caso sin tratar de averiguar a qué archivos o carpetas cambió el nombre.
Esto es lo que hice en OS X:
git mv File file.tmp
git mv file.tmp file
Dos pasos porque de lo contrario obtuve un error de "archivo existe". Quizás se pueda hacer en un solo paso agregando --cached
o similares.
Git tiene una configuración que le indica si debe distinguir entre mayúsculas y minúsculas o no: core.ignorecase
. Para decirle a Git que tenga en cuenta el caso, simplemente establezca esta configuración en false
:
git config core.ignorecase false
Documentación
De la documentación de git config
:
core.ignorecase
Si es verdadero, esta opción habilita varias soluciones para que git funcione mejor en sistemas de archivos que no distinguen entre mayúsculas y minúsculas, como FAT. Por ejemplo, si una lista de directorios encuentra
makefile
cuando git esperaMakefile
, git asumirá que realmente es el mismo archivo y continuará recordándolo comoMakefile
.El valor predeterminado es falso, excepto que git-clone(1) o git-init(1)
core.ignorecase
y estableceráncore.ignorecase
true si es apropiado cuando se crea el repositorio.
Sistemas de archivos insensibles a mayúsculas
Los dos sistemas operativos más populares que tienen sistemas de archivos que no distinguen entre mayúsculas y minúsculas que conozco son
- Windows
- OS X
He enfrentado este problema varias veces en MacOS. Git distingue entre mayúsculas y minúsculas, pero Mac solo preserva las mayúsculas.
Alguien confirma un archivo: Foobar.java
y después de unos días decide cambiarle el nombre a FooBar.java
. Cuando extrae el último código, falla con The following untracked working tree files would be overwritten by checkout...
La única forma confiable en que he visto que corrige esto es:
-
git rm Foobar.java
- Comprométalo con un mensaje que no puede perderse
git commit -m ''TEMP COMMIT!!''
- Halar
- Aparecerá un conflicto que lo forzará a fusionar el conflicto, porque su cambio lo eliminó, pero el otro cambio cambió de nombre (de ahí el problema)
- Acepta tu cambio que es la ''eliminación''
-
git rebase --continue
- Ahora suelte su solución
git rebase -i HEAD~2
ydrop
elTEMP COMMIT!!
- Confirme que el archivo ahora se llama
FooBar.java
Mac OSX High Sierra 10.13 soluciona esto un poco. Simplemente haga una partición APFS virtual para sus proyectos git, de manera predeterminada, no tiene límite de tamaño y no ocupa espacio.
- En la Utilidad de Discos, haga clic en el botón + mientras se selecciona el disco Contenedor
- Seleccione APFS (mayúsculas y minúsculas) en formato
- Nómbrelo
Sensitive
- Lucro
- Opcional: Cree una carpeta en Sensitive llamada
git
yln -s /Volumes/Sensitive/git /Users/johndoe/git
Tu disco estará en /Volumes/Sensitive/
¿Cómo confirmo cambios de nombre de archivo que solo distinguen mayúsculas y minúsculas en Git?
Probé las siguientes soluciones de las otras respuestas y no funcionaron:
-
git mv filename
-
git rm -f filename
Si su repositorio está alojado en GitHub como el mío, puede cambiar el nombre del archivo en origen (GitHub.com) y forzar el cambio de nombre del archivo de manera descendente. Esto es lo que hice:
- Visita GitHub.com
- Vaya a su repositorio en GitHub.com y seleccione la sucursal en la que está trabajando
- Navegue hasta el archivo que desea cambiar de nombre con la herramienta de navegación de archivos del sitio
- Haga clic en el icono "Editar este archivo" (parece un lápiz)
- Cambiar el nombre del archivo en la entrada de texto del nombre del archivo
- Asegúrese de que el botón de
branchname
"Confirmar directamente con la rama delbranchname
sucursal" esté seleccionado - Haga clic en el botón "Confirmar cambios"
- Localmente, checkout / pull / fetch la rama
- Hecho
Puedes usar git mv :
git mv -f OldFileNameCase newfilenamecase
Usando SourceTree pude hacer todo esto desde la interfaz de usuario
- Renombrar
FILE.ext
awhatever.ext
queFILE.ext
- Etapa ese archivo
- Ahora renombra
whatever.ext
quewhatever.ext
file.ext
afile.ext
- Escenario ese archivo de nuevo
Es un poco tedioso, pero si solo necesitas hacerlo con algunos archivos es bastante rápido