2011-01-08 13 views
41

El archivo .gitignore es muy útil al ignorar algunos de los archivos que no queremos controlar. Desafortunadamente, no se puede usar cuando el archivo ya está bajo control de versión. Por ejemplo, mi archivo .gitignore (que ya está agregado a git) puede ser diferente de lo que mi compañero de trabajo quiere (por ejemplo, quiero ignorar los archivos de Vim). Cada vez que hago cambios en este archivo, git lo muestra como un archivo modificado. Así que mis preguntas:Git: Ignorar archivos controlados por la versión

  1. ¿Hay alguna manera de ignorar los cambios para un determinado archivo, que ya está controlado por Git?
  2. ¿Hay alguna forma de cometer estos cambios, pero guárdelo solo? Obviamente, no quiero usar una rama porque estoy trabajando en una determinada rama.
+5

Ninguna de las respuestas responde a la pregunta principal - número 1, incluida la aceptada. La pregunta era sobre ignorar archivos que ya están controlados, no. Ignorar no exluir hará el trabajo – shealtiel

+4

La respuesta de git-update-index es la respuesta correcta. – Jason

Respuesta

11

Si desea excluir archivos que son específicos de su proceso (como los archivos temporales de Vim), edite el archivo (local) .git/info/exclude y agregue sus patrones de exclusión allí. Este archivo está diseñado para exclusiones específicas de desarrollador en lugar de .gitignore, que está diseñado para exclusiones de todo el proyecto.

El breve resumen es que todo el mundo debería estar de acuerdo con lo que se agrega a .gitignore. Para archivos en los que no está de acuerdo, use .git/info/exclude.

+0

Agregué archivos controlados por la versión a .get/info/exclude pero continuaron apareciendo como archivos modificados. – paullb

+7

¡Esto NO ES CORRECTO! Usa la respuesta de Aristóteles Pagaltzis a continuación. – paullb

+1

La pregunta original es buscar una forma para que diferentes compañeros de trabajo ignoren diferentes conjuntos de archivos. Mi respuesta introduce el archivo '.git/info/exclude' que está diseñado para este propósito. Sin embargo, si generaliza la pregunta en "¿cómo ignoro los cambios a * cualquier * archivo que ya está agregado a Git?", Entonces sí, necesita una solución diferente porque ese es un problema diferente. Sin embargo, no recomendaría la solución general para este problema específico, porque los compañeros de trabajo ya no pueden compartir los cambios en '.gitignore'. –

2

Realmente no puedo responder la pregunta general (haciendo que Git ignore los archivos rastreados) - me parece una característica que sería mucho más perjudicial que útil. Sin embargo, gitignore manual page especifica algunas formas de configurar patrones para archivos excluidos.

En particular, se da instrucciones explícitas sobre cómo utilizar estas diversas maneras:

  • patrones que deben estar bajo control de versiones y se distribuye a otros repositorios a través de clon (es decir, archivos que todos los desarrolladores querrán ignorar) debe ir a un archivo .gitignore.

Lo que significa que su archivo .gitignore no debe ser diferente de sus compañeros de trabajo - que funciona según lo previsto.

  • patrones que son específicas para un depósito particular, pero que no necesitan ser compartidos con otros repositorios relacionadas (por ejemplo, archivos auxiliares que viven dentro del repositorio, pero son específicos de flujo de trabajo de un usuario) debe entrar en el archivo $GIT_DIR/info/exclude.

  • Patrones cual un usuario quiere hacer caso omiso de git en todas las situaciones (por ejemplo, copia de seguridad o archivos temporales generados por el editor de la elección del usuario) van generalmente en un archivo especificado por el usuario en core.excludesfile de ~/.gitconfig.

Ahí lo tienen. Especifique una ruta de archivo core.excludesfile en su archivo ~/.gitconfig, y luego ponga los patrones que desea excluir.

99

Uso git-update-index ignorar temporalmente a cambios en los archivos que ya están bajo control de versiones:

git update-index --assume-unchanged <files> 

Para deshacer ese uso:

git update-index --no-assume-unchanged <files> 

también echar un vistazo a las skip-worktree y no-skip-worktree opciones para la actualización -index si necesita que esto persista después de un git-reset

+0

funcionó como un encanto! ¡gracias! –

1

He escrito sobre three ways of excluding files en otro lugar.

En resumen:

  1. Un git global Archivo ignorar aplica a todos los repositorios en ese sistema
  2. El archivo .gitignore en el repositorio se aplica el repositorio y todos los clones de ese repositorio.
  3. El archivo .git/info/exclude solo se aplica a ese repositorio.

Los elementos inferiores de la lista tienen prioridad sobre los elementos más altos, y ! delante de un elemento en cualquiera de los patrones del archivo invierte una exclusión anterior.

Este paradigma se ve en otra parte de Git. Por ejemplo, si usaba submódulos, la url del submódulo que debe usar está en el archivo .gitmodules en el repositorio, pero puede anular la URL para usar en el archivo .git/config.

+3

no se aplica a los archivos que ya están versionados –

0

Aquí es una solución para aquellos que usan Git bajo SmartGitHG interfaz Viusal generalizada, ubiquitos (no individual):

  • elegir una carpeta que desea ignorar en la ventana "repositorios";
  • seleccione todos los archivos de esa carpeta en la ventana "Archivos" (muestre los archivos sin modificar haciendo clic en el ícono de filtro respectivo en la parte superior derecha de la ventana principal);
  • haga clic en "Eliminar" en el panel de control (marque la casilla "Eliminar archivos locales" si lo necesita);
  • comprometen cambios locales;
  • haga clic con el botón derecho sobre la carpeta en la ventana "Repositorios";
  • haga clic en "Ignorar".
4

puede usar este comando para obtener el resultado deseado.

git rm --cached path/to/file 

o

git rm -r --cached path/ignore/dir 

esto sólo eliminar la pista de git, no eliminará los archivos reales.

Luego puede editar el archivo de ignorar para destrabar estos archivos o directorios.

Cuestiones relacionadas