Tengo un repositorio de git ~/.janus/
con un montón de submódulos. Quiero agregar un submódulo ~/.janus/snipmate-snippets/snippets/
, pero cuando ejecuto git submodule add <[email protected]:...>
en el snipmate-snippets
directorio, aparece el siguiente mensaje de error:
You need to run this command from the toplevel of the working tree.
Entonces la pregunta es: ¿Cómo agrego un submódulo al snipmate-snippets
directorio?
git
git-submodules
Robert Audi
fuente
fuente
git submodule add -b <branch> <url> <relative_path_4m_root>
Respuestas:
Entras
~/.janus
y corres:Si necesita más información sobre submódulos (o git en general) ProGit es bastante útil.
fuente
'subprojects' already exists in the index
(estaba usando subproyectos como el nombre del directorio) . En cambio, lo que ayudó, es la respuesta de VonC a continuación, es decircd subprojects
, hacer , y luegogit submodule add <get@github …>
sin el camino.Tenga en cuenta que a partir de git1.8.4 (julio de 2013), ya no tendrá que volver al directorio raíz.
( Bouke Versteegh comenta que no tiene que usar
/.
, como ensnippets/.
:snippets
es suficiente)Ver commit 091a6eb0feed820a43663ca63dc2bc0bb247bbae :
Depende de commit 12b9d32790b40bf3ea49134095619700191abf1f
fuente
/.
no es necesario, git creará los fragmentos de directorio sin él.Relative path can only be used from the toplevel of the working tree
. Estoy haciendogit submodule add ../../../functest
Relative path can only be used from the toplevel of the working tree
") no es el de la pregunta original ("You need to run this command from the toplevel of the working tree
")Tuve un problema similar, pero me pinté en una esquina con herramientas GUI.
Tenía un subproyecto con algunos archivos que hasta ahora había copiado en lugar de registrarme en su propio repositorio de git. Creé un repositorio en la subcarpeta, pude confirmar, enviar, etc. bien. Pero en el repositorio principal, la subcarpeta no se trataba como un submódulo, y el repositorio principal seguía rastreando sus archivos, lo cual no era bueno.
Para salir de este lío, tuve que decirle a Git que dejara de rastrear la subcarpeta (sin eliminar los archivos):
Luego tuve que decirle que había un submódulo allí (que no puede hacer si hay algo que actualmente está siendo rastreado por git):
Actualizar
La forma ideal de manejar esto implica un par de pasos más. Idealmente, el repositorio existente se mueve a su propio directorio, libre de cualquier módulo git principal, se confirma y empuja, y luego se agrega como un submódulo como:
Eso clonará el repositorio de git como un submódulo, que implica los pasos de clonación estándar, pero también varios otros pasos de configuración más oscuros que git toma en su nombre para que ese submódulo funcione. La diferencia más importante es que coloca un archivo .git simple allí, en lugar de un directorio .git, que contiene una referencia de ruta a donde vive el directorio git real, generalmente en la raíz principal del proyecto .git / modules / jslib.
Si no haces las cosas de esta manera, funcionarán bien para ti, pero tan pronto como te comprometes y presionas al padre, y otro desarrollador va a tirar de ese padre, simplemente les harás la vida mucho más difícil. Será muy difícil para ellos replicar la estructura que tiene en su máquina siempre que tenga un directorio .git completo en una subcarpeta de un directorio que contenga su propio directorio .git.
Entonces, mover, empujar, git agregar submódulo, es la opción más limpia.
fuente
Para aquellos de ustedes que comparten mi extraño gusto por editar manualmente los archivos de configuración, agregar (o modificar) lo siguiente también sería el truco.
.git / config (configuración personal)
.gitmodules (configuración compartida comprometida)
Vea esto también: ¿ diferencia entre .gitmodules y especificación de submódulos en .git / config?
fuente
guión bash de una línea para ayudar a facilitar la respuesta de Chris anterior, ya que también me había pintado en una esquina usando las actualizaciones de Vundle para mis guiones .vim.
DEST
es la ruta al directorio que contiene sus submódulos. Haz esto después de hacergit rm -r $DEST
salud
fuente