Iniciando un Repositorio Git
Autenticación SSH en Git
Antes de comenzar a hablar de git, crea una cuenta en gitlab o en github y vincula una llave ssh para no tener que estar digitando usuario y contraseña todo el tiempo, porque es molesto.
ssh-keygen -b 2048 -t rsa
Este comando genera dos llaves, una pública (id_rsa.pub) y una privada (id_rsa) que quedan en tu directorio de usuario en la carpeta .ssh. Piensa que la pública es la cerradura y la privada es la llave. Solo tú puedes tener la llave pero puedes instalar la cerradura en cualquier lugar.
Copia el contenido de la llave pública al lugar indicado abajo

Ejemplo de url para autenticación estándar
https://gitlab.com/davidpuziol/teste.git
Ejemplo de url para autenticación con ssh
[email protected]:davidpuziol/teste.git
Comando Init
Siempre que tengamos una carpeta/proyecto dentro tendremos un archivo oculto de control de git llamado .git. Una carpeta que no tiene ese archivo no está siendo controlada por git. Para eso es necesario el comando dentro de la carpeta.
Generalmente puedes ir al repositorio y crear un proyecto y después clonarlo y el .git ya estará vinculado al repositorio. Voy a crear el proyecto mirepo y clonarlo usando ssh y mostrar el .git

❯ git clone [email protected]:davidpuziol/meurepo.git
Cloning into 'meurepo'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
❯ cd meurepo
❯ ls -lha
total 20K
drwxrwxr-x 3 david david 4,0K jun 25 07:22 .
drwxrwxr-x 11 david david 4,0K jun 25 07:05 ..
drwxrwxr-x 8 david david 4,0K jun 25 07:22 .git
-rw-rw-r-- 1 david david 6,1K jun 25 07:22 README.md
❯ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
# observa que el origin ya vino configurado y fetch también
[remote "origin"]
# mira que la url que utilizamos aquí no comienza con http, entonces estará usando la llave ssh para autenticación
url = [email protected]:davidpuziol/meurepo.git
fetch = +refs/heads/*:refs/remotes/origin/*
# también ya vino definida una branch llamada main
[branch "main"]
remote = origin
merge = refs/heads/main
pero vamos a hacer esto de forma manual, creando un proyecto en la propia máquina y después creando un repo y vinculando un proyecto ya existente a un repo nuevo.
El comando git init crea por defecto la branch (ramificación) llamada master, pero hoy en día se usa main, entonces podemos cambiar eso inicialmente pasando el nombre de la branch
❯ mkdir teste
❯ cd teste
# ya estoy creando definiendo el nombre de la branch como main
❯ git init -b main
Repositorio vacío Git inicializado en /home/david/projects/pessoais/teste/.git/
❯ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
Vamos ahora a imaginar que ya hicimos algo, solo para entender mejor. No necesitas entender todos los comandos ahora.
# creamos 3 archivos en la branch por defecto (main)
touch archivo1 archivo2 archivo3
git add .
git commit -m "first init"
# creamos una nueva branch develop basada en la por defecto en la que estamos
git branch develop
# cambiamos a la branch develop
git checkout develop
# creamos un archivo más y lo agregamos
touch archivo4
git add .
git commit -m "add archivo4"
ahora tenemos 2 branches, una main con 3 archivos y una develop con 4 archivos.
vamos a vincular esto a un repositorio. crea un repo.
ahora vamos a agregar las configuraciones
# agregando el origen del repo
❯ git remote add origin [email protected]:davidpuziol/teste.git
# Si creaste la master en lugar de main y en tu repo tiene main, necesitas mover master a main
❯ git branch -M main
# Si creaste un repo con un archivo README.md por ejemplo necesitas traerlo y hacer un rebase de tu branch main local con la branch main del repo. Tu branch main no tiene los archivos que ya están en la branch main del repositorio.
❯ git pull origin main --rebase
From gitlab.com:davidpuziol/teste
* branch main -> FETCH_HEAD
Successfully rebased and updated refs/heads/main.
# Ahora vamos a subir la main local a la main del repo
❯ git push origin main
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 12 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 483 bytes | 483.00 KiB/s, done.
Total 5 (delta 1), reused 0 (delta 0), pack-reused 0
To gitlab.com:davidpuziol/teste.git
54fdd8a..f2d4649 main -> main
Recordando que subiste solo main local, aún falta develop
# para pasar a la branch develop y subiéndola también al repositorio
git checkout develop
git push origin develop
Verificando...

Siempre que das un push y un pull no sabe a qué branch te estás refiriendo, por eso se usa origin. En config es posible definir la branch por defecto.