Skip to content

Instantly share code, notes, and snippets.

@FarDust
Created May 16, 2021 01:55
Show Gist options
  • Save FarDust/1763f3af543ec0d4850be42e6fedc56f to your computer and use it in GitHub Desktop.
Save FarDust/1763f3af543ec0d4850be42e6fedc56f to your computer and use it in GitHub Desktop.
Una guia para manejar historia en git

Guiá de manejo de historia de GIT

Instalar git

git es un sistema de control de versiones, te ayuda a tener todo cambio bien registrado y archivado 📝

Windows

Para poder instalarlo en windows tenemos varias opciones

  • Instalarlo de la pagina oficial: ir a git ⤤

  • Utilizar un manejador de paquetes 📦 que lo instale por ti.

    • Un manejador conocido para esta tarea es Scoop ⤤, que funciona por consola 💻. Para instalarlo debes utilizar los siguientes comandos en Powershell (la consola de windows):
      • Permite programas de terceros 🙋 en tu ambiente $ Set-ExecutionPolicy RemoteSigned -scope CurrentUser
      • Instala Scoop $ iwr -useb get.scoop.sh | iex
      • Reinicia tus variables de entorno cerrando la consola actual ✖️ y abriendo una nueva.
    • Pidele a Scoop que instale git ⤤ por ti 🚤 : $ scoop install git

Linux

Es linux ya sabe como ayudarte ✨

  • Actualiza tus repositorios de paquetes: $ sudo apt-get update
  • Pídele a linux que instale git ⤤ $ sudo apt-get install git-all

Copia exacta de un repositorio a otro

Fuente GitHub

Esta herramienta es muy util cuando tienes un repositorio de template 👥 y quieres conservar el trabajo de los demas 👷 en tu historia del repositorio. En especial cuando migras repositorios de servicios de git diferentes 🤯 (github no es el unico)

  • Crea una copia del trabajo que necesitas para construir tu imperio: $ git clone --bare https://github.com/exampleuser/old-repository.git
    • Nota: siempre puedes copiar un repositorio local ya clonado, cambiando la url por un lugar en tu disco duro 📲

  • Muévete a el repositorio a duplicar 📁 $ cd old-repository.git
    • Fijate como este directorio terminas con .git, es toda la historia de ese repositorio 🙀
  • Mueve el repositorio antiguo a su destino 🚚 $ git push --mirror https://github.com/exampleuser/new-repository.git
    • ❗❗ Recuerda que el destino podría ser tu pc
    • ⚠️ Esto sobreescribira el repositorio de destino

Copiar la historia de un repositorio en otro

Fuente: Stack Overflow

Esta herramienta te permite juntar varios repositorios en uno solo sin perder los cambios que con tanto esfuerzo 🏗️ se mantienen en el control de versiones.

El funcionamiento básico de esta operación es obligar a git a juntar historias sin relación alguna 🔛. Por lo cual debes asegurarte que los archivos no se repitan en las ubicaciones claves ⚠️.

Porque uno haría esto

Primero debemos tener dos o más repositorios que queremos juntar en un solo, a diferencia del caso anterior no queremos perder los datos de los contribuidores de los repositorios.

my-app/
├─ src/
│  ├─ index.css
│  ├─ index.js
├─ .gitignore '@juanito: "docs: ignore macos garbage"'
├─ package.json '@esteban: "build: remove old dependencies"'
├─ README.md

awesome-latex-template/
├─ src/
│  ├─ main.tex  '@agustín: "build: update template to lua latex"'
├─ .gitignore
├─ README.md  '@gabriel: "docs: add very important emojis"'

Si usáramos una copia común pasaría lo siguiente con nuestro nuevo repositorio 🔥

my-app/
├─ src/
│  ├─ index.css
│  ├─ index.js
├─ .gitignore '@juanito: "docs: ignore macos garbage"'
├─ package.json '@esteban: "build: remove old dependencies"'
├─awesome-latex-template/
│  ├─ src/
│  │  ├─ main.tex  '@juanito: "fix: fail to revert to normal latex :c, i dont know how"'
│  ├─ .gitignore
│  ├─ README.md  '@juanito: "copy template with standard boring commit"'
├─ README.md

Manos a la acción

Primeros pasos

Primero debemos dejar en el repositorio de origen todo arreglado 🧹 para mudar a nuestros archivos al destino. Lo mas recomendable es dejar previamente todo en un directorio en la posición que quieres para el futuro.

awesome-latex-template/
├─ templates/
│ ├─awesome-latex-template
│ │ ├─ src/
│ │ │  ├─ main.tex  '@agustín: "build: update template to lua latex"'
│ │ ├─ .gitignore
│ │ ├─ README.md  '@gabriel: "docs: add very important emojis"'

En el ejemplo de arriba se dejan todos los archivos que estaban en root awesome-latex-template/ del repositorio en un sub-directorio en la carpeta awesome-latex-template/templates/awesome-latex-template/

Luego debes realizar un commit de que moviste los archivos a un nuevo directorio

  • Primero los agregas al area de staging con $ git add templates/
  • Luego indicas tus cambios 📝 $ git commit -m "style: move awesome-latex-template code to template folder"
  • Finalmente enviás tus cambios 🚚 $ git push

Con esto obtendrás un directorio de origen listo para combinar

Combinar repositorios

  • Primero debes dirigirte al repositorio de destino con $ cd awesome-latex-template
  • Crea una rama que reciba los cambios $ git checkout new-template
  • Agregamos nuestro repositorio de origen con el comando $ git remote add template-origin https://github.com/exampleuser/new-repository.git
  • Dentro del repositorio descargamos toda información del repositorio 🌎 usando $ git fetch template-origin
  • Combinamos nuestro trabajo con git merge template-origin/<branch> --allow-unrelated-histories
    • Idealmente <branch> va a ser main pero podría ser cualquier rama.
    • --allow-unrelated-histories es el que nos permite mezclar estas dos ramas, por eso hay que preparar el origen con anterioridad.
  • Si queremos eliminar toda referencia al otro repositorio lo eliminamos git remote rm template-origin

Creado por @FarDust (Gabriel Faundez)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment