Git y repositorios git

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

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.

git branches merge

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

 

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.

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

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.

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

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

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

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.

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

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.

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 !  :-)

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