- Sistema de control de versiones
- Beneficios de Git
- Fundamentos de Git
- Los 3 estados de Git
- Github
- Configurar Git
- Comandos de terminal
- Comandos Git
- Repositorios Remotos (Github)
- Configuraciones de Github
- Ignorar archivos
- Recursos Complementarios
- Enlaces de Interés
Un sistema que registra los cambios realizados sobre un archivo o conjunto de archivos a lo largo del tiempo. Este tipo de sistemas nos permiten volver en el tiempo y salvar nuestro trabajo.
Local Computer Solo vive en nuestro computador.
Centralizado No depende únicamente de un computador en el que se trabaja, sino que depende del súper servidor en donde se almacena la información. El servidor provee las copias a sus hijos, pero solo guarda los cambios en un solo lugar.
Sistema de control distribuidos Cada uno de los que participan en el proyecto, tienen copia del proyecto que se realiza, por eso no dependemos de un solo computador que almacene toda la información.
Git es un Sistema de Control de Versiones Distribuido.
Git fue creado por Linus Torvals
VelocidadPuedes trabajar fluidamente desde tu computador.Diseño sencilloEl codigo es robusto con las herramientas necesarias, como viajar en el tiempo.Fuerte apoyo en el desarrollo no linealNo trabaja de manera lineal, la linea del tiempo tiene bifurcaciones de manera independiente al proyecto principal.Completamente distribuidoCada quien puede tener una copia del proyecto.Capaz de manejar grandes proyectosLinux, Django, Laravel, etc. Usan git.
- Git almacena una referencia a todos los archivos que no se han cambiado
- Casi cualquier operación en Git es local. Se puede trabajar offline
- Git tiene integridad. No puedes perder información durante su transmisión o sufrir corrupción de archivos sin que Git lo detecte
Working DirectoryEs donde trabajamos de manera local, pero para guardarlo hay que pasarlo al Staging AreaStaging AreaEs el área de preparación, se almacenan justo antes de hacer commitGit repositoryEl repositorio donde almacenaremos los cambios del proyecto
GitHub es una plataforma en la que se almacenan los cambios de un proyecto. Además es una plataforma que funciona como una red social. Aquí, las personas que visiten tu sitio puedan darle estrellitas a los proyectos que hayas desarrollado.
Git es el software que ayuda con el versionado y Github es la red social que nos va a ayudar a distribuir el software.
Configuración del usuario
git config --global user.email user@example.com
git config --global user.name "Ruber Hernandez"Colorear el output del terminal de Git.
git config --global color.ui trueConfigurar el editor de texto de git
git config --global core.editor ["editor --wait"] Ver la lista de configuraciones
git config --listcd [carpeta]moverse entre carpeta.mkdir [nombre]crear una carpeta.lslista todos los directorios.-amuestra los archivos ocultos.
clearlimpia la ventana.touch [archivo]crear un archivo.rm [ruta]borra un archivo.rm -rf [carpeta]borra una carpeta.vim [nombre]editar un archivo de texto.:wqguaradar y salir del archivo de texto.
git init [nombre]inicia un repositorio y crea la carpeta [nombre].git statusmuestra el estado de los archivos en el repositorio.untracked filesson archivos que están en nuestro Working Directory, lo que aparezca en rojo es lo que se ha modificado y hay que pasarlo al Staging.changes to be comittedson los archivos que se encuentran en el staging area. Aparecen en verde.
git add [archivo]agrega un archivo al staginggit add -Aagrega todos los archivos del working directory al staging area.git add .hace lo mismo.git add -n [archivo]simula el agregado de un [archivo].git rm --cached [archivo]quita un [archivo] del staging al working area.git rm -fquita el archivo del staging y del working directory.git commit -m ["mensaje"]agrega el comentario al staging al repositorio.git commit -am ["mensaje"]agrega los archivos del staging al repositor y agrega comentario.git commit --amendanexa el nuevo cambio al anterior commit. Si se escribe un mensaje este sobreescribe el anterior.git tag -a [tag] -m ["comentario"]agrega el tag con un comentario al ultimo commit.git tag -llista los tags.git tag [tag] [sha1 del commit]agrega un tag a un commit en partcular.git tag -d [tag]elimina el tag.git tag -f -a [nuevo tag] [sha1 del commit]renombra el tag del commit pero deja el anterior tag.git logver la lista de commits.--onelineresumido.--graphver las ramificaciones.-[numero]ver los ultimos [numero] commits.
git diff [sha1 del commit]muestra la diferencias del commit [sha1].git diff [sha1-1] [sha1-2]diferencia entre la version 1 vs la version 2.git reset--soft [sha1]borrar todos los commits posteriores a [sha1]. Los archivos que salen del repositorio son pasados al staging area.--mixed [sha1]borrar todos los commits posteriores a [sha1]. Los archivos que salen del repositorio son pasados al working directory--hard [sha1]elimina todos los cambios incluso del working directory.
Si se desea eliminar el repositorio, solo hay que eliminar la carpeta oculta .git
git branch [nombre]crear la rama [nombre]git branch -llista las ramasgit branch -d [nombre]elimina el branch [nombre]. Esto solo funciona si el branch no tiene ningún commit.git branch -D [nombre]fuerza la eliminación de un branch sin importar si tiene commitsgit branch -m [nombre inicial] [nuevo nombre]renombra el branch [nombre inicial] por [nuevo nombre]git checkout [brach]moverse al branch [branch]git chechout [sha1]ir al momento del tiempo de ese commitgit checkout -b [nombre]crea un branch y se mueva al mismogit checkout -- [archivo]descarta todos los cambios del archivogit merge [branch]mezcla el branch [branch] con el branch actualgit rebase [branch]mezcla el branch con el brach actual. Es como el merge pero sin crear bifurcacionesgit stash: Guarda el trabajo actual de manera temporal. (Archivos modificados o eliminados)*git stash -u: Crea un stash con todos los archivos. (Añadiendo los creados Untracked)git stash save “mensaje”: Crea un stash con el mensaje especificado.git stash list:Permite visualizar todos los stash existentes.git stash clear: Elimina todos los stash existentes.git stash drop: Elimina el stash más reciente. El que tiene num_stash=0.git stash drop stash@{num_stash}: Elimina un stash específico.git stash apply: Aplica el stash más reciente. El que tiene num_stash=0.git stash apply stash@{num_stash}: Aplica los cambios de un stash específico.git stash pop: Aplica el stash más reciente y lo elimina. El que tiene num_stash=0.git stash pop stash@{num_stash}: Aplica los cambios de un stash específico y elimina lo stash.git stash branch nombre_de_rama: Crea una rama y aplica el stash mas reciente.git stash branch nombre_de_rama stash@{num_stash}: Crea una rama y aplica el stash especificado.git cherry pick [sha1]mover el commit [sha1] de otro branch al branch actualgit clean --dry-run: Para saber qué archivos vamos a borrar cuando estan repetidos o no son de nuestro proyectogit clean -f: Para borrar todos los archivos listados (que no son carpetas y lo que esta en .gitignore)
git reflog: Para recuperar una rama que haya sido eliminada necesitamos el hash ultimo commit hecho en dicha rama. Para eso usamos git reflog. Buscamos el hash y lo copiamos. ej: git checkout -b cabecera hash_del_utlimo_commit_de_cabecera Ya habiendo obtenido el hash lo que hacemos sera volver a crear la rama pero le agregamos el hash al final.
git shortlog: Ver cuantos commits a hecho los miembros del equipogit shortlog -sn: Las personas que han hecho ciertos commitsgit shortlog -sn --all: Todos los commits (también los borrados)git shortlog -sn --all --no-merges: muestra las estadisticas de los comigs del repositorio donde estoygit config --global alias.stats “shortlog -sn --all --no-merges”: configura el comando “shortlog -sn --all --no-merges” en un Alias en las configuraciones globales de git del pcgit blame -c blogpost.html: Muestra quien ha hecho cambios en dicho archivo identadogit blame --help: Muestra en el navegador el uso del comandogit blame archivo -L 35, 60 -c: Muestra quien escribio el codigo con informacion de la linea 35 a la 60, EJ:git blame css/estilos.css -L 35, 60 -cgit branch -r: Muestra las Ramas remotas de GitHubgit branch -a: Muestra todas las Ramas del repo y remotas de GitHub
git clone [ruta]trae el repositorio a la computadoraforkhace una copia de un repositorio externo a nuestra cuentassh-keygen -t rsa -b 4096 -C "correo@ejemploc.com"crea una llave ssh. El correo debe de ser el mismo que se encuentra en Githubgit remote add [nombre] [ruta]conecta un repositorio remoto con uno local. Por defecto el nombre es origingit remote -vlista las conexiones remotagit remote remove [nombre]remueve una conexión remotagit fetch [nombre] [branch]traer . Solo los trae pero no lo mezclagit merge [origin/master] --allow-unrelated-historieshace un merge del fetch con el repositorio localgit pull [origin] [branch]hace un fetch mas mergegit push [origin] [master]envia al repositorio local al remoto--tagsenviar los tags
git push --all originpush a todos los branch y tags
git remote add origin urldelrepositorioremoto
git remote
git remote -vTercero: Traer la versión del repositorio remoto y hacer merge para crear un commit con los archivos de ambas partes. Podemos usar git fetch y git merge o solo el git pull con el flag --allow-unrelated-histories:
git pull origin master --allow-unrelated-historiesPor último, ahora sí podemos hacer git push para guardar los cambios de nuestro repositorio local en GitHub:
git push origin masterConfigura tus llaves SSH en local Esto nos permite conectar a el remoto por medio de SSH y no HTTPS
Primero se debe ubicar en le home, las llaves ssh se crea por persona no por proyecto.
Generar tus llaves SSH. Recuerda que es muy buena idea proteger tu llave privada con una contraseña.
ssh-keygen -t rsa -b 4096 -C "tu@email.com"
Encender el "servidor" de llaves SSH de tu computadora:
eval $(ssh-agent -s)
Añadir tu llave SSH a este "servidor":
ssh-add ruta-donde-guardaste-tu-llave-privada
Luego de crear nuestras llaves SSH podemos entregarle la llave pública a GitHub para comunicarnos de forma segura y sin necesidad de escribir nuestro usuario y contraseña todo el tiempo.
Para esto debes entrar a la Configuración de Llaves SSH en GitHub, crear una nueva llave con el nombre que le quieras dar y el contenido de la llave pública de tu computadora.
Primero: Guardar la URL del repositorio de GitHub con el nombre de origin
git remote add origin URL_repo
git remote set-url origin URL_repo
Segundo: Verificar que la URL se haya guardado correctamente:
git remote
git remote -v
Tercero: Traer la versión del repositorio remoto y hacer merge para crear un commit con los archivos de ambas partes. Podemos usar git fetch y git merge o solo el git pull con el flag --allow-unrelated-histories:
git pull origin master --allow-unrelated-histories
Por último, ahora sí podemos hacer git push para guardar los cambios de nuestro repositorio local en GitHub:
git push origin master
Para recibir notificaciones cuando un repositorio cambia, se puede hacer click al botón watch.
Agregar protección al master de tal manera que sea necesario hacer in pull request para hacer un cambio.
Settings
-Branches
--Branch protection rules
---Choose branch
----master (puede ser otro branch)
-----Protect this branch
------Require pull request reviews before merging
Es una buena práctica generar archivos de plantilla para que los usuarios o desarrolladores puedan notificar un issue o pullrequest.
issue_template.mdtemplate para un issuepull_request_template.mdtemplate para el pull request
Para ignorar archivos o carpetas de los commits se crea un archivo que se llame .gitignore.
Página que crear .gitignore para los proyectos: https://www.gitignore.io/










