Hablo de mí porque es el hombre que tengo más a mano.

Miguel de Unamuno

menú
 

Snippets.

Git.

# Creación y gestión de repositorios ## añadir *usuario* al fichero de permisos [quitar la -c si ya esta creado] ```sh htpasswd -c /etc/apache2/dav_git.passwd *usuario* ``` ## crear *nombreRepositorio* (como root) ```sh mkdir /var/www/git-repos/*nombreRepositorio* cd /var/www/git-repos/*nombreRepositorio* git --bare init git update-server-info chown -R www-data.www-data . ``` > añadir al fichero _/etc/apache2/conf-available/git.conf_ las lineas necesarias para el nuevo *nombreRepositorio* [copiar uno existente] y recargar la configuracion de apache ## añadir (si no existe) el fichero $HOME/.netrc (para cada usuario), con las lineas: [machine puede ser una IP o un nombre de maquina] ``` machine login password ``` después de editarlo ejecutar `chmod 600 ~/.netrc` si fuera necesario ## configuracion para apache Activar los modulos necesarios con: ```sh a2enmod dav dav_fs cgi alias env rewrite ``` poner en el archivo _/etc/apache2/conf-available/git.conf_, lo siguiente: ``` ########################### ## configuracion smart HTTP ########################### SetEnv GIT_PROJECT_ROOT /var/www/git-repos SetEnv GIT_HTTP_EXPORT_ALL SetEnv REMOTE_USER $REDIRECT_REMOTE_USER #ScriptAlias /git/ /usr/lib/git-core/git-http-backend/ ScriptAliasMatch "(?x)^/git/(.*/(HEAD | info/refs | objects/(info/[^/]+ | [0-9a-f]{2}/[0-9a-f]{38} | pack/pack-[0-9a-f]{40}\.(pack|idx)) | git-(upload|receive)-pack))$" /usr/lib/git-core/git-http-backend/$1 Options +ExecCGI ###################################### ## configuracion para repositorios git ###################################### Alias /git /var/www/git-repos Allow from all Order allow,deny Options Indexes FollowSymLinks MultiViews # SetHandler git-http-backend # Options +ExecCGI DAV On AuthType Basic # AuthName "Ejemplo repo GIT sargazos.net" AuthUserFile /etc/apache2/dav_git.passwd Require valid-user ############### ## repositorios ############### AuthName "Ejemplo de repositorio GIT sargazos.net" ``` y activarlo con `a2enconf git` # Comandos ## ver que ficheros se enviaran en el proximo push ```sh git diff --stat --cached [remote/branch] ``` ejemplo para el repositorio en el directorio actual y la rama master ```sh git diff --stat --cached origin/master ``` ## ver el codigo modificado que se enviara en el proximo push ```sh git diff [remote repo/branch] ``` ## crear una rama (branch) y colocarse en ella ```sh git branch test_rama git checkout test_rama ``` o, abreviado: `git checkout -b test_rama` ## mezclar una rama, primero se va a la rama en la que se mezclara (en este caso en master) ```sh git checkout master git merge test_rama ``` si no se necesita _test_rama_ puede ser conveniente borrarla, no se pierden los cambios mezclados: `git branch -d test_rama` ## cambiar de rama (trabajar en otra) ```sh git fetch origin /*recupera la informacion de las ramas bajo "origin", puede omitirse "origin" y se recuperara informacion de todas*/ git branch -v -a /*ver ramas*/ git checkout -b test origin/test /*check out the branch you are interested in*/ ``` ## guardar nombre de usuario y contraseña en linux ("store" guarda en memoria la contraseña durante 15 minutos, "cache" la guarda permanentemente en disco en texto plano): git config --global credential.helper cache //git config --global credential.helper store --file ~/.my-credentials //->guarda las credenciales en el fichero "~/.my-credentials" /*y luego clonar el repositorio con: */ git clone http://nombreusuario:contraseña@rutaservidor.tld/rutarepositorio.git /*en OSX (y luego clonar el repositorio): */ git config --global credential.helper osxkeychain /*en windows (y luego clonar el repositorio): */ git config --global credential.helper winstore ## show all git configurations ```sh git config --list ``` show a specific key: `git config user.name` ## ver el estado del repositorio local, comparado con el remoto (origin en el ejemplo) ```sh git remote show origin ``` ## crear annotated tag "v1.4" es el nombre del tag en este ejemplo, sin mas se crea para el commit actual, si se quiere expecificar para un commit concreto (uno pasado) hay que añadir el checksum del commit al comando ```sh git tag -a v1.4 -m 'mensaje informativo' ``` los tags no se envian (por defecto) en push debe incluirse --tags para que se envien ```sh git push --tags ``` ## log "grafico" ```sh git log --graph ``` ### log simplificado y "grafico" ```sh git log --oneline --graph ``` ### log simplificado, "grafico" y con informacion extra (como la de los tags) ```sh git log --oneline --graph --decorate ``` ## controlar añadidos automáticos a commit ```sh git commit -a //-> solo añade al commit ficheros que ya estan bajo control de version y que han sido modificados o borrados, no nuevos git commit -A //-> añade al commit todo lo que no este en .gitignore ``` ## deshacer cambios de los que no se haya hecho commit esto hace un checkout de nombre_fichero tomando lo que haya en HEAD (o la rama en la que estemos actualmente) ```sh git checkout nombre_fichero ``` si coincide que _nombre_fichero_ es tambien el nombre de la rama en la que estamos debe ponerse: `git checkout -- nombre_fichero` ## git will pull down the remote changes, rewind your local branch, then replays all your changes over the top of your current branch one by one, until you're all up to date ```sh git pull -rebase ``` ## listar tipos (tipos git) de ficheros en lugar de deleted se puede poner modified o cualquier otro "tipo" git ```sh git ls-files --deleted ``` ## borrar por tipos (tipos git) ```sh git rm `git ls-files --deleted` ``` ## alias de comandos en ~/.gitconfig añadir en la seccion [alias] (crearla si no existe), si es comando git no debe ponerse "git status", solo "status" alias = comandoGit alias = !comandoShell ``` [alias] co = checkout st = status # list files ls = ls-files # list deleted files lsd = ls-files --deleted # ejemplo shell, borrado de ficheros deleted rmd = !git rm `git ls-files --deleted` ``` ## Combine the staged changes with the previous commit and replace the previous commit with the resulting snapshot. Running this when there is nothing staged lets you edit the previous commit’s message without altering its snapshot. ```sh git commit --amend ```