Professional Documents
Culture Documents
gitconfig
##Tutorial GIT
###Empezando
Lo primero que hay que hacer cuando te instalas GIT es establecer el nombre de
usuario y direccin de correo electrnico. Esto es importante porque en cada commit
de GIT utiliza esta informacin. Si usamos la lnea de comandos de git, estos
seran los comandos: (El `$` no hay que teclearlo, es el smbolo del sistema del
cliente git)
Por ejemplo, si necesitas saber la configuracin que tienes, puedes usar el comando
siguiente:
core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
help.format=html
user.name=Juan Antonio Tubio
user.email=jatubio@gmail.com
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
>Si usas un programa grfico Git, puedes configurar estos parmetros en el men
**Options** u **Opciones**.
###Ayuda de git.
Puedes obtener ayuda sobre un comando usando: `git help comando`.
Vamos a ver el flujo de estados y 'zonas' por las que pasa un fichero cuando lo
aadimos a un proyecto que est en un repositorio Git.
<html>
<head>
<title>Prueba de PHP</title>
</head>
<body>
<?php echo '<p>Hola Mundo</p>'; ?>
</body>
</html>
Desde el programa grfico Git, vamos a la opcin **Commit**. Y nos preguntar por
el mensaje del **commit**.
Cada **commit** es una 'versin', 'foto' o 'snapshot' de nuestro cdigo fuente. (En
este caso, nicamente de nuestro primer fichero `hola_mundo.php`). Y para
distinguir cada 'foto', podemos aadir un mensaje explicando en qu momento hicimos
esa foto o qu tiene esa foto de particular. Por ejemplo, podemos escribir:
'Aadido el fichero `hola_mundo.php` al repositorio'.
<html>
<head>
<title>Adios Mundo</title>
</head>
<body>
<?php echo '<p>Adios Mundo</p>'; ?>
</body>
</html>
Estos son los estados de cada fichero y el contenido de las zonas de trabajo:
Fichero `hola_mundo.php`: **Added* o **Staged**
Fichero `adios_mundo.php`: **Untracked** o **Not tracked**.
Zona **ndice**:
Fichero `hola_mundo.php`: Con el cambio en el Title. (Copia idntica a la de la
**Zona de Trabajo**)
Zona **Repositorio**:
Fichero `hola_mundo.php`: __Sin__ el cambio en el Title.
Estos son los estados de cada fichero y el contenido de las zonas de trabajo:
Fichero `hola_mundo.php`: **Unchanged** o **Committed**
Fichero `adios_mundo.php`: **Untracked** o **Not tracked**.
Zona **ndice**:
Fichero `hola_mundo.php`: Con el cambio en el Title. (Copia idntica a la de la
**Zona de Trabajo**)
Zona **Repositorio**:
Fichero `hola_mundo.php`: Con el cambio en el Title. (Copia idntica a la de la
**Zona de Trabajo**)
Fichero `hola_mundo.php`:
<html>
<head>
<title>Hola Mundo</title>
</head>
<body>
<?php echo '<p>Hola Mundo</p>'; ?>
<br />
Hola Universo.
</body>
</html>
Fichero `adios_mundo.php`:
<html>
<head>
<title>Hasta pronto Mundo</title>
</head>
<body>
<?php echo '<p>Adios Mundo</p>'; ?>
<br />
<br />
<hr>
Nos veremos pronto.
</body>
</html>
modified: adios_mundo.php
modified: hola_mundo.php
Estos son los estados de cada fichero y el contenido de las zonas de trabajo:
Fichero `hola_mundo.php`: **Modified** o **Unstaged**.
Fichero `adios_mundo.php`: **Added Modified** o **Staged Modified**.
Zona **ndice**:
Fichero `hola_mundo.php`: Con el cambio en el Title. (Copia idntica a la de la
**Zona de Trabajo**)
Fichero `adios_mundo.php`: Con la versin inicial.
Zona **Repositorio**:
Fichero `hola_mundo.php`: Con el cambio en el Title. (Copia idntica a la de la
**Zona de Trabajo**)
> Si ahora hiciramos un **commit** slo se almacenaran en el repositorio, las
versiones de ambos ficheros que se encuentran en el **ndice**.
Podemos aadir todos los cambios actuales al ndice con este comando:
$ git add .
Qu pasa si no queremos aadir todos los cambios en los ficheros y slo queremos
hacer commit de algunos cambios? Por ejemplo, no queremos aadir el cambio en el
'Title' del fichero `adios_mundo.php`.
Desde un programa grfico Git, seleccionamos ese archivo y segn el programa habr
varios modos de hacerlo. Por ejemplo:
En el programa **Source Tree**, cada bloque que haya cambiado se nos presentar
como un **hunk**, y podremos hacer **Stage hunk** o **Unstage hunk** para aadir o
quitar cada bloque de la zona **ndice**. Con ambas opciones, las copias en las
zonas **Zona de Trabajo** y **Repositorio** no se ven afectadas. nicamente se
modifica la copia de la zona **ndice**.
###Rename files
http://www.patrick-wied.at/blog/rename-files-and-folders-with-git
http://push.cwcon.org/learn/change-file-names.html
**OPTIONS**
-f
\--force
:
-k
:
Skip move or rename actions which would lead to an error condition. An error
happens when a source is neither existing nor controlled by Git, or when it would
overwrite an existing file unless _-f_ is given.
-n
\--dry-run
:
-v
\--verbose
:
http://grimoire.ca/git/config
http://stackoverflow.com/questions/6515582/what-should-go-in-a-default-git-config-
file
[alias]
b = branch
ci = commit
co = checkout
cob = checkout -b
d = diff
l = log
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s
%Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
lga = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s
%Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative --branches
st = status
fixup = !sh -c 'git commit -a -m \"fixup! $(git log -1 --format='%s' $@)\"' -
squash = !sh -c 'git commit -a -m \"squash! $(git log -1 --format='%s' $@)\"' -
ri = rebase --interactive
rc = rebase --continue
pr = push gerrit HEAD:refs/for/master
mt = mergetool
http://git-scm.com/book/es/v2/Customizing-Git-Git-Configuration
[diff]
renames = true
[diff]
renames = copies
http://www.javaworld.com/article/2113465/developer-tools-ide/git-smart-20-
essential-tips-for-git-and-github-users.html
http://codehero.co/git-desde-cero-personalizar-la-configuracion-de-git/
http://codehero.co/git-desde-cero-personalizar-la-configuracion-de-git/
http://git-scm.com/book/en/v1/Git-Basics-Tips-and-Tricks
http://wildlyinaccurate.com/a-hackers-guide-to-git/
https://gist.github.com/mwhite/6887990