origin - ¿Cómo creo una rama maestra en un repositorio Git simple?
git push example (4)
(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 el estado de git con un repositorio simple; creo que tiene sentido)
git branch
(Nada, parece que el repositorio simple no contiene ninguna rama. ¿Tengo que agregarlos desde un repositorio clonado?)
cd ..
mkdir test-clone
cd test-clone
git clone ../test-repo.git
(Recibo una advertencia sobre la clonación de un repositorio vacío)
cd test-repo
(La solicitud cambia para indicar que estoy en la rama maestra)
git branch
(No muestra resultados - ¿eh?)
git branch master
fatal: no es un nombre de objeto válido: ''maestro''
Um Entonces, ¿cómo creo la rama maestra en mi repositorio desnudo?
De manera predeterminada, no habrá ramas enumeradas y aparecerá 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, comprometer archivos, enviarlos al servidor o crear sucursales. Funciona a la perfección sin ningún problema.
No es necesario un segundo repositorio. Podemos suministrar un directorio ficticio utilizando la opción --work-tree
y comandos como checkout
y commit
start para que funcionen incluso en un repositorio simple. Preparar un directorio ficticio:
$ rm -rf /tmp/empty_directory
$ mkdir /tmp/empty_directory
Y ahí van:
$ 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 vainilla git 1.9.1. No verifiqué si posh-git es compatible con --allow-empty
para realizar una confirmación sin ningún cambio de archivo (una confirmación de solo mensaje).
Un repositorio simple es casi algo que solo presionas para obtener. No puede hacer mucho directamente "en él": no puede verificar cosas, crear referencias (sucursales, etiquetas), ejecutar el git status
, etc.
Si desea crear una nueva rama en un repositorio de Git simple, puede insertar una rama de un clon a su repositorio simple:
# 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
Una rama es solo una referencia a un commit. Hasta que no confíes nada en el repositorio, no tienes sucursales. Puedes 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