¿Cuándo usarías .git / info / exclude en lugar de .gitignore para excluir archivos?

144

Estoy un poco confundido acerca de los pros y los contras de usar .git/info/excludey .gitignoreexcluir archivos.

Ambos están al nivel del repositorio / proyecto, entonces, ¿en qué se diferencian y cuándo debemos usarlos .git/info/exclude?

Parag
fuente

Respuestas:

196

La ventaja de esto .gitignorees que puede registrarse en el repositorio mismo, a diferencia .git/info/exclude. Otra ventaja es que puede tener múltiples .gitignorearchivos, uno dentro de cada directorio / subdirectorio para reglas de ignorar específicas del directorio, a diferencia .git/info/exclude.

Por lo tanto, .gitignoreestá disponible en todos los clones del repositorio. Por lo tanto, en equipos grandes a todas las personas están ignorando el mismo tipo de archivos Ejemplo *.db, *.log. Y puede tener reglas de ignorar más específicas debido a múltiples .gitignore.

.git/info/excludeestá disponible solo para clones individuales, por lo tanto, lo que una persona ignora en su clon no está disponible en el clon de otra persona. Por ejemplo, si alguien usa Eclipsepara el desarrollo, puede tener sentido que ese desarrollador agregue una .buildcarpeta .git/info/excludeporque otros desarrolladores pueden no estar usando Eclipse.

En general, las reglas de archivos / ignorar que se deben ignorar universalmente deben entrar .gitignore, y de lo contrario, los archivos que desea ignorar solo en su clon local deben entrar.git/info/exclude

mu 無
fuente
pero eso idealmente debería ir a ~ / .gitignore según la documentación oficial de Git aquí, git-scm.com/docs/gitignore
Devendra Swami
@DevendraSwami No entendí qué entrada específica debería entrar ~/.gitignoreen tu comentario anterior. Tengo entendido que las reglas de ignorar pueden estar en 3 niveles: $PROJECT/.git/info/excludepara reglas de ignorar específicas de (proyecto, usuario), $PROJECT/<any number of directories>/.gitignoreque es para reglas de ignorar específicas de proyecto en cualquier usuario en cualquier lugar (cuando se registra), ~/.gitignore para reglas de ignorar específicas de usuario para cualquier proyecto para ese usuario en esa máquina Con base en el objetivo, tienes que elegir el lugar para poner una entrada en.
mu無
Sí, tienes toda la razón. Mi comentario estaba relacionado con esta pregunta stackoverflow.com/questions/59673991/…
Devendra Swami
Pido disculpas por el comentario incompleto original.
Devendra Swami
2
@ShimmyWeitzhandler, ¿el archivo sln ya está en su repositorio? Luego excluir o .ignore no evitará que git rastree sus cambios. Pruebe uno de los siguientes: git rm --cached <path-name>lo eliminará del repositorio, pero lo mantendrá localmente. git update-index --skip-worktree <path-name>ignorará los cambios en el archivo, pero lo mantendrá en el repositorio. Por curiosidad: ¿Por qué quieres excluir el archivo sln? Es una parte importante de una solución .Net ¿verdad?
Koen
36

Buscado en Google: 3 formas de excluir archivos

  1. .gitignore se aplica a cada clon de este repositorio (versionado, todos lo tendrán),
  2. .git/info/exclude solo se aplica a su copia local de este repositorio (local, no compartido con otros),
  3. ~/.gitignore se aplica a todos los repositorios en su computadora (local, no compartido con otros).

3. en realidad requiere establecer una configuración en su computadora:

git config --global core.excludesfile '~/.gitignore'
LeGEC
fuente
2
Sí, también lo leí, pero quería tener una perspectiva más práctica (del mundo real) :-)
Parag
El blog vinculado llama por error al archivo .git/info/excludes, cuando debería ser .git/info/exclude, como lo confirma la documentación a la que se vincula.
mwfearnley
13
(spoiler: la tercera forma es ignorar globalmente la computadora a través de una configuración en ~ / .gitconfig)
hmijail llora a los cesionarios el
@hmijail: gracias, incluí tu comentario en esta respuesta
LeGEC
12

Solo para ofrecer nuestra experiencia (del mundo real): comenzamos a usar .git / info / exclude cuando tuvimos que personalizar algunos archivos de configuración en cada entorno de desarrollo, pero aún queríamos que la fuente se mantuviera en el repositorio y estuviera disponible para otros desarrolladores.

De esta forma, los archivos locales, una vez clonados y modificados, pueden excluirse de los commits sin afectar los archivos originales en el repositorio pero sin ser necesariamente ignorados en el repositorio.

Effing
fuente
4

Úselo .gitignorepara ignorar las reglas que son específicas del proyecto . Utilice excludeo un archivo de ignorar global para ignorar las reglas que son específicas de su entorno .

Por ejemplo, mis archivos globales de ignorar ignoran los archivos temporales generados por cualquier editor que esté usando; esa regla es específica de mi entorno y podría ser diferente para algún otro desarrollador en el mismo proyecto (tal vez usan un editor diferente). OTOH, mis .gitignorearchivos de proyecto ignoran cosas como las claves de API y los artefactos de compilación, esos son para el proyecto y deberían ser los mismos para todos en el proyecto.

¿Eso ayuda?

Marnen Laibow-Koser
fuente