¿Cómo eliminar archivos .orig después de fusionar desde el repositorio de git?

160

De alguna manera se comprueban los archivos .orig en mi repositorio git durante la fusión, que ahora se muestran en el sector modificado y sin seguimiento. Pero ya no quiero estos archivos en mi repositorio. Como hacer eso.

    modified:   Gemfile.lock.orig
    #   modified:   Gemfile.orig
    #   modified:   app/assets/images/bg_required.png.orig
    #   modified:   app/assets/javascripts/application.js.orig

    etc...

Cualquier ayuda será apreciada.

maximus ツ
fuente
@ziu, quiero eliminar archivos que ya están presentes en mi repositorio, revisados ​​por git merge o por algún otro desarrollador
maximus ツ
1
Me perdí la parte sobre los archivos registrados. Sin embargo, los archivos .orig están escritos por mergetool. A mí me suena como una resolución de conflictos no limpia.
ziu
¿Necesita eliminar completamente el archivo de todo el historial?
linquize
1
mira

Respuestas:

253

La mejor solución en este caso es mantenerlo simple y deshacerse de esos archivos independientemente de git:

cd /your/repo/directory
find . -name '*.orig' -delete 

Alternativamente, en Windows / PowerShell, puede ejecutar el siguiente comando

cd \your\repo\directory
Get-ChildItem -Recurse -Filter '*.orig' | Remove-Item
TheChymera
fuente
14
Si obtiene un error de predicado, use: find. -nombre '* .orig' | xargs rm -f
Neil
Solo como advertencia, usar 'find -delete' puede ser peligroso. Verifique que el directorio (en este caso '.')
Sea
8
Es un dolor que git clean -dfno lo hace. ¿Por qué deberíamos limpiar manualmente la basura que deja?
Sridhar Sarnobat
¿Qué hay de Windows?
Panzercrisis
3
@Panzercrisis si está utilizando Windows, probablemente ya tenga un emulador de terminal a través del cual interactúa con Git. Recomendaría "gitforwindows" que contiene BASH con todas las otras herramientas comúnmente necesarias.
TheChymera
151

Pruebe git cleanmás información que puede encontrar aquí o aquí

Amar
fuente
1
Puedo limpiar archivos no rastreados, pero ¿qué pasa con la eliminación de los archivos que ya están en el repositorio?
maximus ツ
primero debe eliminar el archivo del repositorio git rm <filename>y luego confirmar.Después de esto, agregue el archivo * .orig a git ignore.
Amar
44
Creo que esta es una mejor solución que la marcada como respuesta.
Orgmir
51
git clean -ies realmente agradable. le dará una lista de archivos que serán eliminados y le dará opciones sobre cómo lidiar con la lista (filtrar la lista, poder eliminar todo en la lista y algunas otras opciones).
PPPaul
1
Puede usar git clean con patrones para ayudar a eliminar solo los archivos * .orig: git clean -f -e '*.*' -e '!*.orig' solo hay un patrón de exclusión, pero tiene un pequeño soporte para patrones negativos. Por lo tanto, podemos excluir todos los archivos *.*y luego negar la exclusión de solo los *.origarchivos.
leorleor
6

Puede ignorar archivos usando .gitignore

Simplemente ponga * .orig en la lista como se muestra aquí

https://help.github.com/articles/ignoring-files

para eliminar archivos actuales, puede crear un script de shell y ejecutarlo desde la carpeta del proyecto como se muestra a continuación

for file in `find *.orig -type f -print`
do
   echo "Deleting file $file"
   git rm $file -f       
done
Loken Makwana
fuente
55
Aunque ciertamente puede hacer esto, no es lo correcto aquí :)
Sergio Tulentsev
1
Creo que es una buena idea, ya que mantiene la copia de seguridad pero no interfiere con los archivos almacenados
akazemis
@akazemis: pensarías que sí, pero cuando estás buscando código, ves el doble de resultados de búsqueda que deseas (lo que te da una falsa percepción de lo que está en tu último código). Es tan raro que prefiero vivir con el peligro de no tener archivos orig. Es mejor comprometerse regularmente.
Sridhar Sarnobat
5

Desafortunadamente git cleanno funciona para mí porque he *.origagregado a mi archivo global de gitignore, por lo que también se ignoran desde la limpieza. Incluso ejecutar git clean -xno es bueno porque no quiero que se eliminen todos mis archivos ignorados. git clean -ies útil, pero realmente no quiero tener que revisar todos y cada uno de los archivos.

Sin embargo, podemos usar un patrón de exclusión y negar la coincidencia. Vista previa con este comando:

git clean -e '!*.orig' --dry-run

Luego, cuando esté seguro, pase la forcebandera para realmente eliminarlos:

git clean -e '!*.orig' -f

Basado en el comentario de leorleor

Jeff Puckett
fuente
3

git rm Gemfile.lock.orig y el resto de los archivos que no necesitas. git commit --amend

Para eliminar por completo esas manchas, git gc --prune=0 --aggressive

linquizar
fuente
@linquizebut commit de git rm Gemfile.lock.orig irá en el último commit usando enmendar, ¿verdad? ¿Hay alguna otra manera de no tener ninguna confirmación para dicho archivo?
maximus ツ
2

Para mí git clean -feliminé todos los archivos * .oig. Y guarda los que ya estaban allí antes.

Esto es lo que parecía (casi) después de la fusión:

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/
    .idea/misc.xml.orig

.idea/codeStyles/ya estaba allí antes de la fusión como un archivo sin seguimiento. .idea/misc.xml.orig(y mucho más) tuvo que ser eliminado.

=> Utilizando git clean -f:

$ git clean -f
Removing .idea/misc.xml.orig

resultó en:

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/
Ueffes
fuente
0

simplemente puedes hacer git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm

TL; DR;

git status -s le permite obtener todos los archivos modificados / faltantes con respecto al índice

grep "\.orig$" filtrar archivos, manteniendo el final por ".orig"

awk '{print $2}' muestra el nombre del archivo (omitiendo la información de git, por ejemplo, A, M, ??)

xargs -n1 -r echo rm imprime los comandos de eliminación en cada argumento (-n1: uno a la vez y -r: omitir cuando está vacío) simplemente copie y pegue los comandos para verificar los archivos que se eliminarán.

fiorentinoing
fuente
Si bien esto podría responder a la pregunta de los autores, carece de algunas palabras explicativas y / o enlaces a la documentación. Los fragmentos de código sin formato no son muy útiles sin algunas frases a su alrededor. También puede encontrar cómo escribir una buena respuesta muy útil. Por favor edite su respuesta.
hola
-4

git rm <file>

http://git-scm.com/docs/git-rm

Agregue también los archivos / directorios que desea ignorar a su archivo .gitignore.

veritas1
fuente
git rm <file> <file>Solo enuméralos.
veritas1
Luego debe enumerar todos los archivos, o usar una herramienta como find para pasarlos a git rm, o usar un globo de shell y recorrerlos. Git no duplica esta funcionalidad estándar de línea de comandos de Unix.
mabraham
1
los archivos de origen no se agregan al repositorio, por lo que no hay necesidad de usarlos git rm, solo úselos rmen su lugar
Edson Medina el