Manejo de un repositorio privado dependiente de repositorio publico
Published: 2021-12-13 22:54:42

A menudo  encontramos proyectos de código abierto que cumplen con las características para ser usados en nuestros propios proyectos. Pero cuando uno no tiene tanto expertiz con git esto puede ser un poco complejo(como lo fue para mi).


A continuación veremos  un proceso simple  en el cual tenemos un repositorio publico original y nos disponemos a usarlo como base para nuestro propio proyecto privado.

**Proyecto Publico**
Subi este pequeño proyectito  a un repositorio publico ,este  simulara ser nuestro proyecto OPEN SOURCE
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e3smb29hl7h22ou1gke0.png)

## 1.CLONADO DEL PROYECTO
Primero vamos a una carpeta y luego ejecutamos el famosos git clone, 

```
PS C:\Users\sergi\Desktop\estudios\momentaneo> git clone https://github.com/rayo80/remoto-prueba.git
PS C:\Users\sergi\Desktop\estudios\momentaneo> cd remoto-prueba
```
Podemos ver las ramas y los origenes remotos asociados(repositorio publico)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8k79cgb79wbdroujkqk4.png)

Aprovechamos y eliminamos el origen remoto (origin),esto lo hacemos para no confundirnos mas adelante.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mxftjpbctgyt02d1ynlr.png)

## 2.CREACION DEL REPOSITORIO COPIA
Ahora crearemos un repositorio copia.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0zvvt6xphgv83jukaor.png)

Veremos  las indicaciones de siempre 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/15svsudbcob4ve0m7xaw.png)

Aunque todavía no subimos ,este sera el repositorio donde guardaremos nuestro propio proyecto privado que nacio siendo un clon.

_Notas:
- Si usas la misma cuenta no tendrás problema pues las credenciales de github ya están en tu PC.
- Si usas otra cuenta de github tendrías que hacer un nuevo logueo, en mi caso como quería ahorrar tiempo lo que hice  fue agregar a la cuenta de mi pc como colaborador._

## 3.REALIZANDO CAMBIOS EN EL LOCAL 
Realizamos los cambios que queramos a nuestro clon ,yo agregare un archivo más y escribiré mas líneas en el archivo original.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qr6q8cwt4rn2z2w93ejk.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/34131ve38k0jypntna38.png)

## 4.SUBIENDO EL CLON  CON LOS CAMBIOS Al REPOSITORIO PRIVADO
EL clon ha sufrido cambios y se esta volviendo nuestro propio proyecto privado.
Primero agregamos un nuevo origen(este es el repo privado creado anteriormente), lo mejor es no usar  "origin" pues con este hicimos referencia al open source original, yo le pondre "clonigin"

```
git remote add clonigin https://github.com/rayito80/REPOCLON.git

```
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b7wm73mlu8o1astqdl6i.png)

hacemos un push

```
git push -u clonigin main 
```
Y listo podemos ver que se subieron los cambios a nuestro repo privado
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pc54qdqmbu39cd3jef80.png)

## 5.ACTUALIZANDO EL "OPENSOURCE"
Un proyecto de código abierto siempre esta actualizandose,resolviendo bugs,etc.
En mi caso le agregue una actualización un nuevo archivo.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bt0eetycshb4jbvrcg7e.png)
Suponiendo que estos cambios  también son útiles para nuestra aplicación privada clonada. Como los traemos a nuestra aplicación?

## 6.ACTUALIZANDO NUESTRO CLON PRIVADO

Para esto tenemos que volver a agregar el origen remoto del repositorio publico y usar los comando fetch y luego merge.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w7rosretefww4h5bz2bm.png)

Realizamos un _fetch_ del origin.Esto solo bajara los cambios del repo publico 
 
```
git fetch origin
```
 ![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4mi26bkw0mm8rjjozfqm.png)

Ahora lo que sigue es combinar esos cambios con nuestro proyecto actual local(nuestro main como lo indica la rama en verde).
Para esto  usamos _merge_,indicamos origin/main pues este es el repo desde donde se estan trayendo los cambios que se agregaran a nuestro main.

```
git merge origin/main
```
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/srsvv2dpwkebdvcp2slf.png)
 
Podemos observar que justo al mandar el comando se agrega la actualización del repositorio publico
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4gzy68xszhzle1qknsa6.png)
 
 

## 7.SUBIENDO LOS NUEVOS CAMBIOS A NUESTRO PROYECTO CLON PRIVADO

Este seria el último paso ,ahora que agregamos la actualización solo nos queda enviar los cambios a nuestro repositorio privado.

```
git push clonigin main
```
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gz2rwlu8jtyazmov9sxp.png)

Finalmente podemos eliminar de vuelta el remoto "origin" para no tener confusiones.

> Esquema 
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/85wbru4ov8e6fow5b9gj.png)