====== 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^