tipos - No se puede agregar el submódulo git cuando se especifica como una ruta relativa
¿qué hace git log-oneline? (3)
¿ ../extern/Lib1
refiere ../extern/Lib1
a un repositorio Git?
Si no lo hace, Git no sabría cómo tener la url de repo de Git en su .gitmodule
Intenta también:
- con la
lib
destino no existente (incluso vacía) - con una ruta absoluta en lugar de una relativa (puede utilizar una relativa, pero en caso de que valga la pena intentarlo aquí)
Algunas buenas fuentes en submódulos son:
- capítulo 8 del manual de usuario de Git
- Página de Wiki en Git Submodule Tutorial
y por supuesto - Página de manual de submódulo de Git
Como solo la ruta absoluta funciona aquí, significa que la ruta relativa necesita una referencia para comparar.
Esa referencia es el "origen remoto" que debería estar en su DirName/NewRepo_withSubmodules/.git/config
, así:
$ cat .git/config
...
[remote "origin"]
url = /path/to/DirName/NewRepo_withSubmodules/.git
fetch = +refs/heads/*:refs/remotes/origin/*
...
Si tiene esa sección en el archivo ../DirName/NewRepo_withSubmodules/.git/config
, debería poder agregar ../Extern/Lib1
como un submódulo usando una ruta relativa.
Todo lo anterior está inspirado en la siguiente sección de la página de manual de submódulo de git:
<repository>
es la URL del repositorio de origen del nuevo submódulo.
Esto puede ser una URL absoluta, o (si comienza con./
o../
), la ubicación relativa al repositorio deorigin
del superproyecto .
Entonces, si NewRepo_withSubmodules
es un repositorio de Git local que acaba de crearse (y no tiene, por supuesto, "origen"), debe definirse un "origen remoto" artificial (incluso si el origen apunta a sí mismo), aunque solo sea para permitir la URL relativa para otros repositorios de submódulos a utilizar.
Git 2.13 (Q2 2017) mejorará la detección del origen predeterminado de un submódulo.
Consulte la confirmación d1b3b81 (25 de febrero de 2017) por Stefan Beller ( stefanbeller
) .
(Combinado por Junio C Hamano - gitster
- in commit ae900eb , 10 de marzo de 2017)
submodule init
: advierte sobre volver a un camino local
Como ahora documentado :
<repository>
es la URL del repositorio de origen del nuevo submódulo.
Puede ser una URL absoluta, o (si comienza con./
o ..../
), la ubicación relativa al repositorio remoto predeterminado del superproyecto
(Tenga en cuenta que para especificar un repositorio ''foo.git
'' que se encuentra justo al lado de un superproyecto ''bar.git
'', tendrá que usar ''../foo.git
'' en lugar de ''./foo.git
'' - como se podría esperar cuando se siguen las reglas para las URL relativas - porque la evaluación de las URL relativas en Git es idéntica a la de los directorios relativos).El control remoto predeterminado es el control remoto de la rama de seguimiento remoto de la rama actual.
Si no existe tal rama de seguimiento remoto o siHEAD
se desconecta, se asume que "origin
" es el control remoto predeterminado.
Si el superproyecto no tiene un control remoto predeterminado configurado, el superproyecto es su propio flujo ascendente autorizado y el actual. el directorio de trabajo se usa en su lugar.
Estoy tratando de agregar un submódulo a mi repositorio git, y recibo este error a cambio:
remote origin does not have a url defined in .git/config
alguna idea sobre lo que esto podría ser? Intenté buscar en Google, pero solo aparece un vínculo vago.
Estoy haciendo esto:
git submodule add ../extern/Lib1 lib
Estoy esperando que esto cree un submódulo lib/Lib1
Soy consciente de que esto solo creará una referencia y que luego tengo que actualizar / iniciar (no es claro en esta parte, no he llegado tan lejos, estoy aprendiendo el comando del submódulo).
Estaba intentando lo mismo, y encontré que lo siguiente ''parece haber funcionado:
Tengo (en Windows):
D:/phd/analyses /analysis1/ #This is an existing repository /analysis2/ #another existing repository /analysis3.tex /analysis4.tex ... /analysisN.tex
analysis1.tex ... analysisN.tex
contiene ideas en las que todavía no he trabajado (''stubs, say), y analysis1/
and analysis2/
son cosas en las que estoy trabajando (y de ahí tengo código, tex, ... en ellas) ) Una vez que empiece a trabajar en los otros análisis, se moverán a sus propias carpetas y, por lo tanto, a sus propios repositorios.
Lo que hice fue (en git bash en análisis):
git init
git add *.tex
git remote add self .
git submodule add self:/analysis2/.git analysis2
git submodule add self:/analysis5/.git analysis5
git commit -m "Initial commit"
Esto parece haber funcionado.
D:/phd/analyses/.git/config
parece que debería, y .gitmodules
parece a:
[submodule "analysis2"]
path = analysis2
url = self:analysis2/.git
[submodule "analysis5"]
path = analysis5
url = self:analysis5/.git
Un saludo, Simon Knapp
(He resumido la solución aquí. El crédito va a VonC).
En el repositorio que contiene (por ejemplo, que containing.git/
), git
interpreta las rutas relativas como relativas al origin
remoto, que no está definido. Queremos que sea relativo al directorio containing.git/
, así que ejecute
git remote add origin ..
(No estoy seguro de por qué es ..
lugar de ...)
Ahora puedes agregar el sub-módulo:
git submodule add ../extern/Lib1 lib