Git y repositorios git
Git branch es por escelencia el comando de git para trabajar con ramas tanto locales o remotas.
Una rama es bifurcación del proyecto en punto determinado (commit).
Trabajar en Git con Ramas Locales y Remotas
Cuando iniciamos un repositorio (tanto local , como en remoto) nos inicia en una rama por defecto, por norma general en "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 nueva rama.
Hay que tener en cuenta que nuestro proyecto local podemos tener ramas que no estén repositorio remoto y viveversa. Esto es debido a que Git es un gestor de versiones descentralizado. Si quieres trabajar con una rama remota la tienes que tener enlazada con una rama local.
Lo normal cuando trabajas en un proyecto con mas programadores , se suele crear mas ramas a parte stable y master, asi es mucho mas facil de mezclar, sin muchas complicaciones.
Aunque el tratamiento de las ramas locales y remotas es muy similar, lo ideal tengas identificas que ramas locales estan o no en remoto, y cuales estan enlazas entre si.
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.
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 ADD
Con este comando confirmas los cambios que quieres commitear, puede añadir ficheros o partes (algunos cambios, no todos).
Este comando se puede ejecutar varias veces antes de realizar el commit.
No se podrá añadir ficheros que hayan sido ignorados en gitignore ya nos aparecerán cuando hagamos git status
.
git add .
Añade todos los ficheros que salen status a partir de directorio actual.
El (.) indica todos los fichero que siguen en la ruta que estes, en vez de fichero a fichero.
El comando git config
nos ayuda a configurar la variables que nos permite controlar el aspecto y funcionamiento de GIT, tanto nivel local de ese repositorio en cuestion, como la configuración de git de toda la maquina, en definitiva a nivel local o global.
Si la configuración es global este comando modifica el .gitconfig en tu home, sino .git/config se crea en tu repositorio local de tu proyecto.
Listar configuracion actual
git config --list
Nos muestra toda la configuracion , tanto local como global.
Si quisieramos solo ver uno u otra, añadimos --global
o --list
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.
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.
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
- Olalla
- Git y repositorios git
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
¿ 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 ! :-)
Conceptos básicos de Git.
Inicialmente tienes saber que git es un controla de versiones distribuido, inicialmente parece mas complejo en comparación con los controladores versiones centralizados como puede ser subversions.
Realmente debes saber que no es mas complejo, simplemente que puedes hacer muchísimas mas cosas, que con los controladores de versiones centralizados no puedes hacer o si se pueden hacer el nivel complejidad es inferior.
Inicialmente voy indicaros la arquitectura de git en un proyecto con git
- El directorio de Git (Git directory)-> donde guarda las copias de los ficheros.
- El directorio de trabajo (working directory) o árbol de trabajo (working tree)
- La zona de montaje (staging )
Esta utltima zona, realmente no se ve en nuestros ficheros, realmente son los ficheros nuevos, los que cambiamos, esto los podemos ver con git.
¿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 a la hora trabajar.
Nosotros tardamos años empezar a utilizarlo, por pereza y no comprender que realmente es sencillo el concepto de controlador de versiones distribuido.
Te recomiendo ver el taller git que hizo la universidad de cordoba, donde lo explica muy bien.Taller Git: Manual de la Universidad Cordoba
Nosotros hicimos una pequeña Introducción rápida a Git- Mi guia " con la intención de poner de forma sencilla como lo utilizamos y con las instrucciones mas habituales.
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.