¿Cómo puedo crear una rama maestra en un repositorio Git desnudo?
(Todo hecho en poshgit en Windows 8):
git init --bare test-repo.git
cd test-repo.git
(La carpeta se crea con archivos y carpetas git-ish dentro)
git status
Fatal: Esta operación debe ejecutarse en un árbol de trabajo (Está bien, así que no puedo usar git status con un repositorio desnudo; tiene sentido, supongo)
git branch
(Nada, parece que el repositorio desnudo no contiene ninguna rama. ¿Tengo que añadirlos desde un repositorio clonado?)
cd ..
mkdir test-clone
cd test-clone
git clone ../test-repo.git
(Recibo una advertencia sobre clonar un repositorio vacío)
cd test-repo
(El prompt cambios para indicar que estoy en la rama master)
git branch
(No muestra resultados-eh?)
git branch master
Fatal: No es un nombre de objeto válido:'master'
Um. Entonces, ¿cómo puedo crear la rama maestra en mi repositorio desnudo?
4 answers
Un repositorio desnudo es bastante algo que sólo empujar y obtener. No puedes hacer mucho directamente "en él": no puedes revisar cosas, crear referencias (ramas, etiquetas), ejecutar git status
, etc.
Si quieres crear una nueva rama en un repositorio Git desnudo, puedes enviar una rama desde un clon a tu repositorio desnudo:
# initialize your bare repo
$ git init --bare test-repo.git
# clone it and cd to the clone's root directory
$ git clone test-repo.git/ test-clone
Cloning into 'test-clone'...
warning: You appear to have cloned an empty repository.
done.
$ cd test-clone
# make an initial commit in the clone
$ touch README.md
$ git add .
$ git commit -m "add README"
[master (root-commit) 65aab0e] add README
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
# push to origin (i.e. your bare repo)
$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 219 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /Users/jubobs/test-repo.git/
* [new branch] master -> master
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-09 22:48:18
Una rama es solo una referencia a un commit. Hasta que no confirmas nada en el repositorio, no tienes ninguna rama. Puede ver esto en un repositorio no desnudo también.
$ mkdir repo
$ cd repo
$ git init
Initialized empty Git repository in /home/me/repo/.git/
$ git branch
$ touch foo
$ git add foo
$ git commit -m "new file"
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 foo
$ git branch
* master
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-24 16:20:30
No hay necesidad de un segundo repositorio. Podemos suministrar un directorio ficticio usando la opción --work-tree
y comandos como checkout
y commit
comienzan a funcionar incluso en un repositorio desnudo. Preparar un directorio ficticio:
$ rm -rf /tmp/empty_directory
$ mkdir /tmp/empty_directory
Y ahí lo tienes:
$ cd test-repo.git # your fresh bare repository
$ git --work-tree=/tmp/empty_directory checkout --orphan master
Switched to a new branch 'master' <--- abort if "master" already exists
$ git --work-tree=/tmp/empty_directory commit --allow-empty -m "empty repo"
$ git branch
* master
$ rmdir /tmp/empty_directory
Probado en vanilla git 1.9.1. No he verificado si posh-git admite --allow-empty
hacer una confirmación sin ningún cambio en el archivo (una confirmación solo para mensajes).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-13 08:22:26
Por defecto no habrá ramas listadas y aparece solo después de colocar algún archivo. No tienes que preocuparte mucho por eso. Simplemente ejecute todos sus comandos como crear estructuras de carpetas, agregar / eliminar archivos, confirmar archivos, enviarlos al servidor o crear ramas. Funciona a la perfección sin ningún problema.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-01 13:06:04