¿Cómo rastrear contenido no rastreado?

12 minutos de lectura

¿Como rastrear contenido no rastreado
cirro

Vea debajo de la línea sólida para mi pregunta original.

Tengo una carpeta en mi directorio local que no está rastreada. cuando corro git statusYo obtengo:

Changed but not updated:
modified:   vendor/plugins/open_flash_chart_2 (modified content, untracked content)

cuando escribo git add vendor/plugins/open_flash_chart_2 entonces intenta git status de nuevo, todavía dice sin seguimiento. ¿Qué está sucediendo?


Aquí hay un resumen simple de mi última media hora:

  • Descubrí que mi repositorio de Github no está rastreando mi vendor/plugins/open_flash_chart_2 enchufar. Específicamente, no hay contenido y está mostrando un flecha verde en el icono de la carpeta.

  • Intentado git submodule init

    No submodule mapping found in .gitmodules for path 'vendor/plugins/open_flash_chart_2'
    
  • Intentado 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)
    
  • Cazado por cualquier archivo llamado .gitmodules en mi repositorio/directorio local pero no pude encontrar uno.

que tengo que hacer para hacer 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 git commit -a en lugar de mi 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 completo novato en Github y, a pesar de intentar revisar la documentación, estoy un poco perplejo con estos problemas en particular. Gracias.

  • Estoy confundido acerca de algunas cosas. Uno: ¿por qué sigues diciendo github? todo lo que dices suena local (excepto esa flecha verde, no sé nada al respecto). ¿Es así, o se trata de una pregunta sobre cómo enviar actualizaciones a github? Dos: ¿realmente has hecho algo para crear este complemento como un submódulo? Un submódulo es un repositorio de git por derecho propio. Lo crea por separado y luego lo agrega al superproyecto.

    – Cascabel

    12 de noviembre de 2010 a las 3:06


  • Hm, la salida del estado de git sugiere que de hecho hay un submódulo allí… pero ¿realmente no tienes un archivo .gitmodules? Honestamente, si este complemento tiene su propio repositorio y sabe qué versión desea, puede eliminar ese directorio de su proyecto, asegurarse de que no haya ninguna entrada en .gitmodules y realizar la configuración del submódulo: git submodule add, git submodule update --init.

    – Cascabel

    12 de noviembre de 2010 a las 3:11

  • Jefromi: en realidad, no he mencionado Github más de dos veces: la primera vez se debe a que la flecha verde aparece en la parte superior de la imagen de la carpeta amarilla en el repositorio real de Github para open_flash_chart_2. Con gusto editaré la respuesta para que quede más clara.

    – sscirro

    12 de noviembre de 2010 a las 3:24

  • @sscirrus: definitivamente debería tener una preferencia, submódulo o no. Si se trata de algo externo en lo que no va a trabajar, pero del que puede querer actualizaciones, debería ser un submódulo. Si no le importa obtener actualizaciones de su repositorio original y es posible que desee piratear la fuente usted mismo, no debería ser un submódulo.

    – Cascabel

    12 de noviembre de 2010 a las 7:19


  • Esta pregunta parece ser puramente sobre submódulos de git. Eliminé algunas etiquetas porque esta pregunta no está directamente relacionada con Rails o github, se aplicaría a todos git casos de uso. Y el tracking La etiqueta parece usarse para los temas de ‘seguimiento de visitantes del sitio web’, por lo que tampoco se aplicaría.

    – corredor de borde

    12 de noviembre de 2010 a las 8:20

Has añadido vendor/plugins/open_flash_chart_2 como entrada “gitlink”, pero nunca lo definió como un submódulo. Efectivamente, está utilizando la función interna que submódulo git utiliza (entradas de gitlink) pero no está utilizando la función de submódulo en sí.

Probablemente hiciste algo como esto:

git clone git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
git add vendor/plugins/open_flash_chart_2

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 dices añadir para agregarlo explícitamente, creará una entrada de gitlink que apunta a la confirmación HEAD del sub-repositorio en lugar de agregar el contenido del directorio. Podría ser bueno si añadir se negaría 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 (por lo general, 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 una vez inicializado el submódulo).

Lo que tienes es una entrada que apunta a una confirmación en particular, sin registrar el repositorio fuente para esa confirmación. Puede solucionar esto convirtiendo su gitlink en un submódulo adecuado o eliminando el gitlink y reemplazándolo con contenido “normal” (archivos y directorios sin formato).

Conviértalo en un submódulo adecuado

Lo único que te falta para definir correctamente vendor/plugins/open_flash_chart_2 como submódulo es un .gitmodules expediente. Normalmente (si aún no lo ha agregado como una entrada de gitlink simple), simplemente usaría git submodule add:

git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2

Como descubrió, esto no funcionará si la ruta ya existe en el índice. La solución es eliminar temporalmente la entrada de gitlink del índice y luego agregar el submódulo:

git rm --cached vendor/plugins/open_flash_chart_2
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2

Esto utilizará su sub-repositorio existente (es decir, no volverá a clonar el repositorio de origen) y organizará un .gitmodules archivo que se ve así:

[submodule "vendor/plugins/open_flash_chart_2"]
    path = vendor/plugins/open_flash_chart_2
    url = git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2

También hará una entrada similar en su repositorio principal .git/config (sin el path ajuste).

Confirme eso y tendrá un submódulo adecuado. Cuando clone el repositorio (o empuje a GitHub y clone desde allí), debería poder reiniciar el submódulo a través de git submodule update --init.

Reemplácelo con contenido sin formato

El siguiente paso asume que su sub-repositorio en vendor/plugins/open_flash_chart_2 no tiene ningún historial local que desee conservar (es decir, todo lo que le importa es el árbol de trabajo actual del sub-repositorio, no el historial).

Si tiene un historial local en el sub-repositorio que le interesa, entonces debe hacer una copia de seguridad del sub-repositorio. .git directorio antes de eliminarlo en el segundo comando a continuación. (También considere la subárbol git ejemplo a continuación que conserva el historial del HEAD del sub-repositorio).

git rm --cached vendor/plugins/open_flash_chart_2
rm -rf vendor/plugins/open_flash_chart_2/.git # BACK THIS UP FIRST unless you are sure you have no local changes in it
git add vendor/plugins/open_flash_chart_2

Esta vez al agregar el directorio, no es un sub-repositorio, por lo que los archivos se agregarán normalmente. Desafortunadamente, desde que eliminamos el .git directorio, no existe una manera súper fácil de mantener las cosas actualizadas con el repositorio fuente.

Podría considerar usar un fusión de subárboles en lugar de. Si lo hace, le permitirá extraer fácilmente los cambios del repositorio de origen mientras mantiene los archivos “planos” en su repositorio (sin submódulos). el tercero subárbol git mando es un buen envoltorio alrededor de la funcionalidad de combinación de subárboles.

git rm --cached vendor/plugins/open_flash_chart_2
git commit -m'converting to subtree; please stand by'
mv vendor/plugins/open_flash_chart_2 ../ofc2.local
git subtree add --prefix=vendor/plugins/open_flash_chart_2 ../ofc2.local HEAD
#rm -rf ../ofc2.local # if HEAD was the only tip with local history

Luego:

git remote add ofc2 git://github.com/korin/open_flash_chart_2_plugin.git
git subtree pull --prefix=vendor/plugins/open_flash_chart_2 ofc2 master

git subtree push --prefix=vendor/plugins/open_flash_chart_2 git@github.com:me/my_ofc2_fork.git changes_for_pull_request

subárbol git también tiene un --squash opción que le permite evitar la incorporación del historial del repositorio de origen en su historial, pero aún le permite obtener cambios ascendentes.

  • Chris, acabo de intentar rm -rf vendor/plugins/open_flash_chart_2/.git y dice ‘rm’ no se reconoce. Entonces lo intenté git rm -rf vendor/plugins/open_flash_chart_2/.git y dijo fatal: pathspec 'vendor/plugins/open_flash_chart_2/.git' did not match any files (¡pero puedo llegar allí en Windows Explorer!).

    – sscirro

    12 de noviembre de 2010 a las 8:14


  • Discutimos un poco el problema en el chat. El OP pudo eliminar el sub-repositorio .git dir y vuelva a agregar los archivos “de plano” (la primera opción de “Contenido simple”).

    – Chris Johnsen

    12 de noviembre de 2010 a las 10:00

  • Esto me salvó mucho el culo el otro día. Accidentalmente había agregado algo con un directorio .git a mi repositorio de git, y luego git pensó que tenía un submódulo, lo que estaba causando que mi git svn dcommits se volviera loco. Te votaría 3 veces si pudiera.

    – David Bernal

    20 de abril de 2011 a las 19:29

  • Quiero señalar, el complemento de terceros subtree no debe confundirse con la combinación de subárboles. No es un envoltorio. El autor lo dice 😛

    – NebulosaZorro

    16 de septiembre de 2011 a las 12:48


  • @NebulaFox: Mientras subárbol git no es sólo un envoltorio alrededor de las fusiones de subárboles, ciertamente utiliza las mismas técnicas que el procedimiento estándar de “fusión de subárboles” (es decir, git readtree --prefix=path y fusiones de subárboles: git merge con -s subtree o -Xsubtree=path). Tiene buenos extras “en la parte superior”, también: --squash modo, el split comando, y el push y pull ayudantes

    – Chris Johnsen

    17 de septiembre de 2011 a las 9:57


Acabo de tener el mismo problema. El motivo fue que había una subcarpeta que contenía una carpeta “.git”. Eliminarlo hizo feliz a git.

  • Sí, esto me pasó en AndroidStudio. El repositorio de git ya se había creado en la carpeta /app mientras intentaba crear un repositorio de git una carpeta hacia arriba. Gracias.

    – ZirconCode

    13 de enero de 2015 a las 10:03

  • Tenía una aplicación creada con angular cli en muchas otras carpetas y esa carpeta tenía una carpeta .git: / ¡Ese es el problema real, no las cosas del submódulo!

    – Pascual

    29 mayo 2016 a las 19:48

  • esto funciona para mí … Probé el git add muchas veces, pero no pasó nada. luego quito el .git carpeta

    – Ninja

    22 de julio de 2016 a las 3:18

  • Pero, ¿qué pasa si todavía quiero rastrear mi subcarpeta? Qué tengo que hacer ?

    – código-8

    23 de noviembre de 2017 a las 21:34

  • Tener el mismo caso. Todavía quiero rastrear esa subcarpeta que lamentablemente también contenía una carpeta .git. Después de eliminar esta carpeta sufolder .git, ya no se rastrea en mi carpeta principal .git … .:(

    – sqp_125

    3 de julio de 2018 a las 12:42

  1. Eliminé los directorios .git de esos nuevos directorios (esto puede crear drama de submódulo. Google si está interesado).
  2. Luego ejecuté git rm -rf –cached /the/new/directories
  3. Luego volví a agregar los directorios con un git add. desde arriba

URL de referencia https://danielmiessler.com/blog/git-modified-untracked/#gs.W0C7X6U

Para señalar lo que tuve que desenterrar del chat de Chris Johansen con OP (vinculado de una respuesta a una respuesta):

git add vendor/plugins/open_flash_chart_2 # agregará gitlink, el contenido permanecerá sin seguimiento

git add vendor/plugins/open_flash_chart_2/ # ¡NOTA LA BARRA !!!!

El segundo formulario lo agregará sin gitlink, y los contenidos son rastreables. El directorio .git se ignora conveniente y automáticamente. ¡Gracias Chris!

Uso 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 (por ejemplo, lo uso para mantener toda mi configuración de Emacs en un repositorio, incluido el HEAD actual de todos los repositorios de git dentro de los directorios de paquetes 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).

¿Como rastrear contenido no rastreado
Mehedi Zamadar

Resolví este problema eliminando el archivo .git de mi subcarpeta.

  1. Primero elimine el archivo .git de su subcarpeta
  2. Luego elimine su subcarpeta de git ejecutando este código, git rm -rf –almacenó en caché su_nombre_de_subcarpeta
  3. Luego agregue nuevamente su carpeta por agrega git mando

1646754554 305 ¿Como rastrear contenido no rastreado
rmk

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.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad