https://github.com/Crisfon6/courseGit
Git es un sistema de control de versiones
El SCV o VCS (por sus siglas en inglés) es un sistema que registra los cambios realizados sobre un archivo o conjunto de archivos a lo largo del tiempo, de modo que puedas llevar el historial del ciclo de vida de un proyecto, comparar cambios a lo largo del tiempo, ver quién los realizó o revertir el proyecto entero a un estado anterior.
Cualquier tipo de archivo que se encuentre en un ordenador puede ponerse bajo control de versiones.
Con Git se obtiene una mayor eficiencia usando archivos de texto plano, ya que con archivos binarios no puede guardar solo los cambios, sino que debe volver a grabar el archivo completo ante cada modificación, por mínima que sea, lo que hace que incremente demasiado el tamaño del repositorio.
“Guardar archivos binarios en el repositorio de Git no es una buena práctica, únicamente deberían guardarse archivos pequeños (como logos) que no sufran casi modificaciones durante la vida del proyecto. Los binarios deben guardarse en un CDN”.
- Git almacena la información como un conjunto de archivos.
- No existen cambios, corrupción en archivos o cualquier alteración sin que Git lo sepa.
- Casi todo en Git es local. Es difícil que se necesiten recursos o información externos, basta con los recursos locales con los que cuenta.
- Git cuenta con 3 estados en los que es posible localizar archivos: Staged, Modified y Committed.
para ver los cambios que a tenido un archivo usamos el command
git show <filename>Tambien puedes comparar dos commits completos usando el id del commit y el command diff
git diff <id-commit> <id-commit2>Entonces cuando tu inicializas un proyecto git con el commando git init, tenemos 3 entornos de trabajo los cuales son :
- directorio de trabajo (la carpeta de nuestro proyecto)
- Preparacion o Staging (donde se guardan antes de ser mandados al repositorio)
- Repositorio local
para mover nuestros cambios de stage en stage usamos git add para agregar al staging, git commit para agregar al repositorio, y git push para enviar al repositorio remoto
para traer los cambios que existan en el repositorio remoto usamos git fetch y despues hacemos un git merge, Existe un comando que une estos en uno solo el cual es : git pull
Las branches es la manera que nos ofrece git para trabajar en “espacios” paralelos en el mismo proyecto y hacer aportes a nuestro proyecto de manera incremental y sostenible. Esto consiste en crear un “espacio” “copia” en el cual tu puedes meter los cambios que necesitas y despues de ser probados en esta Branch ser unidos (mergeados) en la rama principal
Los PR(pull request) son la base de la colaboración a proyectos Open Source, si tienen pensando colaborar en alguno es muy importante entender esto y ver cómo se hace en las próximas clases. Por lo general es forkear el proyecto, implementar el cambio en una nueva rama, hacer el PR y esperar que los administradores del proyecto hagan el merge o pidan algún cambio en el código o commits que hiciste.
Es una característica única de GitHub en la que se crea una copia exacta del estado actual de un repositorio directamente en GitHub, éste repositorio podrá servir como otro origen y se podrá clonar (como cualquier otro repositorio), en pocas palabras, lo podremos utilizar como un git cualquiera
Un fork es como una bifurcación del repositorio completo, tiene una historia en común, pero de repente se bifurca y pueden variar los cambios, ya que ambos proyectos podrán ser modificados en paralelo y para estar al día un colaborador tendrá que estar actualizando su fork con la información del original.
Al hacer un fork de un proyecto en GitHub, te conviertes en dueñ@ del repositorio fork, puedes trabajar en éste con todos los permisos, pero es un repositorio completamente diferente que el original, teniendo alguna historia en común.
Los forks son importantes porque es la manera en la que funciona el open source, ya que, una persona puede no ser colaborador de un proyecto, pero puede contribuír al mismo, haciendo mejor software que pueda ser utilizado por cualquiera.
Al hacer un fork, GitHub sabe que se hizo el fork del proyecto, por lo que se le permite al colaborador hacer pull request desde su repositorio propio.
Esto es un archivo en la raiz del proyecto que especifica que archivos deben ser ignorados y no ser enviados al repositorio remoto
Es un lugar temporal en el cual podemos guardar los cambios temporalmente y con ello poder ver nuestra branch sin los cambios que no hemos enviado al stage
git stashsi queremos volver a obtener los cambios hechos y guardados en el stash usamos:
git stash poppara poder ver el listado de stash que tenemos:
git stash listpara crear una branch con los cambios de un stash usamos:
git stash branch <branch-name>eliminar stash
git stash dropUsando git clean podemos eliminar los archivos que no hemos trackeado con git de nuestra carpeta del proyecto para ello usamos git clean pero esto nos va a obligar a forzar debido a que lo que esta haciendo es la eliminacion de archivos del disco duro, por ello es importante SIEMPRE PERO SIEMPRE verificar que archivos van a ser eliminados con el comando para ello usamos :
git clean --dry-runya validado los archivos a eliminar usamos el comando para eliminar estos:
git clean -fEs un comando que sirve par traerme los cambios de un commit especifico
git cherry-pick <id-commit>con el git reflog podemos visualizar toda la historia del proyecto y sus ramas incluso las eliminadas las {#}HEAD indican los puntos de la historia y con esto nos podemos mover
Git guarda todos los cambios aunque decidas borrarlos, al borrar un cambio lo que estás haciendo sólo es actualizar la punta del branch, para gestionar éstas puntas existe un mecanismo llamado registros de referencia o reflogs.
La gestión de estos cambios es mediante los hashes de referencia (o ref) que son apuntadores a los commits.
Los recoges registran cuándo se actualizaron las referencias de Git en el repositorio local (sólo en el local), por lo que si deseas ver cómo has modificado la historia puedes utilizar el comando:
git reflogEsto permite agregar cambios al commit anterior y cambiar el mensaje del anterior commit, sin crear un commit nuevo.
git commit --amendCon esto podemos buscar palabras en todo nuestro proyecto.
#-n nos muestra la linea en la que se usa
#-c nos cuenta las veces que usamos la palabra
git grep -n <palabra-para-buscar>Busca una palabra en un commit
git log -S "<palabra-para-buscar>"ver los logs por persona sobre lo que ha hecho
git shortlogver los commits hecho por cada persona incluso los merge
git shortlog -sn --allver los commits hechos por cada persona excluyendo los merge
git shortlog -sn --all --no-merges






