Tengo un montón de archivos en un conjunto de cambios, pero quiero ignorar específicamente un solo archivo modificado. Se ve así después de git status:
# modified: main/dontcheckmein.txt
# deleted: main/plzcheckmein.c
# deleted: main/plzcheckmein2.c
...
¿Hay alguna manera de hacerlo git addpero simplemente ignorar el único archivo de texto que no quiero tocar? Algo como:
git add -u -except main/dontcheckmein.txt

main/*, es necesario agregarlo--delante para que git sepa que es un camino. Las otras dos variantes funcionan sin incluir los dos guiones. (Probado en el símbolo del sistema en Windows 7 con msysGit)git resetpara esas carpetas después seguirá funcionando, pero le tomará mucho tiempo agregar las carpetas grandes.1) Para comenzar a ignorar los cambios en un solo archivo ya versionado
y deshacer eso
git update-index --no-assume-unchanged "main/dontcheckmein.txt"documentos de github para ignorar archivos
2) Para ignorar por completo un archivo único específico que impide que se cree en el repositorio
Primero, mira esta publicación de stackoverflow: Git global ignore no funciona
En
.gitignore, agregue la ruta relativa al archivo sin guiar./.Entonces, si su archivo está en
MyProject/MyFolder/myfile.txt, (donde.gittambién está en elMyProjectcarpeta), agrégueloMyFolder/myfile.txta.gitignorearchivo .Puede confirmar qué reglas están asociadas con ignorar a través de
git check-ignore "MyFolder/myfile.txt"Sobre ignorar global
Ese enlace habla
~/.gitignore_global, pero el archivo está relacionado con su proyecto. Entonces, si pones el patrón de exclusiónMyFolder/myfile.txten~/.gitignore_global, va a trabajar, pero no tendrá mucho sentido ...Por otro lado, si configura su proyecto con
git config core.excludesfile .gitignoredónde.gitignoreestáMyProject, el archivo local se anulará~/.gitignore_global, lo que puede tener reglas muy útiles. ...Entonces, por ahora, creo que es mejor hacer un script para mezclarlo
.gitignorecon~/.gitignore_globalat.gitignore.Una última advertencia
Si el archivo que desea ignorar ya está en el repositorio, este método no funcionará a menos que haga esto: ¡
git rm "MyFolder/myfile.txt"pero haga una copia de seguridad primero, ya que también se eliminará localmente! Puedes copiarlo más tarde ...fuente
git rm --cached MyFolder/myyfile.txtpara eliminar el archivo del repositorio pero mantenerlo localmente. Explicación en help.github.comPara un archivo
Para una carpeta
fuente
git add . && git reset -- main/*?git push origin mastersu próximo impulso, sologit pushy git sabrá que está en la rama maestra. Espero eso ayude.Ahora es
gitcompatibleexclude certain paths and filescon la magia del camino:(exclude)y su forma corta:!. Para que pueda lograrlo fácilmente con el siguiente comando.En realidad puedes especificar más:
fuente
:!...cláusulas para evitar que el shell se queje. Así, por ejemplo:git add --all -- ':!path/to/file1' ':!path/to/file2' ':!path/to/folder1/*'.:!/path/to/(file1|file2)?Si bien Ben Jackson tiene razón, pensé que agregaría también cómo he estado usando esa solución. A continuación se muestra un script muy simple que uso (al que llamo gitadd) para agregar todos los cambios, excepto algunos seleccionados que mantengo listados en un archivo llamado
.gittrackignore(muy similar a cómo funciona .gitignore).Y así es
.gittrackignorecomo se ve mi actual .Estoy trabajando en un proyecto de Android que compilo desde la línea de comandos al implementar. Este proyecto depende de SherlockActionBar, por lo que debe ser referenciado en project.properties, pero eso se mete con la compilación, por lo que ahora solo escribo
gitaddy agrego todos los cambios a git sin tener que quitar project.properties cada vez.fuente
--era hasta tu comentario. Según las páginas del manual, es opcional y no cambia el resultado del comando (al menos en este caso). Esta pregunta parece apoyar eso, stackoverflow.com/questions/17800994/… . Corrígeme si me equivoco, pero parece que significa "tratar cualquier cosa después--como argumentos, no como opciones / cambios"--engit checkoutveo en esa pregunta. No sabía cuál era el doble guión hasta este intercambio nuestro también. Me pregunto si lagit checkoutambigüedad entre ramas y archivos podría afectar, en esta o en una forma diferente,git resettambién.Para mantener el cambio en el archivo pero no para confirmar, hice esto
git add .git reset -- main/dontcheckmein.txtgit commit -m "commit message"para verificar que el archivo está excluido
git statusfuente
Use
git add -Apara agregar todos los archivos modificados y recién agregados a la vez.Ejemplo
fuente
fuente
Prueba esto:
fuente
Para el caso específico de la pregunta, la forma más fácil sería agregar todos los archivos con extensión .c y omitir todo lo demás:
Desde git-scm (o / y
man git add):Tenga en cuenta que esto significa que también podría hacer algo como:
para agregar todos los archivos (que no se ignoran) que están en la
maincarpeta. Incluso puedes enloquecer con patrones más elaborados:Lo anterior agregará todos los archivos que están en la
s(any char)ccarpeta y tienenServicealgún lugar en su nombre de archivo.Obviamente, no está limitado a un patrón por comando. Es decir, puede pedirle a git que agregue todos los archivos que tengan una extensión de .c y .h :
Este enlace puede darle algunas ideas más de patrones globales.
Me resulta particularmente útil cuando estoy haciendo muchos cambios, pero todavía quiero que mis compromisos se mantengan atómicos y reflejen un proceso gradual en lugar de una mezcolanza de cambios en los que puedo estar trabajando en ese momento. Por supuesto, en algún momento el costo de crear patrones elaborados supera el costo de agregar archivos con métodos más simples, o incluso un archivo a la vez. Sin embargo, la mayoría de las veces puedo identificar fácilmente los archivos que necesito con un patrón simple y excluir todo lo demás.
Por cierto, es posible que necesite citar sus patrones globales para que funcionen, pero este nunca fue el caso para mí.
fuente
Utilizo
git add --patchbastante y quería algo como esto para evitar tener que golpear dtodo el tiempo a través de los mismos archivos. Creé un par de alias git muy extravagantes para hacer el trabajo:En mi caso, solo quería ignorar ciertos archivos minificados todo el tiempo, pero podría hacer que use una variable de entorno como
$GIT_EXCLUDE_PATTERNpara un caso de uso más general.fuente
Cambios a realizar: (use "git reset HEAD ..." para quitar el escenario)
fuente
Puedes probar esto:
git add * && git reset main/dontcheckmein.txtfuente