ver trabajar pendientes modificados log con commits comandos archivos git git-submodules git-config

trabajar - Git: ¿puedo suprimir el listado de ''contenido modificado''/entradas de submódulos sucios en estado, diff, etc.?



git ver commits pendientes (8)

Entonces git v1.7.2-rc2 tiene lo que quiero:

$ git diff --ignore-submodules=dirty vendor # no output

$ git status --ignore-submodules=dirty vendor # On branch … nothing to commit (working directory clean)

Creando tu propio git howto:

# get git git clone git://git.kernel.org/pub/scm/git/git.git git cd git git checkout v1.7.2-rc2 # make git. beware of setting prefix make configure ./configure --prefix=/usr/local make sudo make install # you REALLY don''t want to `make doc`, use this instead sudo make quick-install-man sudo make quick-install-html

En algún momento (creo que alrededor de las versiones 1.6.x) git se dio cuenta de los cambios dentro de los submódulos. Eso solo sirve para molestarme:

$ git status vendor | grep modified: # modified: vendor/rails (modified content)

$ git diff vendor/ diff --git a/vendor/rails b/vendor/rails --- a/vendor/rails +++ b/vendor/rails @@ -1 +1 @@ -Subproject commit 046c900df27994d454b7f906caa0e4226bb42b6f +Subproject commit 046c900df27994d454b7f906caa0e4226bb42b6f-dirty

Por favor hazlo parar?

Editar:

Ok, entonces tengo una respuesta. Ahora tengo otra pregunta:

¿Puedo poner esto en ~/.gitconfig ? Desde mi inicial, parece que no puedo, y no vi nada prometedor rozando el parche. (Creo que todavía puedo hacer un alias)


Actualización: vea (y ) la answer respecto a la posibilidad de agregar al archivo .gitmodules un parámetro de configuración para ignorar el estado sucio de un submódulo dado.

ignore = dirty

Así que git 1.7.2 está fuera e incluye la opción --ignore-submodules para el status .

Desde el git help status :

--ignore-submodules[=<when>] Ignore changes to submodules when looking for changes. <when> can be either "untracked", "dirty" or "all", which is the default. When "untracked" is used submodules are not considered dirty when they only contain untracked content (but they are still scanned for modified content). Using "dirty" ignores all changes to the work tree of submodules, only changes to the commits stored in the superproject are shown (this was the behavior before 1.7.0). Using "all" hides all changes to submodules (and suppresses the output of submodule summaries when the config option status.submodulesummary is set).

El valor que quiero está dirty .

git status --ignore-submodules=dirty

Yo uso un alias porque soy flojo:

alias gst=''git status --ignore-submodules=dirty''


Como mencionas, el submódulo patch git: ignora los submódulos sucios para el resumen y statu está en proceso.

También se anunció en la versión de Git 1.7.2-rc2 :

Git v1.7.2 Release Notes (draft) ================================ Updates since v1.7.1 --------------------

La opción " git status " learned " --ignore-submodules ".

Por lo tanto, a menos que compile una versión más reciente, no tendrá esta opción todavía en las versiones estables actuales.

En cuanto a esto como una opción, no es exactamente el enfoque elegido por ahora :

Después de esta serie, estoy planeando agregar una opción de configuración '' ignore '' a .gitmodules , que se puede configurar para cada submódulo a "todos", "sucio", "sin seguimiento" o "ninguno" (el valor predeterminado).

" git diff " y " git status " usarán ese valor de configuración para cada submódulo.
El uso de " --ignore-submodule " anula este valor predeterminado (y el nuevo parámetro "none" se agregará allí para poder anular las configuraciones).

Y para evitar tener que hacer " git submdule sync " cada vez que esa opción cambie, me gustaría buscarla primero en .git/config .
Si no se encuentra allí, se tomará de .gitmodules , si está presente.

De modo que los usuarios pueden anular la configuración, pero si no lo hacen, la versión anterior puede cambiarla fácilmente (por ejemplo, cuando un submódulo .gitignore se ha actualizado para que " ignore=untracked " ya no sea necesario, puede eliminarse).
También cambiar de ramas tendrá un efecto instantáneo si la entrada '' ignore '' en .gitmodules es diferente entre las ramas.

Otro enfoque para hacer que el estado de git (o cualquier comando de git) ignore un submódulo particular está disponible con Git 2.13 (Q2 2017):

git config submodule.<name>.active false

Consulte más información en " Ignore new commits for git submodule ".


Hay dos tipos de avisos de cambio que puede suprimir.

El primero es el untracked content que ocurre cuando haces cambios en tu submódulo pero aún no los has comprometido. El repositorio padre los nota y los informes de git status en consecuencia:

modified: modules/media (untracked content)

Puede suprimir estos con:

[submodule "modules/media"] path = modules/media url = [email protected]:user/media.git ignore = dirty

Sin embargo, una vez que confirme esos cambios, el repositorio principal volverá a tomar nota e informará en consecuencia:

modified: modules/media (new commits)

Si desea suprimir estos también, debe ignorar all cambios

[submodule "modules/media"] path = modules/media url = [email protected]:user/media.git ignore = all


Incluso existe la posibilidad de establecer el modo de ignorar para cada submódulo agregado dentro del archivo .gitmodules.

Justo hoy me encontré con este problema e inmediatamente escribí un artículo en mi blog sobre él después de encontrar una solución: cómo ignorar los cambios en los submódulos de git

La esencia de esto:

Una vez que haya agregado un submódulo, habrá un archivo llamado .gitmodules en la raíz de su repositorio

Solo agrega una línea a ese archivo .gitmodules :

[submodule "bundle/fugitive"] path = bundle/fugitive url = git://github.com/tpope/vim-fugitive.git ignore = dirty


Necesitas agregar

ignorar = sucio

a .gitmodules


Puede que no desee agregar ignore = dirty a .gitmodules , es posible que desee ser más selectivo sobre los cambios que desea ignorar.

Para hacer eso, agregue patrones a .git/submodule_foo/bar/info/exclude , donde submodule_foo/bar/ es la ruta del submódulo.

Los patrones son similares a los patrones que agregaría a .gitignore , siendo el directorio raíz el submódulo. Por ejemplo, este patrón ignora el directorio de build en el submódulo submodule_foo/bar/ :

# in .git/submodule_foo/bar/info/exclude: /build/


También puedes usar

% git config [--global] core.ignore dirty

para establecer ignore = dirty en su archivo .git / config. --global establecerá el indicador de ignorar en tu ~ / .gitconfig y se aplicará a todos tus repositorios. Sin él, debe establecerse en .git / config solo para el repositorio en el que se encuentra actualmente.

La única documentación que puedo encontrar en este es el submodule.<name>.ignore en los documentos de git-config . Lo moví de un archivo .gitmodules a mi ~ / .gitconfig y todavía funciona para mí.