Uso de git ========== clonar separando código y .git en distintos directorios ``` $ git clone --separate-git-dir /tmp/1/unaprueba ssh://git-test.pm.rosario.gov.ar/datos/git/web.git --branch desarrollo ``` clonar trayendo el log solamente del último cambio ``` $ git clone --depth 1 ssh://git-test.pm.rosario.gov.ar/datos/git/web.git --branch desarrollo ``` clonar como espejo para usar como bare local ``` $ git clone --mirror ssh://git-test.pm.rosario.gov.ar/datos/git/web.git ``` actualizar repositiorio espejo desde el origin ``` $ cd repo && git fetch origin ``` clonar contra https con certificado erroneo ``` GIT_SSL_NO_VERIFY=true git clone https://gitlab.tecso.coop/tecso/siat-rosario.git git config http.sslVerify "false" ``` ver ramas remotas ``` $ git branch -r ``` ver todas las ramas ``` $ git branch -a ``` ver ramas locales ``` $ git branch ``` comparar repositorio local con el origin ``` git remote show origin ``` agregar archivos nuevos al área de trabajo para commit ``` git add . ``` ver cambios que se grabarán en el próximo commit ``` git status ``` commit con mensaje ``` git commit -a -m 'mensaje descriptivo' ``` agregar archivo olvidado al último commit ``` git commit --amend ``` ver historial de commits ``` git log --stat ``` ver historial de commits abreviado ``` git log --pretty=oneline ``` ver diferencias entre último commit y el anterior ``` git log -p -2 ``` ver árbol de versionados ``` git log --pretty=format:"%h %s" --graph ``` volver a un commit anterior ``` git revert 0d1d7fc32 ``` anular últimos commits perdiendo cambios ``` git reset --hard 0d1d7fc32 ``` crear nueva rama (igual al commit actual) ``` git branch testing ``` borrar rama local ``` git branch -d the_local_branch ``` borrar rama remota ``` git push origin :the_remote_branch ``` aplicar en master os cambios de una rama de test ``` git checkout master git merge test ``` limpiar entorno sucio por cambios no aplicados: 1-ver 2-aplicar ``` git clean -n git clean -f ``` revertir un archivo a un estado varios commits anterior ver contenido del archivo en el commit ``` git show a4r9593432:path/to/file.txt ``` revertir el archivo a la versión elegida ``` git reset a4r9593432 -- path/to/file.txt ``` revisar las diferencias ``` git diff --cached path/to/file.txt ``` aplicar el cambio ``` git commit ``` ver diferencias en un archivo con el commit anterior ``` git diff HEAD^ -- /foo/bar/baz.txt ``` ver diferencias entre version actual y 2 versiones anteriores de un archivo ``` git diff HEAD@{2} /foo/bar/baz.txt ``` crear tag ``` git tag -a v1.4 -m "my version 1.4" ``` crear tag desde commit ``` git tag -a v1.2 0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc ``` crear tag liviano (solo info del commit) ``` git tag v1.4 ``` ** Crear repositorio ** ``` mkdir debian7apache cd debian7apache git init ``` Cambiar la descripcion del proyecto ``` vim debian7apache/.git/description ``` Agregar archivos al directorio ``` git add . git commit -n 'Carga de archivos iniciales' ``` Subir al repositorio compartido ``` git remote add origin pgrigio0@git-test.pm.rosario.gov.ar:/datos/git/svc/debian7apache.git git push origin master ``` Actualizar cambios ``` chmod +x instalar.sh git commit -a -m 'Agregar instalador ejecutable' git push origin master ``` ** Crear repositorio compartido ** Crear repositorio compartido en git-test con permisos para edición del grupo solamente ``` mkdir /datos/git/svc/debian7tomcat.git chown git debian7tomcat.git cd debian7tomcat.git git init --bare --shared=group cd ... chown -R git debian7tomcat.git chmod o-x debian7tomcat.git ``` Cambiar la descripcion del proyecto ``` vim debian7tomcat/description ``` Subir el proyecto al servidor compartido ``` git push pgrigio0@git-test.pm.rosario.gov.ar:/datos/git/svc/debian7tomcat.git master:master ``` Agregar origen en repositorio local para después seguir actulizando cambios ``` git remote add origin pgrigio0@git-test.pm.rosario.gov.ar:/datos/git/svc/debian7tomcat.git ``` Agregar envío de correo cuando hay nuevo commit ``` cd /datos/git/svc/debian7tomcat.git cp /usr/share/git-core/contrib/hooks/post-receive-email hooks/post-receive chown git.servicios hooks/post-receive chmod +x hooks/post-receive git config hooks.mailinglist "pgrigio0@rosario.gov.ar,pgrigioni@rosario.gov.ar" git config hooks.emailmaxlines 500 ``` Sin git-modifier hay que hacer esto además ``` git config hooks.emailprefix "[debian7tomcat] " git config hooks.showrev "git show -C %s; echo" ``` Mensaje con servidor y repositorio ``` $ git config hooks.showrev "t=%s; printf 'http://your_repository_IP/gitrepo/?p=my_git_project;a=commitdiff;h=%%s' \$t; echo;echo; git show -C \$t; echo" ``` ** Agregar repositorio a demonio git público ** Agregar repositorio para poder ser consumido de forma pública mediante protocolo git ``` touch /datos/git/svc/debian7tomcat.git/git-daemon-export-ok ``` ** Agregar repositorio a servidor web ** Agregar repositorio para ser consultado de forma anónima por protocolo http y mediante la interfaz gitweb ``` cd /var/www/gitweb/ ln -s /datos/git/svc/debian7tomcat.git . ``` ** Procedimiento para clonar repositorio y subir modificaciones ** Para agregar cambios en un repositorio público el procedimiento es: 1) Traer la última versión del proyecto a modificar a mi pc 2) Aplicar los cambios a la versión local 3) Generar una nueva versión local 4) Publicar la nueva versión en el repositorio público 1) Clonar repositorio ``` git clone ssh://usuario@git-test.pm.rosario.gov.ar/datos/git/svc/debian7base.git/ --branch master cd debian7base ``` o para actualizar la version local con el contenido del servidor ``` git pull origin master ``` 2) Crear archivos nuevos ``` vim nuevo.txt ``` Agregar archivos nuevos al indice ``` git add . ``` Modificar archivos existentes ``` vim README ``` 3) Grabar los cambios ``` git commit -a -m 'Mensaje descriptivo de los cambios' ``` 4) Publicar los cambios en el repositorio compartido ``` git push origin master ``` ** Interfaces para gestión de permisos ** GITLAB - Es el de github - Soporta LDAP y grupos la versión paga - Se puede configurar autenticación LDAP en la versión libre pero hay que revisar si tiene manejo de permisos GITOLITE - Se maneja con claves rsa - Se configura a través de un repositorio de git - Se puede integrar LDAP pero con una modificación a través de apache + usuario genérico GITOSIS - Se maneja con claves rsa - Se configura a través de un repositorio de git - Complicado integrar LDAP