manejar proyectos con gitlab (subir proyectos y sincronizarlos)








 Pasos para crear tu cuenta gitlab y subir tu proyecto




  • al llenar tus datos de registro te enviaran un email de confirmación a tu correo electrónico






  •  al presionar click en el enlace de confirmación te llevara a la siguiente pagina, y presionas el botón de New Proyect





  • proyect path: va el nombre de nuestro proyecto no puede tener espacios
  • description: una breve explicación de lo que realiza nuestro proyecto
  • visibillity level: son los distintos niveles de visibilidad de tu proyecto y acceso a el para descarga
  •  Inserta todos tus datos y Presionas Create Proyecto





  •  ok, ya creamos nuestro proyecto en gitlab, ahora hay un detalle, que no tenemos una llave ssh en nuestro gitlab por eso hay un mensaje que nos pide agregar una ssh key, bueno presionamos en add an SSH Key










  • ahora es necesario que abran un terminal en su Gnu/linux y ejecuten los siguiente:  ssh-keygen
  • Terminal:
    ssh-keygen
     
  • te preguntara si quieres registrar en la ruta /home/TU_USUARIO/.ssh/
  • Te pedirá que introduzca una clave (esta clave la usaras para conectarte)
  • te emitirá un mensaje que logro crear la llave y la ruta donde esta creada /home/TU_USUARIO/.ssh/


    ahora para obtener la key(llave) esta es la forma mas facil:

    Terminal:
    sudo apt-get install xclip


    Terminal:
     xclip -sel clip < ~/.ssh/id_rsa.pub

    o
    Terminal:
    cat ~/.ssh/id_rsa.pub

    y con eso ya tienes en tu portapapeles la información de tu llave solo de pegar en el gitlab



  •  buscas con el file manager de tu Gnu/linux en /home/TU_USUARIO/.ssh/



  • Coloca un titulo de referencia en Title
  • ahora copia lo que contiene tu archivo id_rsa.pub  en el campo Key





  • listo ya agregamos correctamente la key





  •  ahora es necesario instalar el paquete git y para eso debes abrir una consola y ejecutar los siguiente
    Terminal:
    sudo apt-get install git

      te preguntara si deseas continuar la instalación y presiones que S
  • luego que finalice la instalación vamos a ejecutar los siguientes comandos de gitlab
  • OJO ESTE ES MI GITLAB USTEDES TIENEN OTRO USUARIO Y EMAIL
Terminal:
  git config --global user.name "zcqopx"
Terminal:
 git config --global user.email "zcqopx@gmail.com"
        luego
  • Create a new repository
Terminal:
git clone git@gitlab.com:zcqopx/pruebaparablogger.git
          

  • el comando anterior nos sincroniza con el proyecto gitlab creado.


  • Entras en la carpeta del proyecto       
Terminal:
cd pruebaparablogger
  • Creas el archivo README.md          
Terminal:
touch README.md
  •  listas los archivos para verificar que se crearon
Terminal:
ls


  • ahora aunque no es necesario que lo hagas yo cree 2 archivos estilos.css y jquery.js para que vean como agregar mas archivos aparte del README.md al gitlab
  • lista los archivos dentro de la carpeta
Terminal:
ls

  •   se agregan a la cola de subida o archivos a sincronizar con gitlab
Terminal:
git add README.md

Terminal:
git add estilos.css

Terminal:
git add query.js
                si quieres añadirlos todos con un solo comando usa:
Terminal:
git add --all
        

  •  aplico los cambios en el README de los archivos a subir o sincronizar       
Terminal:
git commit -m "add README"

  •      Subir Sincronizar los archivos en gitlab pedira la clave ssh que escribiste  cuando ejecutaste el ssh-keygen ahora para realizar la acción de subida y sincronización con gitlab ejecutar:
Terminal:
git push -u origin master


  • ve a Proyect selecciona tu proyecto y en la opción de file podrás visualizar tus proyectos 





















CREAR RAMAS

  •  Hay 2 cosas muy importante que debes tener en cuenta
  • Branch (Ramas) ramas de desarrollo
    Cada repositorio tendrá al menos 2 branches (Ventajas de usar un branch develop):

    master <- Versiones que fueron testeadas y tienen un tag asignado.
    develop <- Modificaciones en progreso, el contenido de esta rama puede no funcionar.

    Luego opcionalmente pueden existir los siguientes branch:

    • feature-* <- Características especiales, por ejemplo 'feature-soporte_efi'
    • hotfix-* <- Corrección de bugs, por ejemplo 'hotfix-segfaul_al_abrir'
    • release-* <- Últimos comits antes de crear un tag

  •  Crear branch develop y posicionarse en ese branch:
Terminal:
git checkout -b develop
Terminal:
git checkout develop
Terminal:
git add --all
Terminal:
git commit -m "original"
Terminal:
git push -u origin develop # El -u solo es necesario en el primer push
          si quieres eliminar el branch creado usa
Terminal:
git push origin --delete develop


  • Con los comandos anteriores ya tendras sincronizados tu archivos en el branch (rama) develop
  • ahora para agregar todos los archivos modificados y sincronizarlos al repositorio

    Terminal:
    git add --all
    Terminal:
    git commit -m "prueba blogger"
    Terminal:
    git push origin develop

  • de igual forma lo puedes hacer con master pero es mas recomendable subir siempre en develop y a master cuando sepas que ya esta bien testeado

















  • si deseas sincronizar en otra computadora por ssh-key


    #creas la ssh-key la agregas como en los pasos anteriores y ejecutas los comandos

    Terminal:
    git config --global user.name "zcqopx"
    Terminal:
    git config --global user.email "zcqopx@gmail.com"
    Terminal:
    git clone git@gitlab.com:zcqopx/pruebaparablogger.git
    #entramos en la carpeta del proyecto antes creado
    Terminal:
    cd existing_folder 
    Terminal:
    git init #inicializamos git
    #añadimos el repo
    Terminal:
    git remote add origin git@gitlab.com:zcqopx/pruebaparablogger.git 
    ahora sincronizamos el repo remoto con el local
    Terminal:
    git fetch
    #o puede seleccionar directamete el branch
    Terminal:
    git fetch origin test

    #al final nos mostra lo siguiente
  • * [new branch]      develop    -> origin/develop
     * [new branch]      master     -> origin/master
     * [new branch]      test       -> origin/test

    y seleccionamos el que deseamos sincronizar
    ejemplo
Terminal:
 git checkout test


  • SUBIR ARCHIVOS EN UN PROYECTO YA CREADO


    logearnos en la configuracion local de nuestra pc

    Terminal:
     git config --global user.name "zcqopx"
    Terminal:
    git config --global user.email "zcqopx@gmail.com"
     OJO ESTE ES MI GITLAB USTEDES TIENEN OTRO USUARIO Y EMAIL
    #entramos en la carpeta del proyecto antes creado

    OJO es importante tener en cuenta que vamos primero a obtener todos los archivos remotos si hay archivos modificados en el folder que crearemos a continuacion se perderarn, añadirlos despues del paso de checkout
    Terminal:
    cd existing_folder
    #inicializamos git
    Terminal:
    git init
    #añadimos el repo
    Terminal:
    git remote add origin git@gitlab.com:zcqopx/pruebaparablogger.git
    #hacemos pull repo
    Terminal:
    git pull origin 
    #sincronizamos con nuestros repo en la rama (branch) develop
    Terminal:
    git fetch origin develop
    #sincronizamos con nuestros repo en la rama (branch) develop
    Terminal:
    git checkout -f develop

    AHORA SI PUEDEN AÑADIR LOS ARCHIVOS MODIFICADOS PARA SUBIR AL REPO SINCRONIZADO
    #añadimos todos los archivos dentro
    Terminal:
    git add --all
    #realizamos un commit(explicación de la subida o cambios en el repo)
    Terminal:
    git commit -m "desarrollador cirel ramos"
    #subir los archivos en el repo con la rama develop
    Terminal:
    git push origin develop


COMPARAR  ARCHIVOS DE UN PROYECTO LOCAL CON EL REMOTO EN GIT 


Terminal:
git diff



 DESCARGAR UN REPO ACTUALIZAR UNA RAMA

ten en cuenta que esto es para un directorio sin archivos comenzando con


Terminal:
git init
Terminal:
git remote add origin git@gitlab:tuproyecto

la idea final de esto es que de repente tienes tu archivos en otra carpeta ya bien modificados pero quieres subirlos sin dañar el trabajo de otros o el tuyo mismo, creas una nueva carpeta te bajas el repo y realizas los pasos para subirlo como se debe.

podemos realizar un git pull general y nos descargara todas las ramas(branchs) del repositorio

Terminal:
git pull
o seleccionar una en particular
Terminal:
git pull develop
ahora realizamos fetch de la rama o general
Terminal:
git fetch origin develop
y con el checkout verificamos los archivos locales y los mostramos
Terminal:
git checkout develop

ahora si añadimos los archivos modificados y luego procedemos a ejecutar los pasos para la subida empezando por el siguiente
Terminal:
git add -u
ó
Terminal:
git add --all
Terminal:
git commit -m "fetch: inicio subida"
Terminal:
git push origin develop
listo con eso deberia tener tu repo actualizado


REALIZAR UN MERGE DE UNA RAMA
Terminal:
git checkout master
Terminal:
git pull origin master
Terminal:
git merge test
ó  para forzar al merge a remplazar todo sin resolver conflictos
Terminal:
git merge -s ours
Terminal:
git push origin master



SI QUIERES RESTAURAR LOS ARCHIVOS DEL REPO SOBRE LOS LOCALES

Terminal:
git fetch origin master
Terminal:
git reset --hard origin/master


SI QUIERES RESTAURAR ARCHIVOS ESPECIFICOS

restaurar a un commit especifico
Terminal:
git checkout 9b059ae routes/web.php


restaurar a un commit especifico
Terminal:
git checkout origin/Feature-T11-add-filter-product routes/web.php




SI QUIERES MIGRAR DE UNA RAMA A OTRA SIN REALIZAR MERGE, de master a develop

Terminal:
git branch -f develop master 
Terminal:
git push origin master:develop



REALIZAR UN MERGE CUANDO: “Already up-to-date”  

personalmente prefiero borrar la carpeta donde tengo el repo en mi pc y luego realizar el merge
Terminal:
git init
Terminal:
git remote add origin git@gitlab.com:root/tu-repo
Terminal:
git pull origin master
Terminal:
git checkout master
Terminal:
git pull origin el-repo-que-quieres-merge
Terminal:
git mergetool


Nota: te recomiendo instalar meld  es un excelente gestor para comprar entre los archivos del merge


Terminal:
find -iname "*.orig*" -delete
Terminal:
git checkout  el-repo-que-quieres-merge
Terminal:
git merge master
Terminal:
git commit
Terminal:
git push origin el-repo-que-quieres-merge




BORRAR COMMITS REMOTOS
personalmente prefiero borrar la carpeta donde tengo el repo en mi pc y luego realizar el merge
listar los commits
Terminal:
git log --decorate --pretty=format:"%ad %h by %an, %s" --date=iso | sort -r | less
reiniciar localmente el repo al commit en especifico
Terminal:
git reset --hard HEAD~%number%
aplicar los cambios
Terminal:
git push origin %rama% -f



FORZAR UN GIT PULL
Ver los Commits es posible que tu local este desactualizado master
Terminal:
git log --decorate --pretty=format:"%ad %h by %an, %s" --date=iso | sort -r | less
reiniciar localmente el repo al commit en especifico
Terminal:
git reset --hard HEAD
bajar los cambios a los directorios origin del .git
Terminal:
git pull origin
ahora hacer reset en base al master actualizado remoto que seria origin
Terminal:
git reset --hard origin/master 
para que todo sea de forma original, hacemos el git pull normal
Terminal:
git pull origin master




Si el .gitignore no funciona
Terminal:
git rm . -r --cached
Terminal:
git add .
Terminal:
git commit -m "fixed untracked files"
Terminal:
git push origin master


verificar si hay un repositorio 

Terminal:
git remote -v 

Verificar la rama donde estas o el commit

Terminal:
git show --name-status
Terminal:
git show --name-status <commit>

Mostrar los commit y elementos añadidos en cada commit

Terminal:
git show --stat --oneline

o

Terminal:
git log --stat --oneline


Limpiar archivos basura o sin limpiar

Terminal:
git clean -f
Visualizar archivos a Limpiar

Terminal:
git clean -n -f
Limpiar Archivos

comandos utiles

Terminal:
git commit --amend
reescribir el ultimo comit

Terminal:
git add -p
agregar por pedazos o partes codigo al commit

Terminal:
git rebase -i
ordenar o depurar commits


 Mostrar Diferencias entre ramas

primero chequeamos las ramas locales y remotas que tenemos
Terminal:
git branch -a

luego seleccionamos la rama local o remota a comparar seguido por  2 puntos entre cada una ejemplo

Version Consolax

Terminal:
git diff master..develop

Version Grafica
Terminal:
git difftool master..remotes/origin/desarrollo

para cambiar la herramienta de comparacion
Terminal:
git difftool --tool-help





Realizar un Merge

ejemplo quiero hacer merge con master y mi rama modificada es develop
Terminal:
git checkout master

Terminal:
git pull origin master

ahora tenemos bien actualizado master, procedemos hacer merge

cambiamos a la rama develop
Terminal:
git checkout develop

Sincronizamos con master
Terminal:
git pull origin master
te pedira que confirmes el commit o que resuelvas los conflictos y luego hacer pust
Terminal:
git push origin develop


Configurar para copiar commits a otro repo
Terminal:
git remote add cirelramos git@gitlab.com:cirelramos/blog-production

Terminal:
git push -u cirelramos --all

Terminal:
git push -u cirelramos --tags

borrar ramas locales 
Terminal:
git branch | grep -v "master" | xargs git branch -d

BORRAR RAMAS REMOTAS
IMPORTANTE LO QUE ESTA MARCADO EN AZUL SON LAS RAMAS QUE VA A EXCEPTUAR DE LA ELIMINACION
Terminal:
git checkout -f master && git branch -r | grep -v -e master -e stable -e upload-version-laravel-to-7 | cut -d '/' -f2- | xargs  git push origin --delete


Comparar cambios de una rama en otra.

tendremos 3 ramas presentes: rama_cambios_nuevos, rama_de_comparacion, master.
partiendo de la premisa que ya tenemos modificaciones en rama_cambios_nuevos

Terminal:
git checkout master
Terminal:
git checkout -b rama_de_comparacion
Terminal:
git checkout rama_cambios_nuevos ./ -f
Terminal:
 git restore --staged ./
Terminal:
 git status | grep "modified:" | cut -d ":" -f2 |  xargs grep -L "string_not_exist_in_files"




borrar commits de una rama, supongamos que el commit hasta donde queremos restaurar es c26fbb30

ejecutamos los siguientes comandos en la rama, en este caso seria test 


Terminal:
git checkout test -f
Terminal:
git pull origin test
Terminal:
git reset --soft c26fbb30
Terminal:
git push origin test -f
los commits posteriores a estaran eliminados del historico del repositorio.

Fuente: https://drive.google.com/file/d/0B-2FDrPc5MapN2Y5cU9QX2lhMGs/view?usp=sharing

Fuente: https://www.atlassian.com/git/tutorials/syncing/git-push

10 comentarios :

  1. Detallado, claro y fácil... mil gracias!!

    ResponderEliminar
  2. Muy resumido, por lo que es breve, claro y conciso. Gracias.

    ResponderEliminar
  3. Buenisimo aporte, de principio a fin... Gracias

    ResponderEliminar
  4. Imposible de instalar. No funciona. La explicación no es nada clara.

    ResponderEliminar
  5. y como hago eso sin tanto comando, como elimino y agrego ficheros a mi proyecto?

    ResponderEliminar
    Respuestas
    1. es sencillo humberto, solo necesitas modificar los archivos en tu directorio actual luego con el comando "git add --all" se agregan todos los cambios detectados(sea agregar, editar, eliminar el contenido), posterior realizas el "git commit -m 'cambios realizados' " que es una descripcion de la version que subiras a continuacion y con el "git push origin master" subes los cambios al servidor


      tambien hay interfaces en windows bien completas que te facilitan bastante el manejo de los repositorios, suerte y que encuentres algo mas facil jeje

      Eliminar
  6. https://tortoisegit.org/download/

    ResponderEliminar