¿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?

Author: jubobs, 2014-12-24

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
 40
Author: jubobs,
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
 8
Author: chepner,
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).

 3
Author: kubanczyk,
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.

Https://git-scm.com/docs

 0
Author: Shivraaz,
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