Git y repositorios git
Git branch es por escelencia el comando de git para trabajar con ramas tanto locales como remotas. :-)
Lo primero que debemos conocer es saber que es una rama, luego diferencias entre las ramas locales y remotas.
Ramas en Git : Locales o remotas
Una rama es bifurcación del proyecto en punto determinado (commit). Cuando iniciamos un repositorio nos inicia en la rama "master" que la rama principal del proyecto.
En todo proyecto es recomendable tener por lo menos, dos ramas "master" y "stable" que sería la rama produccion, la rama que utilizamos como estable. Lógicamente podremos llamarla como queramos.
Cuando queremos crear nuevas funciones en un proyecto, pero no tenemos muy claro hasta donde vamos a llegar, además tampoco tenemos claro si se podra mezclar el código con producción, entonces creamos una rama.
Ten en cuenta que podemos tener ramas locales que no estén remoto , como al contrario, por que Git es un gestor de versiones descentralizado, aunque si quieres trabajar en alguna de las ramas remotas ,tienes que tener una rama en local que este enlazada con la remota.
Lo normal cuando trabajas en un proyecto con mas programadores , es que en remoto tengas varias rama a parte stable y master, ya que son necesarias para poder mezclar luego sin muchas complicaciones.
Aunque el tratamiento de las ramas locales y remotas es muy similar, se debe saber cuando es una rama local ,cuando es una rama remota y cuando entras enlazada, ya que en local el nombre la rama puede ser distinto a la remota.
Mas lugares donde consultas sobre "Git branch":
- git-scm.com / Ramificaciones Locales (es) donde lo explica genial ramificaciones locales.
- git-scm-com/ Ramificaciones Remotas (es) , explicación tratamiento ramas remotas.
- https://www.nobledesktop.com/learn/git/git-branches En ingles, que explica de una forma práctica y concrecta todo lo que puedes necesitar.
Hoy haciendo unos cambios, me doy cuenta que Github no permite hacer push sin token de doble autentificacion, me sale el siguiente error:
Username for 'https://github.com': usuario Password for '//Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.'">https://Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.': remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: Authentication failed for 'https://github.com/TPVFox/TPVFox.git/'
Entonces me puse a buscar información como hacerlo , y decidi utilizar SSH. Encontre el siguiente video del 2015 , pero la verdad lo explica muy bien y es valido para ahora.
Lo pasa que ahora tuve añadir un nuevo remote ya que tenía ya clonado el repositorio por https.
GITHUB: Plataforma desarrollo
Es una plataforma de desarrollo colaborativo sobretodo para aquellos que utilizamos GIT, os recuerdo que GITHUB gratuito y tiene opciones de pago. Ante de que lo comprara por Microsoft en 2018, en esta plataforma solo te permitia subir proyectos con codigo abierto y publico, los privados era de pago. Ahora la parece que te permite tener de pago, pero no se cuales son lar premisas para que tengas que pagar.
Documentación de GitHub oficial en ingles.
¿ Lo primero que hacer en GitHub ?
Identificarte ( loguearse ) en la web github con tu usuario y contraseña, si no tiene crear una cuenta, son bastante respectuoso con tu cuenta email y no te molestan con emails.
Comando de git:
git-clean - Eliminar archivos sin seguimiento del árbol de trabajo
Opciones de comando:
git clean [-d] [-f] [-i] [-n] [-q] [-e ] [-x | -X] [-] ...
Con este comando podemos eliminar ficheros y directorios que no esten en repositirio de git, en el control versiones.
Por defecto se eliminan los archivos desconocidos para Git, pero si se especifica la opción -x , también se eliminan los archivos ignorados.
Esto puede, por ejemplo, ser útil para eliminar todos los productos de compilación.
Y ademas esto puede ser peligros, si gitignore quitamos ficheros que son utiles para el proyecto , pero no queremo hacer seguimiento, como puede ser el fichero de configuración.
Ejemplos de comando git clean
Podemos ver que ficheros eliminariamos, pero no los elimina si utilizamos.
git clean -n
Si al ejecutar de verdad, normalmente te pide que lo fuerces, aunque esto se puede cambiar en las configuraciones Git, para realizarlo utilizamos
git clean -f
Si quisieramos eliminar también los directorios sin seguimiento.
git clean -d -f
Fuentes:
https://koukia.ca/how-to-remove-local-untracked-files-from-the-current-git-branch-571c6ce9b6b1
https://git-scm.com/docs/git-clean
GIT DIFF
DEFINICIÓN:
Muestra los cambios en los ficheros en cualquier momento y desde donde queramos de la linea tiempo del árbol de trabajo de git. Con esto queremos decir que nos indica todos los cambios realizados sobre los archivos que pertenecen al repositorio.
Si te estas iniciando en Git puedes ver nuesta pequeña guia de git.
SINOPSIS
git diff [options] [<commit>] [--] [<path>…]
git diff [options] --cached [<commit>] [--] [<path>…]
git diff [options] <commit> <commit> [--] [<path>…]
git diff [options] <blob> <blob>
git diff [options] [--no-index] [--] <path> <path>
OPCIONES:
git diff [--options] [--] [ ...]
Con el anterior esquema podemos ver los cambios que han realizado en relación con el índice (zona de espera para la próxima confirmación). En definitiva, ver las diferencias, pero no solo las que esperan confirmación sino con otros puntos, branch o incluso con repositorio remotos.
Ejemplos
Pondremos ejemplos prácticos.
Ver cambios que acabamos de realizar en un fichero
En nuestro repositorio tenemos index.php y queremos ver los cambios que hemos realizado que aun no los comitamos, tampoco los preparados para comitear.
git diff --index.php
Nos muestra por la terminal los cambios que realizamos en ese fichero con respecto al HEAD de nuestro repositorio local.
Ver cambios de un fichero cuando ya lo añadimos (add) y esta preparado para commit.
La instrucción en este caso tenemos que ponerle la opción --cached
git diff --cached index.php
Ver cambios en un fichero con respecto a otra rama
Si tenemos dos ramas en repositorio local, una desarrollo y otra producción, entonces queremos saber que cambios realizamos en un fichero determinado de la rama de desarrollo con respecto a producción.
git diff RamaDesarrollo RamaProduccion --/rutaFichero
Nos muestra por terminal la diferencia de los ficheros.
Ver que ficheros cambiaron entre esas ramas.
Es similar a lo anterior, aunque esta vez, lo que pretendemos es que nos liste solo los ficheros que cambiaron entre las dos ramas, sin ver los cambios.
git diff --name-status RamaDesarrollo RamaProduccion
Nos va indicar aquellos modificados (M) , añadidos (A) o incluso aquellos movidos... Rnumero.. pero no estoy seguro... :-)
Los cambios en permisos de ficheros en git diff podemos indicar de verlo o no
Cuando cambiamos permisos a un fichero dentro un repositorio git este detecta que se cambio y lo marca como modificado. Al hacer git diff, nos indica los permisos que tenía y que tiene ahora.
Esto puede ser muy buenos para controlar que no nos cambien los permisos de nuestro proyecto si nuestro control.Aunque también se puede convertir en un incordió, si trabajamos en varios servidores que necesitan mas permisos de los habituales para que funcione nuestro proyecto.
Nuestros crack en Git ( @Guillermo ) no pasa el siguiente comando para git dif no muestre esos ficheros.
git diff --summary master | grep -v 'mode change'
El comando grep lo que hace es descartar 'mode change', de esta forma ya no tiene en cuenta los cambios de permisos.
Me marca todos los saltos linea y final de carro como diferencias.
Si en proyecto trabajas con windows y linux a la vez, los saltos de carro pueden se un incordio, ya que windows siempre marca un salto de carro al pulsar intro y saltar una linea, y linux no lo hace, por este motivo git diff no va decir que tenemos diferencias en todo el fichero.
Al hacer git diff del fichero, no sabemos porque hay diferencias, ya marca borrado todo el fichero y en verde todo el fichero, debemos buscar en nuestro editor, que nos marque los saltos de carro, para ver esas diferencias.
Una forma rapida de ver los saltos de carros con la instrucción :
cat -A fichero
Nos muestra el salto de carro.
Diffuse como otro editor para ver diferencias en git.
En git hay una instrucción y se puede configurar para que podamos utilizar otro editor y ver la diferencia de una forma mas grafica.
Nosotros por ejemplo utilizamos diffuse, pero no hace falta cambiar nada en git, simplemente utilizar la consola.
diffuse fichero
Si el fichero fue cambiado y no fue añadido a commitear, ya nos habré las dos versiones.
Si ya añadimos entonces tenemos que poner:
diffuse -r fichero
Y si por ejemplo queremos mostrar la diferencia entre rama
diffuse -r rama fichero
Realmente a veces una forma grafica puede ser comoda, para encontrar diferencia en codigo.
Recomendable por -- para separar los parámetros de los ficheros
Fuentes
Principalmente de http://git-scm.com/docs/git-diff
GIT ADD
Este comando añade ficheros o partes de estés para commitear, es decir prepara el contenido para proximo commit.
Este comando se puede ejecutar varias veces antes de realizar el commit.
No se podrá añadir ficheros que hayan sido ignorados en gitignore, tampoco nos aparecerán en git status.
git add
Añade el fichero si se modifico o elimino.
git add .
El (.) indica todos los fichero que siguen en la ruta que estes, en vez de fichero a fichero.
Instalación de Git en los distintos sistemas operativos
Es tan fácil instalar en linux desde terminal que da mucha pereza instalar de otra forma.
$ apt-get install git
Si necesitas que os explique con instalar en otros sistemas operativos, me dices o mira esta lista links sobre git que vamos apuntando, puede alguien ya lo haya hecho.
Git es un motor de sistema control de versiones distribuido, el cual en los repositorios locales tienes una copia total del histórico, que luego puede ser distribuido en repositorios remotos.
Inicializar repositorio local
Esta herramienta es la que nos ayuda poder configurar la variables que nos permite controlar el aspecto y funcionamiento de GIT, tanto de un repositorio como la configuración de git de toda la maquina, en definitiva ponerlo a nuestro gusto.
Si la configuración es global este comando modifica el .gitconfig en tu home, sino .git/config en el proyecto
Como evitar que controle los cambios de permisos en los ficheros.
Git por defecto si cambiamos los permisos de un fichero , este ya entiende que se cambio el el fichero, que parece correcto por defecto.
La cuestión es que como cambiar esto, para proyectos que nos interesa.
git config core.fileMode false
Ejecutando esta instrucción deja de controlar esos cambios para el repositorio actual.
Si quisieras que hacer que la configuración se para toda la maquina donde tienes instalado git, entonces:
git config --global core.fileMode false
Ahora todos los proyectos en los que tengas GIT de esa maquina ya no controlar los cambios de permiso.
¿ Qué es Git ?
Git es un software de control de versiones creado y diseñado por Linus Torvalds (el primer* creador Linux) en 2005, pensando en la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando estas tienen un gran número de archivos de código fuente.
Hasta ese año Linus utilizaba un controlador de versiones privativo. ¡Algo extraño, verdad ! :-)
¿Cómo empezar con Git o un Control de Versiones?
Personalmente quiero deciros que la única forma de empezar con Git es poniéndose, no es tan difícil como parece, si empezamos a utilizarlo nos daremos cuenta que es muy útil e incluso se vuelve indispendable para trabajar.
Nosotros tardamos años empezar a utilizarlo, por pereza y no comprender de forma sencilla la cantidad de documentación que hay git, es el motivo por el montamos este post " Introducción rápida a Git- Mi guia " poner forma sencilla ( por lo menos para nosotros) como instalamos y que instrucciones necesitamos para empezar.
Hoy en día asesoramos a otros como implementar git como gestor versiones para otros programadores, en cualquier sistema operativo y en cualquier proyecto, ya que consideramos que es una herramienta fundamental para cualquier equipo desarrollo web y programación.
Vídeos , links y talleres de Git que nos gusta.
Video de taller de Symfony realizado en 2011 por Nacho Martín.
En el 2011, Galpon organizo otro taller de GIT en Altamar en el que Jesús Amieiro nos explico como inicianor en git. En la web de Jesús Amieiro nos deja dos documentos de utilidad para el taller y poderse iniciarse en este controlador de versiones.
Esos documentos los guardamos en está web para tenerlos siempre a mano,Presentación y Guión de comandos a utilizar
En esos documentos del Taller trato los siguiente puntos:
- ¿Que son los Sistemas de Control de Versiones (CVS)?
- Arquitectura de los Sistemas de Control de Versiones (CVS).
- Git. Origen y características.
- Instalación en los S.O. máis frecuentes.
- Configuración inicial.
- Uso da ayuda.
- Inicialización y clonado de un repositorio.
- Gestionando los cambios de un proxecto con Git.
- Deshaciendo los cambios.
- Ignorando archivos.
- Navegando por los commits.
- Ramas: creación, cambio, fusión, borrado.
- Guardando de forma provisional.
- Ejercicio práctico.