¿Cómo agregar un repositorio git como un submódulo de sí mismo? (O: ¿Cómo generar páginas de GitHub mediante programación?)

Quiero comenzar a usarGitHub Pages para el sitio web de mi proyecto. Esto simplemente requiere una rama (subárbol) llamadagh-pages en el repositorio, y sirve su contenido. El problema es que parte del sitio web (manual, registro de cambios, página de descarga ...) es generado automáticamente por el sistema de compilación, por lo que quiero encontrar la mejor manera de confirmar estos cambios engh-pages branch mientras que el repositorio principal permanece enmaster (o donde sea).

Para comprometerse con elgh-pages branch, podría escribir una secuencia de comandos que clone el repositorio en un directorio temporal, realice las modificaciones, las confirme y luego las devuelva al repositorio principal. Pero esto suena como un proceso propenso a errores, así que espero que haya una manera más fácil.

n amigo sugirió que podría agregar elgh-pages branch como submódulo al repositorio principal. Hice un pequeño experimento, pero no funciona del todo:

$ git init main
Initialized empty Git repository in /tmp/main/.git/
$ cd main
$ touch main.txt
$ git add .
$ git commit -m'Initial commit in main branch.'
[master (root-commit) 1c52a4e] Initial commit in main branch.
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 main.txt
$ git symbolic-ref HEAD refs/heads/gh-pages
$ rm .git/index
$ git clean -fdx
Removing main.txt
$ touch index.html
$ git add .
$ git commit -m'Initial commit in website branch.'
[gh-pages (root-commit) 94b10f2] Initial commit in website branch.
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 index.html
$ git checkout master
Switched to branch 'master'
$ git submodule add -b gh-pages . gh-pages
repo URL: '.' must be absolute or begin with ./|../
$ git submodule add -b gh-pages ./ gh-pages
remote (origin) does not have a url defined in .git/config

Soy nuevo en submódulos; He leído un poco, por supuesto, pero no entiendo este comportamiento. ¿Por qué necesita unaorigin remoto? Idealmente, quiero que el submódulo siempre haga referencia al repositorio en el que reside, por lo que no debería hacer referencia aorigin o cualquier otro control remoto. Si alguien clona el repositorio y ejecutagit submodule init ; git submodule update, idealmente debería extraerse del repositorio recién clonado.

¿Es posible agregar un repositorio como un submódulo de sí mismo? ¿Es deseable? ¿Hay alguna dificultad que deba tener en cuenta? ¿Hay una mejor manera de lograr lo que quiero?

Respuestas a la pregunta(2)

Su respuesta a la pregunta