Git y repositorios git

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado

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.

git branches merge

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":

 

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado

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.

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado

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.

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado

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

 

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

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

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado

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.

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado

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

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

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.

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

¿ Qué es Git ?

logo-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.

Git Subversion

 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.