Git, GitHub y Publicación Web
228 |Índice
230 |-
232 |
- 1. Instalación de git 233 |
- 2. GitHub 234 |
- 3. Llave SSH 235 |
- 4. Cambiar el editor por defecto 236 |
- 5. Configuración 237 |
- 6. Crear un repositorio 238 |
- 7. Clonar un repositorio 239 |
- 8. Estado del repositorio 240 |
- 9. Información de cambios en el repositorio 241 |
- 10. Añadir y modificar documentos 242 |
- 11. Renombrar archivos o directorios 243 |
- 12. Actualizar repositorio 244 |
- 13. Deshacer cambios 245 |
- 14. Pull request 246 |
- 15. Borrar rama 247 |
- 16. Mantener un repositorio forkeado actualizado 248 |
- 17. Publicación web 249 |
- 18. Gitignore 250 |
- 19. Problemas 251 |
- 20. Pruebas 252 |
- 21. Bibliografía 253 |
257 | Notas sobre git y Github: 258 |
259 | 260 |-
261 |
- git 262 |
- github 263 |
- gestión de proyectos 264 |
- crear copias de proyectos 265 |
- adaptar proyectos 266 |
- participar en proyectos. 267 |
270 | Puedes trabajar con git desde herramientas gráficas o desde la línea de comandos. 271 |
272 | 273 |274 | En este caso vamos a trabajar con la línea de comandos, preferiblemente en GNU/Linux. 275 |
276 | 277 | 278 |1. Instalación de git
280 |
282 | En GNU/Linux, tan solo hay que instalar git-core
:
283 |
apt-get install git-core 286 |287 |
290 | En Mac se puede instalar el instalador gráfico de git y en Windows, git for Windows. 291 |
292 | 293 |294 |298 | 299 |295 | Para usar git desde la terminal en Mac hay que activar las funciones de Xcode. 296 |
297 |
300 | Si queremos disfrutar de una terminal potente, podríamos usar Cygwin en Windows o la Terminal en Mac. 301 |
302 | 303 |
304 | Comprobamos que se ha instalado git con la opción --version
305 |
git --version 309 |310 |
313 | También tenemos los instaladores oficiales de git: 314 |
315 |-
316 |
- Mac, http://www.git-scm.com/download/mac 317 |
- Windows, http://www.git-scm.com/download/win 318 |
2. GitHub
324 |326 | Crea una cuenta en GitHub 327 |
328 | 329 |330 | Si no te atreviste con el paso anterior, puedes usar estos programas de escritorio para Windows y Mac: 331 |
332 | 333 |-
334 |
- Windows: http://windows.github.com y primeros pasos 335 |
- Mac OS X: http://mac.github.com y primeros pasos 336 |
-
339 |
- Wiki
340 |341 |368 | 369 |342 | En GitHub se puede añadir el wiki como un submódulo, tal como recuerdan aquí: 343 |
344 | 345 |346 |349 | 350 |git submodule add git://github.com/you/proj.wiki 347 |
348 |351 | Que podríamos enlazar con nuestro directorio preferido: 352 |
353 | 354 |355 |358 | 359 |git submodule add git://github.com/you/proj.wiki vocabulary 356 |
357 |360 | Ahí debería haber al menos dos archivos: 361 |
362 |-
363 |
Home.md
, donde estaría la información de portada del wiki.
364 | _Sidebar-vocabulary.md
, el menú de la derecha del wiki.
365 | _Footer.md
, información al pie.
366 |
-
370 |
- Qué son los submódulos
371 |372 |387 |373 | Como su propio nombre indica, son parte de un repositorio git. A efectos prácticos, funcionan como un 374 | subrepositorio, un repositorio dentro de un repositorio. 375 |
376 | 377 |378 | Para qué se pueden utilizar: 379 |
380 |-
381 |
- Se pueden utilizar para separar código en submódulos. 382 |
- Pueden ser parte de más de un repositorio, por lo que pueden compartirse con otros proyectos/repositorios, 383 | de tal forma que cuando se actualice ese submódulo se actualizará en todos los repositorios donde está como 384 | submódulo. 385 |
-
388 |
- Funcionamiento
389 |390 |396 |391 | Cuando añades un submódulo a un repo, añades el código al repo y queda registrada la información que describe 392 | a qué commit está apuntando el submódulo. El archivo
395 |.gitmodules
almacena la versión del submódulo cuando es 393 | añadido. 394 |
397 | - Añadir un submódulo
398 |399 |415 |400 | Se añade un submódulo de la siguiente manera: 401 |
402 | 403 |404 |409 | 410 |405 | git submodule add git@github.com:url_a/mi-submodulo.git ruta-donde-quiero-el-submodulo 406 |
407 | 408 |411 | De esta manera se pasa el código y se añade información al repositorio principal sobre el submódulo, lo que 412 | contiene el commit a donde apunta el submódulo, que será el commit de la rama por defecto. 413 |
414 |
416 | - Obtener el código
417 |418 |428 |419 | Si se crea el submódulo, las otras personas tienen que inicializar el submódulo. Primero obtienes la 420 | información con
422 | 423 |git fech
o bien descargamos información y código congit pull
y después se inicializan congit submodule init
. 421 |424 | Si se clona un repositorio con submódulos, también se tiene que correr este comando para obtener el código del 425 | submódulo ya que no lo hace automáticamente con
427 |git clone
. 426 |
429 | - Actualizaciones del submódulo
430 |431 |437 |432 | Si actualizamos el submódulo, dado que es un repositorio separado, también tendremos que actualizar el repo 433 | principal ya que su último commit apunta al anterior. Para actualizar, desde el repo principal,
436 |git add
, 434 |git commit
ygit push
. 435 |
438 | - Mantener actualizados los submódulos
439 |440 |444 |441 | Si otras personas hicieron cambio en el submódulo, hay que actualizar el código con
443 |git submodule update --remote
. 442 |
445 | - Truco
446 |447 |467 |448 | Si lanzamos
450 | 451 |git submodule update --init
, inicializamos los submódulos. 449 |452 | En caso de tener submódulos dentro de submódulos, añadimos
454 | 455 |--recursive
al final de la sentencia. 453 |456 | Recuerda que se pueden hacer
458 | 459 |alias
engit
, por lo que podríamos crear uno tal que así: 457 |460 | git config --global alias.update '!git pull && git submodule update --init --recursive' 461 |
462 | 463 |464 | De tal forma que con
466 |git update
inicializaríamos correctamente el repositorio y el/los submódulo(s). 465 |
468 |
469 | - Gestión de submódulos
470 |471 |475 |472 |
474 |mdlr
se declara como una herramienta de git para gestionar submódulos fácilmente. 473 |
476 |
478 |
480 |
3. Llave SSH
485 |487 |491 | 492 |488 | Si no sabes qué es SSH, sáltate esto 489 |
490 |
493 | Las claves SSH son una forma de identificar ordenadores de confianza sin comprometer contraseñas. Se peude generar unas claves SSH y añadir la clave pública de GitHub para que se produzca la conexión. 494 |
495 | 496 |497 | GitHub recomienda revisar regularmente la lista de claves SSH y revocar aquellas que no se usen, no se hayan usado o no se vayan a usar. 498 |
499 | 500 |501 | Puedes conectarte por ssh y activar la llave ssh para conectarte de forma autentificada automáticamente. Vayamos paso a paso. 502 |
503 |-
506 |
- Comprobación de claves
507 |508 |521 |509 | Primero comprobamos que contamos con clave ssh en el equipo: 510 |
511 | 512 |513 |516 | 517 |ls -la ~/.ssh 514 |
515 |518 | Si aparece un listado de claves, podremos saltarnos el siguiente paso. Si no, debemos generar unas claves. 519 |
520 |
522 |
523 | - Generar claves ssh
524 |525 |561 | 562 |526 | Necesitas generar una clave ssh el equipo local desde el que te conectas: 527 |
528 | 529 |530 |533 | 534 |ssh-keygen -t rsa -b 4096 -C "correo-electronico@dominio.com" 531 |
532 |535 | Lo cual crea una nueva clave ssh y utiliza el correo electrónico como etiqueta. 536 |
537 | 538 |539 | Si todo va bien, mostrará el mensaje de generación de la clave, pedirá dónde almacenarla y se puede añadir una contraseña: 540 |
541 | 542 |543 | Generating public/private rsa key pair. 544 | Enter file in which to save the key (/home/usuarix/.ssh/id_rsa): 545 | Enter passphrase (empty for no passphrase): 546 | Enter same passphrase again: 547 | Your identification has been saved in /home/usuarix/.ssh/id_rsa. 548 | Your public key has been saved in /home/usuarix/.ssh/id_rsa.pub. 549 | The key fingerprint is: 550 | (...) 551 |
552 | 553 |554 |
556 | 557 |(...)
es donde aparece la clave. 555 |558 | Ahora que ya tenemos la clave, la pegamos en GitHub en las preferencias, en el apartado "SSH and GPG keys". 559 |
560 |-
563 |
- Copia de clave con método
pbcopy
564 |565 |588 |566 | Para seleccionar la clave, podemos emplear el método MacOSX
568 | 569 |pbcopy
, que podemos hackear en GNU/Linux con un alias a partir dexsel
: 567 |570 |574 | 575 |alias pbcopy='xsel --clipboard --input' 571 | alias pbpaste='xsel --clipboard --output' 572 |
573 |576 | De esta forma ya podemos utilizar
578 | 579 |pbcopy
: 577 |580 |583 | 584 |pbcopy < ~/.ssh/id_rsa.pub 581 |
582 |585 | Y pegamos en GitHub. A partir de ahí ya podremos conectarnos con GitHub de forma segura. 586 |
587 |
589 |
590 | - Copia de clave con
more
y copiar y pegar
591 |592 |601 |593 | Podemos hacerlo en dos pasos, mostrando la clave y copiándola con el ratón: 594 |
595 | 596 |597 |600 |more ~/.ssh/id_rsa.pub 598 |
599 |
602 |
604 |
605 | - Copia de clave con método
- Configuración local y comprobación
606 |607 |646 |608 | Ya está casi todo hecho. Ahora falta decirle a git que nos conectamos a GitHub de forma segura. Para ello, podemos comprobar que lo podemos hacer, y en el mismo paso aprobar la conexión: 609 |
610 | 611 |612 |615 | 616 |ssh -T git@github.com 613 |
614 |617 | Nos pedirá la contraseña que hayamos puesto a la clave si lo hemos hecho, lo introducimos y listo. Si no, nos saldrá directamente el mensaje: 618 |
619 | 620 |621 | The authenticity of host 'github.com (192.30.252.1)' can't be established. 622 | RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. 623 | Are you sure you want to continue connecting (yes/no)? 624 |
625 | 626 |627 | Nótese que
629 | 630 |192.30.252.1
es una de las direcciones IP de GitHub, pero podría salir otra. Lo más importante es fijarse en el fingerprint. 628 |631 | Le decimos que sí y entonces GitHub nos responde: 632 |
633 | 634 |635 | Hi usuarix! You've successfully authenticated, but GitHub does not provide shell access. 636 |
637 | 638 |639 | Donde
641 | 642 |usuarix
es nuestrx usuarix en GitHub. Ya está hecho. 640 |643 | Si nos apareciese el mensaje
645 |access denied
, recomiendo seguir los pasos anteriores o este artículo de GitHub para comprobar que lo hemos hecho bien. 644 |
647 |
4. Cambiar el editor por defecto
652 |
654 | Por defecto, bash y git vienen con el editor vi
por defecto. Para cambiarlo, tal como explican en stackoverflow, podemos hacerlo en una o en
655 | ambas.
656 |
-
659 |
- core.editor
660 |661 |673 |662 | Para usar
664 |nano
o el editor de texto CLI de nuestra elección, corremos: 663 |665 | git config --global core.editor "nano" 666 |
667 | 668 |669 | La opción
672 |--global
es para hacerlo en todo git. Si solo quisiéramos en este repositorio, sería sin esa 670 | opción. 671 |
674 | - nano como editor por defecto
675 |676 |685 |677 | Lo hacemos en dos líneas, con dos variables de entorno: 678 |
679 | 680 |681 | export VISUAL=nano 682 | export EDITOR=$VISUAL 683 |
684 |
686 |
5. Configuración
690 |
692 | La primera vez que usas Git te pedirá tu nombre de usuarix y dirección de correo. Lo podemos agregar con el comando config
.
693 |
696 | Tal como comenta sarigalin hay tres niveles de configuración de git
, de más específico a más general, siendo
697 | la más específica la que sobreescribe la más general.
698 |
-
701 |
project
, configuración de proyecto, solo disponible para el actual proyecto. Se almacena en.git/config
702 | en el directorio del proyecto.
703 | global
, configuración global para todos los proyectos del usuario del sistema. Se almacena en~/.gitconfig
.
704 | system
, configuración para el sistema, para todas las cuentas del sistema.
705 |
708 | Por tanto, si queremos tener una configuración para el sistema, escribiremos: 709 |
710 | 711 |712 | git config --system user.name "Fulanito de Tal" 713 |714 | 715 |
716 | Si queremos que sea global para nuestra cuenta: 717 |
718 | 719 |720 | git config --global user.name "Fulanito de Tal" 721 |722 | 723 |
724 | Y si queremos que sea especifica del repositorio, que es la configuración por defecto, no hay que añadir
725 | --project
como en los otros dos casos.
726 |
729 | git config user.name "Fulanito de Tal" 730 |731 |
-
734 |
- Configuración global
735 |736 |766 |737 | Añado el nombre de la cuenta, en este caso el nombre de usuarix en GitHub: 738 |
739 | 740 |741 |745 |git config --global user.name "Nombre_de_Usuarix" 742 | 743 |
744 |746 | Añado la dirección de correo electrónico: 747 |
748 |749 |752 | 753 |git config --global user.email "usuarix@dominio" 750 |
751 |754 | Si no queremos aplicar esta configuración a todo el sistema y solo a este repositorio porque manejamos más usuarixs de GitHub, por ejemplo, no pongáis la opción
756 | 757 |--global
755 |758 | Cuando hagamos luego
760 |git push
, nos pedirá el usuario y contraseña por https: 759 |761 | Username for 'https://github.com': usuarix 762 | Password for 'https://usuarix@github.com': 763 | 764 |
765 |
767 |
6. Crear un repositorio
772 |-
775 |
- Opción GitHub al final
776 |777 |781 | 782 |778 | Podemos iniciar el proyecto git en un directorio cualquiera, ya creado, o bien crearlo en uno nuevo. 779 |
780 |-
783 |
- Nuevo repositorio en directorio nuevo
784 |785 |794 |786 | Si queremos crearlo en uno nuevo, iniciamos el repositorio con la opción
788 | 789 |init
seguida del nombre del directorio: 787 |790 |793 |git init nombre_repo 791 |
792 |
795 |
796 | - Nuevo repositorio en directorio existente
797 |798 |809 |799 | También podemos crear un directorio con
801 | 802 |mkdir
y luego inicializar ese directorio solo con la opcióninit
: 800 |803 |808 |mkdir nombre_directorio 804 | cd nombre_directorio 805 | git init 806 |
807 |
810 |
811 | - Pasarlo a GitHub
812 |813 |871 |814 | Para que el repositorio o proyecto también esté en GitHub, vamos a Github y creamos un proyecto nuevo que llamamos con el nombre del directorio que hemos creado o del directorio que ya existía. 815 |
816 | 817 |818 |
822 | 823 |819 | No marques la opción Initialize with README y tampoco le asignes licencia, vamos a crear un repositorio vacío para que nos sea más fácil realizar el primer
821 |push
. 820 |824 | Conectamos el directorio local donde nos encontramos con GitHub de la siguiente manera: 825 |
826 | 827 |828 |831 | 832 |git remote add origin https://github.com/cuenta/nombre-repositorio 829 |
830 |833 | Donde le decimos a
835 | 836 |git
que añadimos ungit
remoto en la URL de GitHub. 834 |837 | Hemos de crear al menos un archivo README.md donde puedes poner la información del proyecto: 838 |
839 | 840 |841 |844 | 845 |echo "# Otro proyecto ni más ni menos" >> README.md 842 |
843 |846 | Añadimos el archivo a git: 847 |
848 | 849 |850 |853 | 854 |git add README.md 851 |
852 |855 | Lo comiteamos: 856 |
857 |858 |861 | 862 |git commit -m "mi primer commit" 859 |
860 |863 | Y lo subimos a GitHub: 864 |
865 |866 |870 |git push -u origin master 867 | 868 |
869 |
872 |
874 | - Nuevo repositorio en directorio nuevo
- Opción GitHub
875 |876 |894 |877 | Primero creas un repositorio con un nombre en Github. 878 |
879 | 880 |881 | Github te sugiere varias formas de copiarlo en local, en el propio ordenador. Os recomiendo seguir estos pasos: 882 |
883 | 884 |885 |893 |echo "# Proyecto de ..." >> README.md 886 | git init 887 | git add README.md 888 | git commit -m "primer commit" 889 | git remote add origin https://github.com/cuenta/nombre-repositorio 890 | git push -u origin master 891 |
892 |
895 |
896 | - Comprobaciones
897 |898 |929 |899 | Comprobamos su estado con la opción
901 | 902 |status
: 900 |903 |906 | 907 |git status 904 |
905 |908 | Si listamos el directorio, comproboremos que tenemos un directorio oculto llamado
910 | 911 |.git
909 |912 |915 | 916 |ls -la 913 |
914 |917 | Cuando quieras que el directorio deje de ser un repositorio git, tan solo hay que borrar este directorio oculto con
919 | 920 |rm -rf
: 918 |921 |924 | 925 |rm -rf .git 922 |
923 |926 | Si en este caso podríamos saber el status de git, el mensaje nos avisaría diciendo que no se trata de un repositorio git. 927 |
928 |
930 |
7. Clonar un repositorio
935 |937 | Vamos a cualquier proyecto de GitHub y copiamos la URL que aparece en la casilla de HTTPS. En este caso, vamos a clonar el proyecto Boilerplate de Paul Irish: 938 |
939 | 940 |git clone git://github.com/paulirish/html5-boilerplate.git 942 |943 |
946 | Si en vez de clonar un repositorio lleno queremos hacerlo vacío, hay que poner: 947 |
948 | 949 |git clone --bare https://github.com/exampleuser/old-repository.git 951 | 952 |953 |
8. Estado del repositorio
959 |
961 | Podemos ver el estado del repositorio con la opción log
962 |
git log 966 |967 |
970 | Que nos da toda esta información: 971 |
972 | 973 |-
974 |
- La lista de cada
commit
975 | - El hash SHA1 del commit, una cadena única de cada commit 976 |
- La autoría 977 |
- El mensaje que describía el cambio 978 |
9. Información de cambios en el repositorio
984 |
986 | Si queremos ver los cambios en esta versión, debemos utilizar la opción diff
:
987 |
git diff 991 |992 |
10. Añadir y modificar documentos
998 |11. Renombrar archivos o directorios
1016 |-
1019 |
- Renombrar un archivo
1020 |1021 |1028 |1022 |1027 |git mv archivo1 archivo2 1023 | git add archivo2 1024 | git push -u origin master 1025 |
1026 |
1029 |
1030 | - Renombrar un directorio
1031 |1032 |1048 |1033 |1038 | 1039 |git mv directorio1 directorio2 1034 | git add directorio2 1035 | git push -u origin master 1036 |
1037 |1040 | Ver los cambios que vamos a realizar con la opción
1042 | 1043 |-n
, el atajo de--dry-run
1041 |1044 |1047 |git mv -n nombre_directorio_antiguo nombre_directorio_nuevo 1045 |
1046 |
1049 |
1050 | - Case sensitive
1051 |1052 |1082 |1053 | Renombrar en sistemas que no distinguen entre mayúsculas y minúsculas, puede dar un error cuando modifiquemos el nombre por caracteres en mayúsculas, por lo que tendríamos que hacer: 1054 |
1055 | 1056 |1057 |1060 | 1061 |git mv directorio1 tempname && git mv tempname Directorio2 1058 |
1059 |1062 | Si nuestro sistema no es case sensitive, puede ocurrir que queramos tener dos ficheros que se llaman igual, pero uno emplea mayúsculas y otro minúsculas, y git no nos lo deje incluir. 1063 |
1064 | 1065 |1066 | Por ejemplo, si tenemos
1068 | 1069 |TFM.html
ytfm.html
en local, y añadimos a git uno de ellos, luego no podremos añadir el otro a no ser que configuremos nuestro git como case sensitive: 1067 |1070 |1073 | 1074 |git config core.ignorecase false 1071 |
1072 |1075 | Ahora ya podremos hacer
1077 | 1078 |git add
con éxito. 1076 |1079 | La solución viene de Stackoverflow 1080 |
1081 |
1083 |
1084 |
1085 |
1086 | - Borrar del repositorio
1087 |1088 |1098 |1089 | Borrar un archivo del repositorio sin borrarlo del sistema de directorios local: 1090 |
1091 | 1092 |1093 |1097 |git rm --cached archivo.org 1094 | 1095 |
1096 |
1099 |
1100 | - Borrar un directorio
1101 |1102 |1111 |1103 | Para borrar un directorio: 1104 |
1105 |1106 |1110 |git rm --cached -r directorio 1107 | 1108 |
1109 |
1112 |
12. Actualizar repositorio
1117 |
1119 | Si queremos actualizar el repositorio con los cambios que se hayan producido en él, lo haremos con la opción pull
:
1120 |
git pull 1124 |1125 |
13. Deshacer cambios
1131 |
1133 | Si realizamos un commit
pero queremos volver atrás, si no hemos realizado push, es:
1134 |
git reset --hard HEAD-1 1138 | 1139 |1140 |
1143 | Si hemos realizado el commit
lo mejor es hacer revert, tal como explican
1144 |
1148 | git revert <hash-or-ref> 1149 |1150 | 1151 |
1152 | Para saber el hash-or-ref
se puede consultar la parte de Commits de la página del repo o
1153 | bien con el comando git log --pretty=online
.
1154 |
1157 | Luego hacemos git push
para actualizar el repositorio con el cambio revertido.
1158 |
14. Pull request
1164 |1166 | Haremos un pull request cuando queramos contribuir con nuestros cambios -mejoras, corrección de errores, actualizaciones- a un repositorio que ya existe. 1167 |
1168 | 1169 |1170 | Por eso, lo primero que tenemos que hacer es crear una copia del proyecto: 1171 |
1172 | 1173 |git clone ruta-proyecto.git 1175 | 1176 |1177 |
1180 | Luego creamos una rama donde hacer las modificaciones: 1181 |
1182 | 1183 |1185 | git checkout -b nueva-rama 1186 | 1187 |1188 |
1191 | Al crearla nos movemos a esa rama. Podemos comprobarlo si tenemos el asterisco en la rama deseada: 1192 |
1193 | 1194 |git branch 1196 |1197 |
1200 | Si no estamos ahí, vamos con: 1201 |
1202 |git checkout nueva-rama 1204 |1205 |
1208 | Luego hacemos las modificaciones que sean a nuestros archivos, las añadimos, las comiteamos y las subimos a la rama creada: 1209 |
1210 | 1211 |git add ruta-nuevos-archivos
1213 | git commit -m "comentario sobre cambios"
1214 | git push -u origin nueva-rama
1215 |
1216 |
1219 | Comprobamos el estado de git con git status
1220 |
git status 1224 |1225 |
1228 | Si todo está bien, vamos a nuestra copia del proyecto en Github y en la página del repo pondrá que hay una rama sobre la que hacer un pull-request, pinchamos y seguimos los pasos. 1229 |
1230 | 1231 |1232 | Si no hay discusión, si está todo bien, el administrador lo aprobará y entonces podremos borrar la rama. Nos movemos a master y desde ahí borramos en local y en el servidor: 1233 |
1234 | 1235 |git checkout master 1237 | git branch -d nueva-rama 1238 | git push origin --delete nueva-rama 1239 | 1240 |1241 |
15. Borrar rama
1246 |1248 | En local: 1249 |
1250 | 1251 |git branch -d rama-local 1253 | 1254 |1255 |
1258 | Si no se borra así, con -D
1259 |
git branch -d rama-local 1263 | 1264 |1265 |
1268 | En remoto:: 1269 |
1270 | 1271 |git push origin --delete rama-remota 1273 | 1274 |1275 |
1278 | o también: 1279 |
1280 |git push origin :ramaremota 1282 | 1283 |1284 |
16. Mantener un repositorio forkeado actualizado
1290 |
1292 | Añades remoteando
como servidor remoto:
1293 |
git remote add remoteando git://ruta-repositorio.git 1297 | git remote add remoteando https://github.com/cuenta/nombre-repositorio.git 1298 |1299 |
1302 | Actualizas remoteando pero sin integrar los cambios 1303 |
1304 |git fetch upstream 1306 |1307 |
1310 | Integras los cambios con la versión local: 1311 |
1312 | 1313 |git pull upstream master 1315 | 1316 |1317 |
17. Publicación web
1323 |1325 | Si el contenido del proyecto es HTML, podemos utilizar a GitHub como servidor web de nuestro contenido web, a través de la funcionalidad Pages. 1326 |
1327 | 1328 |1329 | Se puede hacer de dos maneras: 1330 |
1331 |-
1334 |
- Nombre del repositorio
1335 |1336 |1340 |1337 | Si el nombre del repositorio sigue la estructura "nombre-de-usuarix.github.io", el proyecto que cuelgue de ahí se publicará automágicamente en http://nombre-de-usuarix.github.io 1338 |
1339 |
1341 |
1342 | - Rama gh-pages
1343 |1344 |1416 |1345 | Cualquier repositorio que tenga la rama
1347 | 1348 |gh-pages
será publicado, y se verá su contenido web. 1346 |1349 | Por ejemplo, si tenemos un repositorio con nombre
1351 | 1352 |mi-proyecto
que contiene una web y queremos publicarlo como página web, solo tenemos que crear una nueva ramabranch
de nuestro proyecto que llamaremosgh-pages
: 1350 |1353 |1356 | 1357 |git checkout -b gh-pages 1354 |
1355 |1358 | Luego ponemos ahí todo el contenido de la rama
1360 | 1361 |master
: 1359 |1362 |1365 | 1366 |git merge master 1363 |
1364 |1367 | Por último subimos a GitHub todo lo que tenemos en la nueva rama: 1368 |
1369 | 1370 |1371 |1375 | 1376 |$ git push -u origin gh-pages 1372 | 1373 |
1374 |1377 | En unos minutos, GitHub lo habrá publicado en una URL del tipo http://nombre-de-usuarix.github.io/mi-proyecto 1378 |
1379 | 1380 |1381 | Si tu repositorio es solo una web, puedes optar por utilizar solo la rama
1383 | 1384 |gh-pages
en vez de mantener las dos ramas. Para ello tienes que elegir en GitHub qué rama utilizas. 1382 |1385 | Si mantienes las dos, actualizar la web se puede convertir en algo tedioso si lo haces habitualmente. 1386 |
1387 | 1388 |1389 | Para facilitar la tarea, brettterpstra.com recomienda una solución, puedes editar
1391 | 1392 |.git/config
y añadir estas líneas a[remote "origin"]
: 1390 |1393 |1397 | 1398 |push = +refs/heads/master:refs/heads/gh-pages 1394 | push = +refs/heads/master:refs/heads/master 1395 |
1396 |1399 | Quedando así: 1400 |
1401 | 1402 |1403 |1411 | 1412 |[remote "origin"] 1404 | fetch = +refs/heads/*:refs/remotes/origin/* 1405 | url = git@github.com:user/repo.git 1406 | push = +refs/heads/master:refs/heads/gh-pages 1407 | push = +refs/heads/master:refs/heads/master 1408 | 1409 |
1410 |1413 | De esta manera, cuando hagas git push lo harás en los dos repos. 1414 |
1415 |
1417 |
18. Gitignore
1421 |1423 | https://git-scm.com/docs/gitignore 1424 |
1425 |19. Problemas
1429 |-
1432 |
- 403 fatal: HTTP request failed
1433 |1434 |1443 |1435 | http://stackoverflow.com/questions/7438313/pushing-to-git-returning-error-code-403-fatal-http-request-failed 1436 |
1437 |1438 |1442 |git remote set-url origin https://yourusername@github.com/user/repo.git 1439 | 1440 |
1441 |
1444 |
1445 | - git: error: src refspec master does not match any
1446 |1447 |1457 |1448 | http://stackoverflow.com/questions/10568641/git-error-src-refspec-master-does-not-match-any 1449 |
1450 |1451 |1456 |git remote rm origin 1452 | git remote set-url origin git@.... 1453 | git push -u origin master 1454 |
1455 |
1458 |
1459 | - Please, commit your changes or stash them before you can merge.
1460 |1461 |1467 | 1468 |1462 | Si alguien o tú mismo en otro equipo ha actualizado el repositorio 1463 | mientras tú trabajabas y te sale este error, sin entrar en las 1464 | opciones con las ramas, tienes tres opciones: 1465 |
1466 |-
1469 |
- Comitear el cambio de la forma típica:
1470 |1471 |1476 |1472 |1475 |git commit -m "comentario" 1473 |
1474 |
1477 |
1478 | - Reservarlo o depositarlo en una pila o stack con
stash
:
1479 |1480 |1495 |1481 |1485 | 1486 |git stash 1482 | 1483 |
1484 |1487 | Ahí puedes hacer
1489 | 1490 |push
y aparece en orden inverso: 1488 |1491 |1494 |git stash pop 1492 |
1493 |
1496 |
1497 | - Descartar los cambios que has hecho
1498 |1499 |1505 |1500 |1504 |git reset --hard 1501 | 1502 |
1503 |
1506 |
1508 | - Comitear el cambio de la forma típica:
20. Pruebas
1514 |1516 | Try Git 1517 |
1518 |21. Bibliografía
1522 |-
1525 |
- Algunos recursos
1526 |1527 |1536 |-
1528 |
- Git, distributed is the new centralized 1529 |
- http://alistapart.com/article/get-started-with-git 1530 |
- http://progit.org/book/ch1-4.html 1531 |
- Mastering markdown, guía de Github https://guides.github.com/features/mastering-markdown/ 1532 |
- Qué es y cómo publicar nuestros proyectos en Github 1533 |
- Escenario de trabajo en git 1534 |
1537 |
1538 | - Git Github Course
1539 |1540 |1541 |
1542 |
1543 | - Cheatsheets
1544 |1545 |1552 |-
1546 |
- git cheat sheet 1547 |
1549 |
1551 |=====
1550 |
1553 | - Cheatsheets
1554 |1555 |1559 |-
1556 |
- Git cheat sheet 1557 |
1560 |