Git mergetool genera archivos .orig no deseados


486

Cuando hago una resolución de conflicto de combinación con Kdiff3 (y otra herramienta de combinación que probé) noté que en la resolución *.origse crea un archivo. ¿Hay alguna manera de que no cree ese archivo adicional?

Respuestas:


771

Una posible solución de git config:

git config --global mergetool.keepBackup false

Después de realizar una fusión, el archivo original con marcadores de conflicto se puede guardar como un archivo con una .origextensión.
Si esta variable se establece en false, este archivo no se conserva.
El valor predeterminado truees (es decir, mantener los archivos de copia de seguridad).

La alternativa es no agregar o ignorar esos archivos, como se sugiere en este artículo de gitguru ,

git mergetoolguarda la versión de conflicto de fusión del archivo con un .origsufijo " ".
Asegúrese de eliminarlo antes de agregar y confirmar la combinación o agregar *.origa su .gitignore.

Berik sugiere en los comentarios usar:

find . -name \*.orig 
find . -name \*.orig -delete

Charles Bailey aconseja en su respuesta tener en cuenta la configuración interna de la herramienta diff que también podría generar esos archivos de respaldo, sin importar cuáles sean las configuraciones de git.

  • kdiff3 tiene su propia configuración (consulte "Combinación de directorios " en su manual).
  • Otras herramientas como WinMerge pueden tener su propia extensión de archivo de respaldo (WinMerge: .bakcomo se menciona en su manual ).

Por lo tanto, también debe restablecer esa configuración.


77
@Sophistifunk: buen punto. He editado la respuesta para usar el signo apropiado.
VonC

10
La edición de la configuración en kdiff funcionó para mí: Configuración> Configurar Kdiff3> Directorio. Desmarca la casilla "Copia de seguridad de archivos (.orig)"
kmgdev

2
git config --global mergetool.keepBackup false, Resuelto para P4Merge en Mavericks 10.9.2. Gracias :)
kpsfoo

1
@Sander Gracias. He restaurado el enlace.
VonC

55
Tenga en cuenta que si está editando manualmente el .gitconfig, desea que el keepBackup = falsebajo [mergetool], no bajo [mergetool "BeyondCompare4"]o cualquier combinación visual herramienta que ha configurado.
TrueWill

85

Debe tener un poco de cuidado al usarlo, kdiff3ya que si bien git mergetoolse puede configurar para guardar un .origarchivo durante la fusión, el comportamiento predeterminado para kdiff3también es guardar un .origarchivo de copia de seguridad de forma independiente git mergetool.

Debe asegurarse de que la mergetoolcopia de seguridad esté desactivada:

git config --global mergetool.keepBackup false

y también que la configuración de kdiff3 está configurada para no crear una copia de seguridad:

Configure/Options => Directory Merge => Backup Files (*.orig)

44
Configure/Options => Directory Merge => Backup Files (*.orig)realmente ayudó a deshacerme de todo el extraño protocolo desconocido io-slave, klauncher «», y no podía crear errores .orig. gracias
Geremia

2
¿Por qué git config --global mergetool.keepBackup falsetiene que ser configurado?
Geremia

1
déjame arreglar tu primera línea "Tienes que estar un poco loco para usar kdiff3" - ahí :-)
Tim Jarvis el

@TimJarvis Uso kdiff3 todo el tiempo y me gusta. Me pregunto si hay una razón para llamarlo "un poco loco usar kdiff3" o si eso es solo una broma (veo la cara sonriente, no me ofenderé de ninguna manera, lo pregunto sinceramente)
Quinn Wilson

35

Para ser claros, el comando git correcto es:

git config --global mergetool.keepBackup false

Las otras dos respuestas tienen errores tipográficos en la línea de comando que harán que falle o no funcione correctamente.


32

La opción para guardar el archivo .orig se puede desactivar configurando KDiff3

Opción .orig del archivo de copia de seguridad KDiff3


2
Esta debería ser la solución real.
Gondy

Funciona para mi. Muchas gracias @ richard-pierre
Andrew

Ya tenía la configuración global de git configurada correctamente, pero todavía tenía esos archivos .orig en rebase / merge, etc. La configuración de Kdiff3 finalmente hizo el truco.
Cécile Fecherolle

25

Lo uso para limpiar todos los archivos que terminan en ".orig":

function git-clean-orig {
    git status -su | grep -e"\.orig$" | cut -f2 -d" " | xargs rm -r
}

Si eres un gato asustado :) puedes dejar la última parte solo para enumerarlos (o dejar de lado -rsi quieres aprobar cada eliminación):

function git-show-orig {
    git status -su | grep -e"\.orig$" | cut -f2 -d" "
}

1
Totalmente útil si aún desea las copias de seguridad hasta que esté listo para comprometerse.
Kelly

55
También puede agregar * .orig en .gitignore en el nivel superior si mantiene las copias de seguridad combinadas.
Ville

11

Simplemente uso el comando

git clean -n *.orig

compruebe para asegurarse de que solo se enumere el archivo que deseo eliminar

git clean -f *.orig

1
Un buen consejo! Sería bueno si también agregara las otras respuestas con respecto a la configuración de gitconfig (de otras respuestas).
AzP

10

Además de las respuestas correctas que se ofrecen como soluciones a largo plazo, puede usar git para eliminar todos los archivos innecesarios una vez para usted con el git clean -fcomando, pero use git clean --dry-runprimero para asegurarse de que no suceda nada involuntario.

Esto tiene la ventaja de utilizar la funcionalidad integrada probada de Git sobre scripts específicos de su sistema operativo / shell para eliminar los archivos.


44
Sí, pero tenga mucho cuidado ya que este comando hace mucho más que eliminar los archivos .orig.
kghastie


3
git config --global mergetool.keepBackup false

Esto también debería funcionar para Beyond Compare (como mergetool)


0

Ventanas:

  1. en Win/Users/HOME/.gitconfigconjunto de archivosmergetool.keepTemporaries=false
  2. en Archivo git/libexec/git-core/git-mergetool, en la función cleanup_temp_files()agregar rm -rf -- "$MERGED.orig"dentro del bloque else.

1
Ver la respuesta aceptada. Esto modifica las herramientas principales y no es escalable.
oligofren
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.