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í.