====== git ====== ===== Tags ===== 1. Listar los commits de un repositorio git log --pretty=oneline 2. Marcar con una etiqueta (en este ejemplo "v1.0") el commit deseado: git tag -a v1.0 947c168ba5cc2c40dabe15b1a140e0a90f29f3c3 3. Subir las etiquetas al repositorio remoto: git push origin v1.0 ===== Iniciar repositorio en remoto ===== Given a project in our local file system: /home/user/manhattan_project 1. Create the git repository: git init /home/user/manhattan_project 2. Do the first commit cd /home/user/manhattan_project git add * git commit -m "Initial commit" 3. Create the "bare" repository: git clone --bare /home/user/manhattan_project /tmp/manhattan_project.git 4. Move the directory to its final location using SSH scp -rv /tmp/manhattan_project.git user@git.example.com:/git/repositories/ ===== Subir un cambio ===== git add git commit -m "cambio realizado" git push ===== Añadir rama branch ===== git pull git checkout -b test git push origin test Listar ramas: git branch -a master * test remotes/origin/HEAD -> origin/master remotes/origin/master remotes/origin/test Cambiar de rama: git checkout master A Dockerfile_ok A Dockerfile_test Switched to branch 'master' Your branch is up to date with 'origin/master'. ===== Servidor git acceso claves ssh ===== http://git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server 0. (Opcional) Instalo paquetes sudo aptitude install git 1. Crear usuario git con el minimo de permisos posible sudo vim /etc/shells Y anyadir, si no existe, la siguiente linea: /usr/bin/git-shell Seguimos con la creacion del usuario "git": sudo adduser git sudo chsh git Teclear: /usr/bin/git-shell Y pulsar "enter" sudo su git cd mkdir .ssh && chmod 700 .ssh touch .ssh/authorized_keys ; chmod 600 .ssh/authorized_keys 2. Genero claves en el cliente y las subo al servidor ssh-keygen -t rsa scp /home/user/.ssh/id_rsa.pub remote.example.com:/tmp 3. Volcar las claves: sudo su git cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys ===== Volver a un commit previo ===== Escenario: * Queremos volver a un commit previo * Queremos hacer un nuevo commit indicando "se ha vuelto al commit XXXX" 1. Identificar el commit ID al que queremos volver: git log En este ejemplo: commit c501b1d989d780ab17412fc646b62bfe24aa24d5 (tag: v0.10.0) 2. Volver a ese commit en la copia local: git reset --hard c501b1d989d780ab17412fc646b62bfe24aa24d5 3. **TODO**: clarificar qué hace exactamente este paso git reset --soft HEAD@{1} 4. Hacer un nuevo commit git commit -m "Reverting to the state of the project at c501b1d989d780ab17412fc646b62bfe24aa24d5" 5. Subir los cambios al repositorio remoto git push ===== Comandos sueltos ===== http://stackoverflow.com/questions/3258243/git-check-if-pull-needed * To bring your remote refs up to date: git remote update * Will tell you whether the branch you are tracking is ahead, behind or has diverged. If it says nothing, the local and remote are the same. git status -uno * Will show you the commits in all of the branches whose names end in master (eg master and origin/master). git show-branch *master * Subir tags a remoto git push --tags origin * Descargar un tag determinado: git clone -b 'v1.0' --single-branch --depth 1 https://github.com/Kedu-SCCL/redmine-automation ===== Hooks ===== ==== Desplegar el contenido de un repositorio tras recibir un commit ==== 1. Crear el hook 'post-receive' en el lado servidor: sudo vim /srv/git/test.git/hooks/post-receive Con el siguiente contenido: #!/bin/sh git --work-tree=/srv/www/test --git-dir=/srv/git/test.git checkout -f chmod +x /srv/git/test.git/hooks/post-receive 2. Hacer un commit Resultado: el directorio "/srv/www/test" tendria que tener el contenido de del repositori "/srv/git/test.git" expandido ==== Enviar un correo tras recibir un commit ==== 1. Crear el hook 'post-receive' en el lado servidor: sudo vim /srv/git/test.git/hooks/post-receive Con el siguiente contenido: #!/bin/bash # Please adjust this setting RECIPIENTS="user1@example.com,user2@example.com" GIT="/usr/bin/git" SENDMAIL="/usr/sbin/sendmail" export USER_EMAIL=$($GIT log -1 --format=format:%ae HEAD) REPOSITORY=${PWD##*/} MAIL_CONTENT=`$GIT log --name-status HEAD^..HEAD` SUBJECT=$USER_EMAIL" updated git repo '"$REPOSITORY"'" $SENDMAIL "$RECIPIENTS" < chmod +x /srv/git/test.git/hooks/post-receive 2. Hacer un commit Resultado: el directorio "/srv/www/test" tendria que tener el contenido de del repositori "/srv/git/test.git" expandido ==== GITHUB ==== Vamos a Settings "SSH and GPG keys" y añadimos la clave. Creamos el repositorio en GITHUB. Mejor no inicializar con README.md Allí pone las instrucciones: git init . git add . git commit -m "primer commit" git remote add origin git@github.com:iwanttobefreak/docker-selenium.git git push -u origin master ====== Deshacer un commit manteniendo cambios en local ====== Si hacemos un commit antes de un pull y en el servidor hay cambios pero nuestro commit no afecta a esos cambios, para evitar conflictos, deshacemos el commit pero manteniendo los cambios en local: git reset --soft HEAD^