{"id":1934,"date":"2019-09-18T15:45:02","date_gmt":"2019-09-18T21:45:02","guid":{"rendered":"https:\/\/ugit.siua.ac.cr\/?p=1934"},"modified":"2019-09-18T15:45:02","modified_gmt":"2019-09-18T21:45:02","slug":"git-git-en-el-servidor","status":"publish","type":"post","link":"https:\/\/sada.services\/?p=1934","title":{"rendered":"GIT: Git en el Servidor"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Los Protocolos<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Git puede usar cuatro protocolos principales para transferir datos: Local, HTTP, Secure Shell (SSH) y Git.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Local Protocol<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Se\n utiliza habitualmente cuando todos los miembros del equipo tienen \nacceso a un mismo sistema de archivos, como por ejemplo un punto de \nmontaje NFS, o en el caso menos frecuente de que todos se conectan al \nmismo computador. Aunque este \u00faltimo caso no es precisamente el ideal, \nya que todas las instancias del repositorio estar\u00edan en la misma \nm\u00e1quina; aumentando las posibilidades de una p\u00e9rdida catastr\u00f3fica.<\/li><li>Para clonar un repositorio local, puedes usar algo como:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>git clone \/opt\/git\/project.git\no\ngit clone file:\/\/\/opt\/git\/project.git<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Git trabaja \nligeramente distinto si indicas file:\/\/ de forma expl\u00edcita al comienzo \nde la URL. Si escribes simplemente el camino, Git intentar\u00e1 usar enlaces\n r\u00edgidos (hardlinks) o copiar directamente los archivos que necesita. Si\n escribes con el prefijo file:\/\/, Git lanza el proceso que usa \nhabitualmente para transferir datos sobre una red; proceso que suele ser\n mucho menos eficiente.<\/li><li>Para a\u00f1adir un repositorio local a un proyecto Git existente<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>git remote add local_proj \/opt\/git\/project.git<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Los repositorios basados en carpetas y archivos, son m\u00e1s simples y aprovecha de los permisos preexistentes de acceso<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Desventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Dificultad de asceso en distintas ubicaciones<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Protocolos HTTP<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Git\n puede utilizar el protocolo HTTP de dos maneras. Antes de la versi\u00f3n \n1.6.6 de Git, solo hab\u00eda una forma de utilizar el protocolo HTTP y \nnormalmente en s\u00f3lo lectura. Con la llegada de la versi\u00f3n 1.6.6 se \nintrodujo un nuevo protocolo m\u00e1s inteligente que involucra a Git para \nnegociar la transferencia de datos de una manera similar a como se hace \ncon SSH. En los \u00faltimos a\u00f1os, este nuevo protocolo basado en HTTP se ha \nvuelto muy popular puesto que es m\u00e1s sencillo para el usuario y tambi\u00e9n \nm\u00e1s inteligente. Nos referiremos a la nueva versi\u00f3n como el HTTP \n\u201cInteligente\u201d y llamaremos a la versi\u00f3n anterior el HTTP \u201ctonto\u201d.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">HTTP Inteligente<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>funciona\n de forma muy similar a los protocolos SSH y Git, pero se ejecutan sobre\n puertos est\u00e1ndar HTTP\/S y pueden utilizar los diferentes mecanismos de \nautenticaci\u00f3n HTTP. Esto significa que puede resultar m\u00e1s f\u00e1cil para los\n usuarios, puesto que se pueden identificar mediante usuario y \ncontrase\u00f1a (usando la autenticaci\u00f3n b\u00e1sica de HTTP) en lugar de usar \nclaves SSH.<\/li><li>Es, probablemente, la forma m\u00e1s popular de usar Git \nahora, puesto que puede configurarse para servir tanto acceso an\u00f3nimo \n(como con el protocolo Git) y acceso autenticado para realizar env\u00edos \n(push), con cifrado similar a como se hace con SSH. En lugar de tener \ndiferentes URL para cada cosa, se puede tener una \u00fanica URL para todo. \nSi intentamos subir cambios (push) al repositorio nos pedir\u00e1 usuario y \ncontrase\u00f1a, y para accesos de lectura se puede permitir el acceso \nan\u00f3nimo o requerir tambi\u00e9n usuario.<\/li><li>De hecho, para servicios \ncomo GitHub, la URL que usamos para ver el repositorio en la web (por \nejemplo, \u201chttps:\/\/github.com\/schacon\/simplegit\u201d) es la misma que \nusar\u00edamos para clonar y, si tenemos permisos, para enviar cambios.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">HTTP Tonto<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Si\n el servidor no dispone del protocolo HTTP \u201cInteligente\u201d, el cliente de \nGit intentar\u00e1 con el protocolo cl\u00e1sico HTTP que podemos llamar HTTP \n\u201cTonto\u201d. Este protocolo espera obtener el repositorio Git a trav\u00e9s de un\n servidor web como si accediera a archivos normales. Lo bonito de este \nprotocolo es la simplicidad para configurarlo. B\u00e1sicamente, todo lo que \ntenemos que hacer es poner el repositorio Git bajo el directorio ra\u00edz de\n documentos HTTP y especificar un punto de enganche (hook) de \npost-update (v\u00e9ase Puntos de enganche en Git). Desde este momento, \ncualquiera con acceso al servidor web donde se publique el repositorio \npodr\u00e1 tambi\u00e9n clonarlo. Para permitir acceso lectura con HTTP, debes \nhacer algo similar a lo siguiente:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/var\/www\/htdocs\/\ngit clone --bare \/path\/to\/git_project gitproject.git\ncd gitproject.git\nmv hooks\/post-update.sample hooks\/post-update\nchmod a+x hooks\/post-update<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Con el inteligente tenemos un \u00fanico URL para todos los tipos de acceso<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Inconvenientes<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Git sobre HTTP\/S puede ser un poco m\u00e1s complejo de configurar comparado con el SSH.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">El Procotolo SSH<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>SSH\n es un protocolo muy habitual para alojar repositorios Git en hostings \nprivados. Esto es as\u00ed porque el acceso SSH viene habilitado de forma \npredeterminada en la mayor\u00eda de los servidores, y si no es as\u00ed, es f\u00e1cil\n de habilitarlo. Adem\u00e1s, SSH es un protocolo de red autenticado, y es \nsencillo de utilizar.<\/li><li>Para clonar un repositorio a trav\u00e9s de SSH, puedes indicar una URL ssh:\/\/ tal como:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>git clone ssh:\/\/user@server\/project.git<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Tambi\u00e9n puedes usar la sintaxis estilo scp del protocolo SSH:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>git clone user@server:project.git<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Es f\u00e1cil de configurar.<\/li><li>Es seguro ya que las transferencias son encriptadas y autentificadas.<\/li><li>Es eficiente, comprimiendo los datos lo m\u00e1s posible antes de transferirlos.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Desventajas:<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Imposibilidad para dar acceso an\u00f3nimo al repositorio<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">El protocolo Git<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>El\n protocolo Git es un demonio (daemon) especial, que viene incorporado \ncon Git. Escucha por un puerto dedicado (9418), y nos da un servicio \nsimilar al del protocolo SSH; pero sin ning\u00fan tipo de autentificaci\u00f3n.<\/li><li>Para\n que un repositorio pueda exponerse a trav\u00e9s del protocolo Git, tienes \nque crear en \u00e9l un archivo git-daemon-export-ok; sin este archivo, el \ndemonio no har\u00e1 disponible el repositorio.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Ventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Es el m\u00e1s r\u00e1pido de todos los disponibles.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Desventajas<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Es su falta de autentificaci\u00f3n<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Los Protocolos Git puede usar cuatro protocolos principales para transferir datos: Local, HTTP, Secure Shell (SSH) y Git. Local Protocol Se utiliza habitualmente cuando todos los miembros del equipo tienen acceso a un mismo sistema de archivos, como por ejemplo un punto de montaje NFS, o en el caso menos frecuente de que todos se [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":909,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[51],"tags":[],"class_list":["post-1934","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-git"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6}},"_links":{"self":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/1934","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1934"}],"version-history":[{"count":1,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/1934\/revisions"}],"predecessor-version":[{"id":1935,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/1934\/revisions\/1935"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/media\/909"}],"wp:attachment":[{"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1934"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1934"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1934"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}