GitHub es una plataforma de desarrollo colaborativo para alojar proyectos utilizando el sistema de control de versiones Git. Se utiliza principalmente para la creación de código fuente de programas de ordenador. El software que opera GitHub fue escrito en Ruby on Rails. Desde enero de 2010, GitHub opera bajo el nombre de GitHub, Inc. Anteriormente era conocida como Logical Awesome LLC. El código de los proyectos alojados en GitHub se almacena típicamente de forma pública.
El 4 de junio de 2018 Microsoft compró GitHub por la cantidad de 7500 millones de dólares, al inicio el cambio de propietario generó preocupaciones y la salida de algunos proyectos de este repositorio, sin embargo no fueron representativos. GitHub continúa siendo la plataforma más importante de colaboración para proyectos Open Source
Para crear un proyecto desde Github hay al menos dos formas de hacerlo
- Desde el propio site de Gitub
- Desde linea de comandos
Crear un proyecto desde la web de github
Creamos un nuevo repositorio en https://github.com. Le damos nombre, descripción, seleccionamos si va a ser un proyecto publico o privado si es el caso, y dejamos el check de crear README sin marcar. Le damos a crear repositorio y con esto ya tenemos el repositorio donde alojaremos nuestro proyecto.
Crear un proyecto desde la terminal del equipo donde esta el proyecto que queremos subir a github
Nos vamos a la carpeta del proyecto y ejecutamos estos comandos.
git init git add . git commit -m "first commit" git remote add origin https://github.com/NOMBRE_USUARIO/NOMBRE_PROYECTO.git git push -u origin master
Trucos
para eliminar ficheros al hacer push en vez degit add . usar git add -u |
para deshacer un git add . git reset si seguido de git commit ... git reset HEAD~ |
para deshacer varios commit locales que no han sido pushedados:git reset --hard <codigo del commit> para obtener el codigo hacer: git log para salir del log pulsa q |
ERRORES
Ese error que te arroja se refiere a que tu rama remota -alojada en github- posee contenido que tu rama local no contiene.
Si quieres ir un paso más allá y no deseas que se cree ese commit merge automático, existe un método parecido que te crea una estructura de ramas ligeramente diferente, lineal. (Pierdes la trazabilidad de las fusiones de ramas, así que no se recomienda en exceso cuando es trabajo colaborativo… vamos, que hay que saber utilizarlo).
git fetch git rebase origin/master git push
Fetch: te trae todos los cambios sin integrarlos (pull los integra, fetch sólo da constancia a tu repositorio local de que en la rama oculta origin/master existe determinado commit). Ósea, digamos que abres ese árbol pero en local, y tu rama de trabajo sigue apuntando a tu commit local y la rama origin/master a los contenidos bajados del remoto. En tu rama de trabajo local no tendrás integrados esos contenidos remotos que sí existen en la rama origin/master.
rebase origin/master : apuntas a origin como nuevo punto inicial para tu rama e integras los cambios de tu commit local. (Si existen conflictos, tendrás que resolverlos)
push : subes esa integración. No se sube tu commit local original, sino la mezcla de ambos.
Dejando una estructura similar a esta, todos al mismo nivel:
º Commit X (previo commit al error)
º Commit 1 (el que existe en remoto y no tienes en local)
º Commit 3 (el merge de commit 1 + tu commit local)
Con el ejemplo del gráfico, tu local es el color verde; has seguido desarrollando, mientras paralelamente en la rama azul (remoto) existen otros cambios que no posees.
Como indica el error, te sugiere que primero integres esos cambios en tu rama local, haciendo un git pull
.
Si integras los cambios y si no existen conflictos a corregir, se creará automáticamente un último commit con el merge de ambas ramas. Si existen conflictos -te lo indicará- deberás resolverlos antes y luego se creará el commit de merge. Tras ello podrás hacer un git push
sin problema.
Eso dejará una estructura de ramas similar a esto (imagínate el commit X abriéndose en 2 y volviéndose a cerrar al llegar al commit merge).
º Commit X (previo commit al error)
ºº Commit 1 (el que existe en remoto y no tienes en local)
ºº Commit 2 (el que existe en local y contiene commit X, pero no commit 1)
º Commit 3 (el merge de commit 1 + commit 2)
Some truly nice and useful information on this site, too I believe the layout contains great features.