{"id":33,"date":"2017-10-17T12:05:29","date_gmt":"2017-10-17T17:05:29","guid":{"rendered":"http:\/\/blogs.gentoo.org\/chrisadr\/?p=33"},"modified":"2019-11-01T03:35:28","modified_gmt":"2019-11-01T08:35:28","slug":"tutorial-simple-para-hacer-tu-primer-pr-pull-request","status":"publish","type":"post","link":"https:\/\/blogs.gentoo.org\/chrisadr\/2017\/10\/17\/tutorial-simple-para-hacer-tu-primer-pr-pull-request\/","title":{"rendered":"Tutorial simple para hacer tu primer PR (Pull Request)"},"content":{"rendered":"<p>Bueno, este\u00a0si creo que ser\u00e1 un tutorial bastante corto y esperemos que did\u00e1ctico ;). Voy a poner a disposici\u00f3n de ustedes un peque\u00f1o repositorio en mi github para que puedan mandar sus PR y al mismo tiempo para que practiquen c\u00f3mo hacer todos los pasos que voy a dejar a continuaci\u00f3n. Aqu\u00ed el link para hacer sus PR de prueba:<\/p>\n<p><a href=\"https:\/\/github.com\/CodeLabora\/TuPrimerPR\">https:\/\/github.com\/CodeLabora\/TuPrimerPR<\/a><\/p>\n<p>Bueno, vamos a listar r\u00e1pidamente los pasos necesarios para mandar un PR:<\/p>\n<ol>\n<li>Fork<\/li>\n<li>Clone<\/li>\n<li>Remote<\/li>\n<li>Branch<\/li>\n<li>Cambios<\/li>\n<li>Add<\/li>\n<li>Commit<\/li>\n<li>Push<\/li>\n<li>PR<\/li>\n<\/ol>\n<p>Los estoy poniendo en ingl\u00e9s para que encuentren sus respectivas opciones en la l\u00ednea de comando de git.<\/p>\n<h3>Fork<\/h3>\n<p>Un fork es tu propia versi\u00f3n de un repositorio de Github. Este te permite clonar el trabajo de otro proyecto y tenerlo en tu cuenta para que puedas cambiar cosas sin preocupaci\u00f3n de perder tus cambios. Para realizar un fork solo es necesario ir a la p\u00e1gina y dar click al bot\u00f3n Fork que se encuentra en la parte superior derecha.<\/p>\n<figure id=\"attachment_77338\" aria-describedby=\"caption-attachment-77338\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77338\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_002-420x191.jpg\" alt=\"\" width=\"420\" height=\"191\" \/><figcaption id=\"caption-attachment-77338\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Una vez realizado el fork podr\u00e1n ver que en su cuenta aparece el repositorio.<\/p>\n<figure id=\"attachment_77339\" aria-describedby=\"caption-attachment-77339\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77339\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_003-420x209.jpg\" alt=\"\" width=\"420\" height=\"209\" \/><figcaption id=\"caption-attachment-77339\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<h3>Clone<\/h3>\n<p>Ahora que ya tenemos un repositorio lo vamos a clonar a nuestro equipo. (Asumo que me siguen personas que usan Linux, pero para los usuarios de otros sistemas tambi\u00e9n existen versiones de git que pueden descargar en su p\u00e1gina oficial.<\/p>\n<figure id=\"attachment_77340\" aria-describedby=\"caption-attachment-77340\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77340\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_004-1-420x361.jpg\" alt=\"\" width=\"420\" height=\"361\" \/><figcaption id=\"caption-attachment-77340\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Y con nuestro terminal hacemos lo siguiente.<\/p>\n<figure id=\"attachment_77342\" aria-describedby=\"caption-attachment-77342\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77342\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_005-1-420x78.jpg\" alt=\"\" width=\"420\" height=\"78\" \/><figcaption id=\"caption-attachment-77342\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Con esto tendremos una nueva carpeta llamada TuPrimerPR en la que estar\u00e1 nuestro proyecto de Github. entramos a la carpeta con el comando &#8220;cd TuPrimerPR&#8221; y veremos que dentro est\u00e1n los archivos que se encuentran en nuestro fork.<\/p>\n<figure id=\"attachment_77343\" aria-describedby=\"caption-attachment-77343\" style=\"width: 298px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-full wp-image-77343\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_006-1.jpg\" alt=\"\" width=\"298\" height=\"81\" \/><figcaption id=\"caption-attachment-77343\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>(Tengan en cuenta que la cantidad de archivos puede variar dependiendo de lo que encuentren en mi repositorio cuando hagan el fork)<\/p>\n<h3>Remote<\/h3>\n<p>Este es un paso opcional, pero que evita muchos problemas al momento de trabajar de manera continua en un proyecto. Fork por defecto crea una copia exacta del repositorio, pero en el momento exacto de la creaci\u00f3n. Esto quiere decir que si el proyecto sigue avanzando, su repositorio se va a quedar atrasado con el pasar de los d\u00edas u horas. &#8220;git remote &#8221;\u00a0 nos permite especificar otro punto de descarga (el proyecto original) y as\u00ed poder actualizar nuestro proyecto cada vez que vemos que el proyecto padre se est\u00e1 actualizando.<\/p>\n<p>Para encontrar tu proyecto padre solo hace falta usar el link que se encuentra justo abajo del nombre de tu repositorio. (Revisen la segunda imagen del apartado Fork). Vamos a agregar este dato a continuaci\u00f3n:<\/p>\n<figure id=\"attachment_77344\" aria-describedby=\"caption-attachment-77344\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77344\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_007-1-420x205.jpg\" alt=\"\" width=\"420\" height=\"205\" \/><figcaption id=\"caption-attachment-77344\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Este es el proyecto original (lo vamos a llamar <em>upstream\u00a0<\/em>para seguir la corriente de muchos proyectos).<\/p>\n<figure id=\"attachment_77345\" aria-describedby=\"caption-attachment-77345\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77345\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_008-420x94.jpg\" alt=\"\" width=\"420\" height=\"94\" \/><figcaption id=\"caption-attachment-77345\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Como pueden ver, he agregado el remote con &#8221; git remote add &lt;nombre&gt; &lt;URL&gt; &#8221;<\/p>\n<p>Con esto vamos a poder actualizar el proyecto cuando sea necesario, pero no lo vamos a usar ahora porque no es necesario. (Eso lo explico m\u00e1s adelante, o en otro post, dependiendo de la necesidad)<\/p>\n<h3>Branch<\/h3>\n<p>Los branch (o ramas) permiten crear secciones de c\u00f3digo que puedes trabajar en un entorno aislado. Esto quiere decir que lo que hagas en un branch no necesariamente afecta al c\u00f3digo original hasta que se utilice un &#8221; git merge &#8220;. Tambi\u00e9n es una funcionalidad extra que te permite Github, cada vez que tu creas un branch, Github genera autom\u00e1ticamente la fuente del Pull Request cuando es necesario.<\/p>\n<figure id=\"attachment_77346\" aria-describedby=\"caption-attachment-77346\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77346\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_009-420x123.jpg\" alt=\"\" width=\"420\" height=\"123\" \/><figcaption id=\"caption-attachment-77346\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Ahora que estamos en nuestra rama especial, podemos trabajar en nuestra contribuci\u00f3n.<\/p>\n<h3>Cambios<\/h3>\n<p>Voy a agregar un par de archivos para que vean c\u00f3mo se hace.<\/p>\n<figure id=\"attachment_77347\" aria-describedby=\"caption-attachment-77347\" style=\"width: 378px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-full wp-image-77347\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_010.jpg\" alt=\"\" width=\"378\" height=\"82\" \/><figcaption id=\"caption-attachment-77347\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>&#8220;touch &#8221; nos permite crear un archivo (si es que no existe) en blanco. con esto podemos pasar a nuestro siguiente paso.<\/p>\n<h3>Add<\/h3>\n<p>&#8221; git add &#8221; nos permite agregar archivos a nuestro commit (los explico m\u00e1s adelante). Para ver qu\u00e9 archivos puedes agregar se puede utilizar el comando &#8221; git status &#8221;<\/p>\n<figure id=\"attachment_77348\" aria-describedby=\"caption-attachment-77348\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77348\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_011-420x111.jpg\" alt=\"\" width=\"420\" height=\"111\" \/><figcaption id=\"caption-attachment-77348\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Con esto tenemos todo preparado para nuestro Commit<\/p>\n<h3>Commit<\/h3>\n<p>Los commits son marcas (o hitos) en el tiempo. definen un estado para todos los archivos del proyecto y acumulan los cambios necesarios para llegar desde el principio del proyecto hasta el estado actual. Suena un poco complejo, pero es bastante sencillo, solo recuerda que son las escaleras de tu proyecto. Escribimos &#8221; git commit &#8221; y nos saldr\u00e1 una ventana para escribir nuestro mensaje de commit.<\/p>\n<figure id=\"attachment_77349\" aria-describedby=\"caption-attachment-77349\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77349\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_012-420x228.jpg\" alt=\"\" width=\"420\" height=\"228\" \/><figcaption id=\"caption-attachment-77349\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Y al finalizar y guardar el texto, veremos algo como:<\/p>\n<figure id=\"attachment_77350\" aria-describedby=\"caption-attachment-77350\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77350\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_013-420x78.jpg\" alt=\"\" width=\"420\" height=\"78\" \/><figcaption id=\"caption-attachment-77350\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Donde se muestra un resumen de lo que hace el commit.<\/p>\n<h3>Push<\/h3>\n<p>Con push estamos subiendo a nuestra cuenta de Github todos los commits que tenemos en el equipo que no se encuentran en nuestro repositorio en internet. Esto har\u00e1 que Github pueda generar el nuevo PR de manera autom\u00e1tica.<\/p>\n<figure id=\"attachment_77351\" aria-describedby=\"caption-attachment-77351\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77351\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_014-420x154.jpg\" alt=\"\" width=\"420\" height=\"154\" \/><figcaption id=\"caption-attachment-77351\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Noten que estamos usando el nombre de nuestro branch y que nos solicita nuestro usuario y contrase\u00f1a. Al final nos muestra que se ha creado el branch miMejora dentro de nuestra cuenta de Github. Vamos a ver en el navegador lo que hemos conseguido. ;)<\/p>\n<h3>PR<\/h3>\n<figure id=\"attachment_77352\" aria-describedby=\"caption-attachment-77352\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77352\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_015-420x238.jpg\" alt=\"\" width=\"420\" height=\"238\" \/><figcaption id=\"caption-attachment-77352\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Como pueden ver, se ha creado una nueva l\u00ednea que dice &#8220;Compare &amp; Pull request&#8221;. Esta funcionalidad de Github nos permite crear el PR de manera sencilla, vamos a dar click para ver qu\u00e9 sucede.<\/p>\n<figure id=\"attachment_77353\" aria-describedby=\"caption-attachment-77353\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77353\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_016-420x373.jpg\" alt=\"\" width=\"420\" height=\"373\" \/><figcaption id=\"caption-attachment-77353\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Github es bastante inteligente. Como pueden apreciar, partes el commit se agregan al formulario para env\u00edo. Solo es necesario dar click al bot\u00f3n y listo :) Sencillo.<\/p>\n<h3>Extra<\/h3>\n<p>Esto es el detr\u00e1s de c\u00e1maras de los proyectos, aparece el PR y el encargado decide si aceptar o no, o escribir m\u00e1s mensajes. En mi caso lo voy a aceptar de manera instant\u00e1nea.<\/p>\n<figure id=\"attachment_77354\" aria-describedby=\"caption-attachment-77354\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77354\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_017-420x249.jpg\" alt=\"\" width=\"420\" height=\"249\" \/><figcaption id=\"caption-attachment-77354\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Una vez realizado el merge, podr\u00e1n ver el log de commits del proyecto y ver su nombre en \u00e9l.<\/p>\n<figure id=\"attachment_77355\" aria-describedby=\"caption-attachment-77355\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77355\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_018-420x165.jpg\" alt=\"\" width=\"420\" height=\"165\" \/><figcaption id=\"caption-attachment-77355\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Pero ahora tenemos un problema. Ese commit no aparece en\u00a0<em>nuestro\u00a0<\/em>repositorio, solamente en el del proyecto. \u00bfRecuerdan nuestro paso de remote? Ahora es cuando rinde frutos :)<\/p>\n<p>Volvemos a nuestro branch master y hacemos lo siguiente:<\/p>\n<figure id=\"attachment_77356\" aria-describedby=\"caption-attachment-77356\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77356\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_019-420x230.jpg\" alt=\"\" width=\"420\" height=\"230\" \/><figcaption id=\"caption-attachment-77356\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Con esto hemos descargado toda la informaci\u00f3n del proyecto original a nuestro equipo. Como pueden apreciar, ah\u00ed aparece nuestro commit. Ahora vamos a guardar todo este trabajo en nuestro repositorio de Github para poder eliminar el branch que tiene el aporte que ya agregaron al proyecto.<\/p>\n<figure id=\"attachment_77357\" aria-describedby=\"caption-attachment-77357\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77357\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_020-420x112.jpg\" alt=\"\" width=\"420\" height=\"112\" \/><figcaption id=\"caption-attachment-77357\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Ahora que ya tenemos nuestro repositorio de Github actualizado vamos a borrar nuestro branch, pero primero nos aseguramos que est\u00e9 dentro de nuestra rama principal (master)<\/p>\n<figure id=\"attachment_77358\" aria-describedby=\"caption-attachment-77358\" style=\"width: 420px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" class=\"size-medium wp-image-77358\" src=\"https:\/\/blog.desdelinux.net\/wp-content\/uploads\/2017\/10\/Selection_021-420x108.jpg\" alt=\"\" width=\"420\" height=\"108\" \/><figcaption id=\"caption-attachment-77358\" class=\"wp-caption-text\">Dise\u00f1o propio. Christopher D\u00edaz Riveros<\/figcaption><\/figure>\n<p>Como pueden ver tuve un ligero error, esto era porque me encontraba en mi branch miMejora al momento de quere borrar. Esto se arregla regresando al branch master.<\/p>\n<h3>Conclusi\u00f3n<\/h3>\n<p>Listo :) tan sencillo como eso. Ahora que dominan los oscuros secretos de Github para mandar PR, espero ver sus contribuciones en diversos proyectos. Y si desean pueden dejar su primer PR en mi repositorio ;) para el recuerdo.<\/p>\n<p>No he tocado mil y un beneficios de Git (<strong>OJO<\/strong>, no Github) y como es de esperar de desarrolladores que est\u00e1n ligados a la comunidad del Kernel, Git es una herramienta sumamente poderosa, con cientos de funcionalidades.<\/p>\n<p>Para poder tener una mejor idea de lo que hace y todo el poder de Git, les recomiendo mucho este <a href=\"https:\/\/git-scm.com\/book\/es\/v1\">libro<\/a>. Estoy seguro que les ayudar\u00e1 bastante a mejorar en el manejo de git.<\/p>\n<p>Saludos y espero que les ayude ;)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bueno, este\u00a0si creo que ser\u00e1 un tutorial bastante corto y esperemos que did\u00e1ctico ;). Voy a poner a disposici\u00f3n de ustedes un peque\u00f1o repositorio en mi github para que puedan mandar sus PR y al mismo tiempo para que practiquen c\u00f3mo hacer todos los pasos que voy a dejar a continuaci\u00f3n. Aqu\u00ed el link para &hellip; <a href=\"https:\/\/blogs.gentoo.org\/chrisadr\/2017\/10\/17\/tutorial-simple-para-hacer-tu-primer-pr-pull-request\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Tutorial simple para hacer tu primer PR (Pull Request)<\/span><\/a><\/p>\n","protected":false},"author":169,"featured_media":34,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[3],"jetpack_featured_media_url":"https:\/\/blogs.gentoo.org\/chrisadr\/files\/2017\/10\/git-github.png","_links":{"self":[{"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/posts\/33"}],"collection":[{"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/users\/169"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/comments?post=33"}],"version-history":[{"count":1,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/posts\/33\/revisions"}],"predecessor-version":[{"id":35,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/posts\/33\/revisions\/35"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/media\/34"}],"wp:attachment":[{"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/media?parent=33"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/categories?post=33"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/tags?post=33"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}