Vea debajo de la línea continua para mi pregunta original.
Tengo una carpeta en mi directorio local que no tiene seguimiento. Cuando corro git status
, obtengo:
Changed but not updated:
modified: vendor/plugins/open_flash_chart_2 (modified content, untracked content)
Cuando escribo y git add vendor/plugins/open_flash_chart_2
luego intento de git status
nuevo, todavía dice sin seguimiento. ¿Que esta pasando?
Aquí hay un resumen simple de mi última media hora:
Descubrí que mi repositorio de Github no rastrea mi
vendor/plugins/open_flash_chart_2
complemento. Específicamente, no hay contenido y muestra una flecha verde en el icono de la carpeta.Intentó
git submodule init
No submodule mapping found in .gitmodules for path 'vendor/plugins/open_flash_chart_2'
Intentó
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
vendor/plugins/open_flash_chart_2 already exists in the index
git status
modified: vendor/plugins/open_flash_chart_2 (untracked content)
Busqué cualquier archivo nombrado
.gitmodules
en mi repositorio / directorio local pero no pude encontrar uno.
¿Qué debo hacer para que mis submódulos funcionen para que git pueda comenzar a rastrear correctamente?
Esto puede no estar relacionado (lo incluyo en caso de que ayude), pero cada vez que escribo en git commit -a
lugar de lo habitual git commit -m "my comments"
, arroja un error:
E325: ATTENTION
Found a swap file by the name ".git\.COMMIT-EDITMSG.swp"
dated: Thu Nov 11 19:45:05 2010
file name: c:/san/project/.git/COMMIT_EDITMSG
modified: YES
user name: San host name: San-PC
process ID: 4268
While opening file ".git\COMMIT_EDITMSG"
dated: Thu Nov 11 20:56:09 2010
NEWER than swap file!
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
Soy un novato en Github y, a pesar de intentar revisar la documentación, estoy un poco perplejo por estos problemas particulares. Gracias.
fuente
git submodule add
,git submodule update --init
.tracking
etiqueta parece usarse para los temas de 'seguimiento de visitantes del sitio web', por lo que tampoco se aplicaría.Respuestas:
Ha agregado
vendor/plugins/open_flash_chart_2
como entrada "gitlink", pero nunca la definió como un submódulo. Efectivamente, está utilizando la función interna que utiliza git submodule (entradas de gitlink) pero no está utilizando la función de submódulo en sí.Probablemente hiciste algo como esto:
Este último comando es el problema. El directorio
vendor/plugins/open_flash_chart_2
comienza como un repositorio Git independiente. Por lo general, estos sub-repositorios se ignoran, pero si le dice a git add que lo agregue explícitamente, creará una entrada gitlink que apunte a la confirmación HEAD del sub-repositorio en lugar de agregar el contenido del directorio. Puede ser bueno si git add se negara a crear tales "semi-submódulos".Los directorios normales se representan como objetos de árbol en Git; los objetos de árbol dan nombres y permisos a los objetos que contienen (generalmente otros objetos de árbol y blob: directorios y archivos, respectivamente). Los submódulos se representan como entradas "gitlink"; Las entradas de gitlink solo contienen el nombre del objeto (hash) de la confirmación HEAD del submódulo. El "repositorio de origen" para la confirmación de un gitlink se especifica en el
.gitmodules
archivo (y el.git/config
archivo una vez que se ha inicializado el submódulo).Lo que tiene es una entrada que apunta a una confirmación particular, sin registrar el repositorio de origen para esa confirmación. Puede solucionar esto ya sea convirtiendo su gitlink en un submódulo apropiado, o quitando el gitlink y reemplazándolo con contenido "normal" (archivos y directorios simples).
Convertirlo en un submódulo adecuado
Lo único que falta para definir correctamente
vendor/plugins/open_flash_chart_2
como un submódulo es un.gitmodules
archivo. Normalmente (si aún no lo hubiera agregado como entrada desnuda de gitlink), simplemente usaríagit submodule add
:Como descubrió, esto no funcionará si la ruta ya existe en el índice. La solución es eliminar temporalmente la entrada gitlink del índice y luego agregar el submódulo:
Esto usará su sub-repositorio existente (es decir, no volverá a clonar el repositorio de origen) y organizará un
.gitmodules
archivo que se verá así:También hará una entrada similar en el repositorio principal
.git/config
(sin lapath
configuración).Compromételo y tendrás un submódulo adecuado. Cuando clona el repositorio (o presiona GitHub y clona desde allí), debería poder reinicializar el submódulo mediante
git submodule update --init
.Reemplácelo con contenido simple
El siguiente paso asume que su sub-repositorio
vendor/plugins/open_flash_chart_2
no tiene ningún historial local que desee conservar (es decir, lo único que le importa es el árbol de trabajo actual del sub-repositorio, no el historial).Si tiene un historial local en el repositorio secundario que le interesa, debe hacer una copia de seguridad del
.git
directorio del repositorio secundario antes de eliminarlo en el segundo comando a continuación. (Considere también el subárbol git siguiente ejemplo de que conserva el historial de HEAD del sub-repositorio).Esta vez, al agregar el directorio, no es un repositorio secundario, por lo que los archivos se agregarán normalmente. Desafortunadamente, dado que eliminamos el
.git
directorio, no hay una manera súper fácil de mantener las cosas actualizadas con el repositorio de origen.Puede considerar usar una combinación de subárbol en su lugar. Hacerlo le permitirá introducir fácilmente los cambios desde el repositorio de origen mientras mantiene los archivos "planos" en su repositorio (sin submódulos). El comando git subtree de terceros es un buen envoltorio alrededor de la funcionalidad de combinación de subárbol.
Luego:
git subtree también tiene una
--squash
opción que le permite evitar incorporar el historial del repositorio de origen en su historial, pero aún le permite incorporar cambios ascendentes.fuente
rm -rf vendor/plugins/open_flash_chart_2/.git
y dice que 'rm' no es reconocido. Luego lo intentégit rm -rf vendor/plugins/open_flash_chart_2/.git
y dijofatal: pathspec 'vendor/plugins/open_flash_chart_2/.git' did not match any files
(¡pero puedo llegar allí en Windows Explorer!)..git
directorio del sub-repositorio y volver a agregar los archivos "de manera plana" (la primera opción de "Contenido simple").subtree
no debe confundirse con la combinación de subárbol. No es una envoltura. El autor lo dice: Pgit readtree --prefix=path
y las fusiones de subárboles:git merge
con-s subtree
o-Xsubtree=path
). También tiene buenos extras "en la parte superior":--squash
modo,split
comandopush
ypull
ayudantes.Acabo de tener el mismo problema. La razón fue porque había una subcarpeta que contenía una carpeta ".git". Eliminarlo hizo feliz a git.
fuente
.git
carpetaURL de referencia https://danielmiessler.com/blog/git-modified-untracked/#gs.W0C7X6U
fuente
Para señalar lo que tuve que desenterrar del chat de Chris Johansen con OP (vinculado desde una respuesta a una respuesta):
git add vendor/plugins/open_flash_chart_2
# agregará gitlink, el contenido permanecerá sin seguimientogit add vendor/plugins/open_flash_chart_2/
# AVISO EL SLASH !!!!La segunda forma lo agregará sin gitlink, y los contenidos son rastreables. El directorio .git se ignora conveniente y automáticamente. Gracias Chris!
fuente
Utilizo el truco sugerido por Peter Lada todo el tiempo, denominado "submódulos falsos":
http://debuggable.com/posts/git-fake-submodules:4b563ee4-f3cc-4061-967e-0e48cbdd56cb
Es muy útil en varios escenarios (pe lo uso para mantener toda mi configuración de Emacs en un repositorio, incluido el HEAD actual de todos los repositorios git dentro de los directorios del paquete elpa / el-get, por lo que podría retroceder / avanzar fácilmente a un conocido versión de trabajo cuando alguna actualización rompe algo).
fuente
http://progit.org/book/ch6-6.html
Creo que deberías leer esto para aprender un poco sobre el submódulo. Está bien escrito y no lleva mucho tiempo leerlo.
fuente
Tuve el mismo problema con un gran proyecto con muchos submódulos. Basado en las respuestas de Chris Johnsen aquí y VonC aquí , construyo un breve script bash que itera a través de todas las entradas existentes de gitlink y las agrega como submódulos adecuados.
Esto me lo arregló, espero que sea de alguna ayuda.
fuente
Esto funcionó bien para mí:
git update-index --skip-worktree
Si no funciona con la ruta, intente con el nombre del archivo. Avísame si esto también funcionó para ti.
¡Adiós!
fuente
Tuve el mismo problema, pero no se resolvió en esta discusión.
También llegué al problema del submódulo como se describe en la apertura del hilo.
Al mirar el diff, reconocí un -dirty agregado a un hash: leer los documentos nuevamente, resolvió el problema para mí. http://web.mit.edu/jhawk/mnt/spo/git/git-doc/user-manual.html Consulte la sección "Errores con submódulos"
La razón fue que hubo cambios o contenido sin seguimiento dentro del submódulo. Primero tuve que llegar al directorio de submódulos, hacer un "git add" + "git commit" para que todo el contenido sea rastreado dentro del submódulo.
Ahora este nuevo HEAD del submódulo podría comprometerse con el módulo maestro.
fuente
Recientemente encontré este problema mientras trabajaba en un proyecto de contrato (considerado clasificado). El sistema en el que tenía que ejecutar el código no tenía acceso a Internet, por supuesto, por razones de seguridad, por lo que instalar dependencias, usando composer y npm, se estaba convirtiendo en un gran dolor.
Después de mucha deliberación con mi colega, decidimos simplemente aletearlo y copiar y pegar nuestras dependencias en lugar de hacer la instalación del compositor o la instalación de npm.
Esto nos llevó a NO agregar proveedores y npm_modules en gitignore. Esto es cuando me encontré con este problema.
Busqué en Google esto un poco y encontré este útil hilo en SO. No siendo demasiado profesional en Git, y estando un poco intoxicado mientras trabajaba en él, solo busqué todos los submódulos en la carpeta de proveedores
Esto me dio unas 4-5 dependencias que tenían git en ellos. Eliminé todas estas carpetas .git y listo, funcionó. Sé que es un truco, y de todos modos no es muy geek. ¡Oh dioses de SO, por favor perdóname! La próxima vez prometo leer en gitlinks y obedecer a Oh poderoso Linus Tovalds.
fuente
Esta pregunta ya ha sido respondida, pero pensé que agregaría a la mezcla lo que descubrí cuando recibí estos mensajes.
Tengo un repositorio llamado
playground
que contiene varias aplicaciones de sandbox. Agregué dos nuevas aplicaciones de un tutorial alplayground
directorio clonando el repositorio del tutorial. El resultado fue que las cosas de git de las nuevas aplicaciones apuntaban al repositorio del tutorial y no a mi repositorio. La solución fue eliminar el.git
directorio de cada uno de los directorios de esas aplicaciones, los directorios demv
las aplicaciones fuera delplayground
directorio y luegomv
volver a ejecutarlosgit add .
. Después de eso funcionó.fuente
Resolví este problema eliminando el archivo .git de mi subcarpeta.
fuente
Primero vaya al Directorio : vendor / plugins / open_flash_chart_2 y DELETE
LUEGO :
SALIDA
fuente