git command-line pipe

git update-index--assume-unchanged en el directorio



command-line pipe (4)

Agregue el nombre del directorio a .git/info/exclude . Esto funciona para archivos sin seguimiento.

git 1.7.12

Quiero marcar todos los archivos debajo de un directorio dado como asumir-sin cambios.

1) git update-index --assume-unchaged dir/ da "Ignorando la ruta".

2) git update-index --assume-unchaged dir/* falla rápidamente porque encontrará archivos que no están siendo rastreados, por lo tanto da "fatal: Imposible marcar el archivo" y se cierra.

3) Intente generar una lista de archivos para marcar. cd en el directorio deseado y luego ejecutar git ls-files | tr ''/n'' '' '' | git update-index --assume-unchanged git ls-files | tr ''/n'' '' '' | git update-index --assume-unchanged git ls-files | tr ''/n'' '' '' | git update-index --assume-unchanged . Esto no genera ningún mensaje de error, pero no marca correctamente los archivos. La primera parte del comando, git ls-files | tr ''/n'' '' '' git ls-files | tr ''/n'' '' '' , produce correctamente una lista delimitada por espacios de todos los archivos que quiero marcar. Si copio y pego el resultado de ese comando en la línea de comando, entonces funciona el comando git update-index . ¿Qué no está funcionando con las tuberías?

No, no es suficiente para mí agregar dir a .gitignore. Necesito que estos archivos estén en el repositorio, pero los cambios no deseados se realizarán localmente y deben ignorarse para que los usuarios puedan hacer extracciones.


El comando find de GNU Findutils tiene una opción -exec que elimina la mayor parte de la molestia de usar xargs , aunque su sintaxis es un poco especial. Sin embargo, trata perfectamente con nombres de archivo con espacios.

Este comando hará que git suponga que todos los archivos dentro y debajo del directorio listado no han cambiado:

find path/to/dir -type f -exec git update-index --assume-unchanged ''{}'' /;

Buscar toma todos los argumentos después de -exec hasta ; (que debe escapar para evitar que su caparazón se lo coma) y lo ejecuta una vez por cada archivo encontrado, mientras reemplaza {} (nuevamente, solo se cita para que su caparazón no lo coma) con el nombre del archivo encontrado.

Usando los criterios de coincidencia de Find (profundidad de recursión máxima, si la coincidencia es un archivo o es un directorio, si el nombre de archivo coincide con una expresión) y -exec puede hacer todo tipo de cosas poderosas.

No estoy seguro sobre otras implementaciones del comando find . YMMV.


Yeap,

git update-index --assume-unchanged

trabaja solo con archivos, no con directorios. Creo, una de las formas más rápidas:

cd dir ls | xargs -l git update-index --assume-unchanged


git update-index quiere los nombres de los archivos en su línea de comando, no en su entrada estándar.

Paso 1:

cd en la carpeta que desea asumir no se modifica,

Paso 2:

Puedes hacer esto:

git update-index --assume-unchanged $(git ls-files | tr ''/n'' '' '')

o

git ls-files | tr ''/n'' '' '' | xargs git update-index --assume-unchanged

Aunque, en cualquier caso, los nombres de archivo con espacios serán problemáticos. Si los tiene, puede usar esto:

git ls-files -z | xargs -0 git update-index --assume-unchanged

Editar: entrada incorporada de @MatthewScharley con respecto a git ls-files -z .

Comandos de Windows

Nota: si está en Windows, use Git Bash para ejecutar estos comandos