{"id":102,"date":"2013-07-03T15:09:11","date_gmt":"2013-07-03T15:09:11","guid":{"rendered":"https:\/\/blogs.ua.es\/jpm33\/?p=102"},"modified":"2013-07-05T12:10:59","modified_gmt":"2013-07-05T12:10:59","slug":"git-repositorios-remotos-y-desarrollo-distribuido","status":"publish","type":"post","link":"https:\/\/blogs.ua.es\/jpm33\/2013\/07\/03\/git-repositorios-remotos-y-desarrollo-distribuido\/","title":{"rendered":"GIT: Repositorios remotos y desarrollo distribuido"},"content":{"rendered":"<h1>Introducci\u00f3n<\/h1>\n<p>Hace una semana publiqu\u00e9 una entrada\u00a0<a title=\"GIT: sistema de control de versiones ideal para programadores\" href=\"https:\/\/blogs.ua.es\/jpm33\/2013\/06\/26\/git-sistema-de-control-de-versiones-ideal-para-programadores\/\">introduciendo el sistema de control de versiones GIT<\/a>. Ayer a\u00f1ad\u00ed otra entrada donde d\u00ed unos <a title=\"GIT: Gu\u00eda sencilla para su uso cotidiano\" href=\"https:\/\/blogs.ua.es\/jpm33\/2013\/07\/02\/git-guia-sencilla-para-su-uso-cotidiano\/\">primeros pasos a git<\/a>. Hoy despu\u00e9s de unas horas de trabajo y recopilar ejemplos basados en mi trabajo diario ha llegado el momento de escribir sobre los <strong>repositorio remotos<\/strong>.<\/p>\n<p><span style=\"color: #000000;font-weight: bold\">Repositorios remotos<\/span><\/p>\n<p>Veamos un caso imaginario muy \u00fatil. \u00bfCual es nuestro escenario?<\/p>\n<ul>\n<li>Trabajamos 2+ desarrolladores en un proyecto com\u00fan.<\/li>\n<li>Disponemos de un equipo de trabajo donde d\u00eda a d\u00eda actualizamos un repositorio GIT local (a nuestro equipo) para controlar la evoluci\u00f3n de nuestro trabajo.<\/li>\n<li>Tenemos alg\u00fan colega\/compa\u00f1ero que trabaja desde su casa y tambi\u00e9n tiene su equipo donde controla su trabajo diario con su instalaci\u00f3n local de GIT.<\/li>\n<li>Adem\u00e1s, cabe la posibilidad que nosotros mismos tengamos en casa otro equipo desde el cual podemos trabajar otras horitas en casa.<\/li>\n<\/ul>\n<div>La primera pregunta, \u00bfc\u00f3mo organizar este l\u00edo de tantas personas trabajando en lo mismo sin que haya peligro de sobrescribir uno el trabajo del otro?<\/div>\n<div><\/div>\n<div>\n<dl>\n<dt><a href=\"https:\/\/blogs.ua.es\/jpm33\/files\/2013\/06\/GIT_distribuido.jpeg\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.ua.es\/jpm33\/files\/2013\/06\/GIT_distribuido.jpeg\" alt=\"Escenario de ejemplo: Repositorios GIT remotos y varios desarolladores\" width=\"585\" height=\"237\" \/><\/a><\/dt>\n<dd>Figura 1: Escenario de ejemplo. Repositorios GIT remotos y varios desarolladores<\/dd>\n<dd><\/dd>\n<\/dl>\n<\/div>\n<p>Bueno, pues ya que hablamos de control de versiones lo primero que entra en juego es un servidor donde crear un\/unos repositorio\/s GIT donde cada programador realiza un commit de su trabajo y as\u00ed el resto de colegas est\u00e9n al tanto de sus cambios (a parte habr\u00eda que hablar de ciertas pol\u00edticas o protocolos de trabajo sobre c\u00f3mo repartir el trabajo pero de eso no hablaremos ahora).<\/p>\n<h2>Crear el repositorio en el servidor remoto<\/h2>\n<p>Vamos a suponer que disponemos de un servidor con nombre\u00a0<strong>repositorios.net<\/strong>. Este servidor est\u00e1 disponible en Internet o en nuestra red local de trabajo (suponemos una m\u00e1quina Unix). Hemos creado un usuario llamado\u00a0<strong>git<\/strong>\u00a0cuya carpeta de trabajo en\u00a0<strong>\/home\/git<\/strong>. Queremos crear el repositorio para el proyecto\u00a0<strong>ejemplo<\/strong>.<\/p>\n<pre>git@repositorios.net:~\/$ mkdir ejemplo.git\r\ngit@repositorios.net:~\/ejemplo.git$ git --bare init\r\nInitialized empty Git repository in \/home\/git\/ejemplo.git\/<\/pre>\n<p>Ya disponemos de un repositorio (contendor) en crudo donde depositar nuestros commits locales o desde donde descargar las actualizaciones del proyecto realizadas por otros usuarios.<\/p>\n<p>Para poder acceder, desde nuestro directorio de trabajo debemos tener un repositorio git (Vamos a suponer una m\u00e1quina Windows):<\/p>\n<pre>$ git init\r\nInitialized empty Git repository in c:\/Workspace\/proyecto\/.git\/\r\n$ git add .\r\n$ git -a -m \"Inicio proyecto GIT\"\r\n\r\n31 files changed, 5873 insertions(+), 0 deletions(-)\r\ncreate mode 100644 .gitignore\r\ncreate mode 100644 .project\r\n...\r\nCounting objects: 38, done.\r\nDelta compression using up to 2 threads.\r\nCompressing objects: 100% (37\/37), done.\r\nWriting objects: 100% (38\/38), 82.87 KiB, done.\r\nTotal 38 (delta 1), reused 0 (delta 0)\r\nTo ssh:\/\/git@repositorios.net\/home\/git\/proyecto.git\r\n* [new branch] master &gt; master<\/pre>\n<p>Otro usuario, por ejemplo en un equipo Linux, podr\u00eda crear su copia de repositorio del siguiente modo:<\/p>\n<pre>jperez@jperez-debian:~\/gitsample$ git init\r\nInitialized empty Git repository in \/home\/user\/gitsample\/.git\/\r\njperez@jperez-debian:~\/Desktop\/borrar\/gitsample$ git remote add Matrix ssh:\/\/git@central.ovalus.com:101\/home\/git\/sagema.git\r\njperez@jperez-debian:~\/Desktop\/borrar\/gitsample$ git pull Matrix\r\ngit@central.ovalus.com's password:\r\nremote: Counting objects: 38, done.\r\nremote: Compressing objects: 100% (37\/37), done.\r\nremote: Total 38 (delta 1), reused 0 (delta 0)\r\nUnpacking objects: 100% (38\/38), done.\r\nFrom ssh:\/\/central.ovalus.com:101\/home\/git\/sagema\r\n* [new branch] master -&gt; Matrix\/master\r\nYou asked to pull from the remote 'Matrix', but did not specify\r\na branch. Because this is not the default configured remote\r\nfor your current branch, you must specify a branch on the command line.\r\njperez@jperez-debian:~\/Desktop\/borrar\/gitsample$ git pull Matrix master\r\ngit@central.ovalus.com's password:\r\nFrom ssh:\/\/central.ovalus.com:101\/home\/git\/sagema\r\n* branch master -&gt; FETCH_HEAD\r\njperez@jperez-debian:~\/Desktop\/borrar\/gitsample$ ls\r\ncss geo.html google848132b663ce25f4.html index.htm js menu.html responsive robots.txt template.php\r\njperez@jperez-debian:~\/Desktop\/borrar\/gitsample$ ls -lha\r\ntotal 76K\r\ndrwxr-xr-x 6 jperez jperez 4,0K jun 24 17:05 .\r\ndrwxrwxr-x 3 jperez jperez 4,0K jun 24 17:02 ..\r\ndrwxr-xr-x 3 jperez jperez 4,0K jun 24 17:05 css\r\n-rw-r--r-- 1 jperez jperez 881 jun 24 17:05 geo.html\r\ndrwxr-xr-x 8 jperez jperez 4,0K jun 24 17:05 .git\r\n-rw-r--r-- 1 jperez jperez 46 jun 24 17:05 .gitignore\r\n-rw-r--r-- 1 jperez jperez 53 jun 24 17:05 google848132b663ce25f4.html\r\n-rw-r--r-- 1 jperez jperez 4,1K jun 24 17:05 index.htm\r\ndrwxr-xr-x 3 jperez jperez 4,0K jun 24 17:05 js\r\n-rw-r--r-- 1 jperez jperez 8,6K jun 24 17:05 menu.html\r\n-rw-r--r-- 1 jperez jperez 599 jun 24 17:05 .project\r\ndrwxr-xr-x 4 jperez jperez 4,0K jun 24 17:05 responsive\r\n-rw-r--r-- 1 jperez jperez 61 jun 24 17:05 robots.txt\r\n-rw-r--r-- 1 jperez jperez 12K jun 24 17:05 template.php\r\njperez@jperez-debian:~\/Desktop\/borrar\/gitsample$<\/pre>\n<h1>Ap\u00e9ndice 1: .gitignore<\/h1>\n<p>**.gitignore** es un fichero especial para GIT. Se debe situar en la carpeta ra\u00edz del repositorio. Contiene los ficheros que no queremos que a\u00f1ada GIT al repositorio (de modo que no ser\u00e1n tenidos en cuenta).<\/p>\n<p>\u00bfEsto es \u00fatil? Ya lo creo. Supongamos que trabajamos en un proyecto WEB. Seguramente no querremos a\u00f1adir los ficheros de im\u00e1genes, PDS (photoshop), etc.Si se tratase de un proyecto C++ en Linux seguramente s\u00f3lo querr\u00edamos guardar los ficheros .c y .h. De modo que no querremos guardar los ficheros objeto (.o). En definitiva tratamos de evitar cualquier recurso que no sea c\u00f3digo fuente o texto.<\/p>\n<p>Un ejemplo, el caso del proyecto C\/C++, no queremos que se tengan en cuenta los ficheros *.o, el directorio tmp (que se usa para almacenar datos temporales de compilaci\u00f3n) y otras carpeta que se llama &#8220;resources&#8221;.<\/p>\n<pre>*.o\r\ntmp\/\r\nresources\/<\/pre>\n<p>Considero este tema muy interesante, recomiendo leer la entrada [2].<\/p>\n<h1>Referencias<\/h1>\n<ol>\n<li>Trabajando con repositorios remotos (Doc oficial de GIT) : <a title=\"http:\/\/git-scm.com\/book\/es\/Fundamentos-de-Git-Trabajando-con-repositorios-remotos\" href=\"http:\/\/git-scm.com\/book\/es\/Fundamentos-de-Git-Trabajando-con-repositorios-remotos\">http:\/\/git-scm.com\/book\/es\/Fundamentos-de-Git-Trabajando-con-repositorios-remotos<\/a><\/li>\n<li>Ignorando archivos en GIT:\u00a0<a href=\"http:\/\/es.gitready.com\/beginner\/2009\/01\/19\/ignoring-files.html\">http:\/\/es.gitready.com\/beginner\/2009\/01\/19\/ignoring-files.html<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n Hace una semana publiqu\u00e9 una entrada\u00a0introduciendo el sistema de control de versiones GIT. Ayer a\u00f1ad\u00ed otra entrada donde d\u00ed unos primeros pasos a git. Hoy despu\u00e9s de unas horas de trabajo y recopilar ejemplos basados en mi trabajo diario &hellip; <a href=\"https:\/\/blogs.ua.es\/jpm33\/2013\/07\/03\/git-repositorios-remotos-y-desarrollo-distribuido\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3080,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[135,374],"tags":[481,236729,236718,847,281],"class_list":["post-102","post","type-post","status-publish","format-standard","hentry","category-linux","category-programacion","tag-debian","tag-linux","tag-programacion-2","tag-ssh","tag-windows"],"_links":{"self":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/users\/3080"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/comments?post=102"}],"version-history":[{"count":10,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/102\/revisions"}],"predecessor-version":[{"id":155,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/102\/revisions\/155"}],"wp:attachment":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/media?parent=102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/categories?post=102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/tags?post=102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}