<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ GitHub - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ GitHub - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 08:28:26 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/tag/github/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Cómo funciona internamente la autenticación SSH con GitHub ]]>
                </title>
                <description>
                    <![CDATA[ El SSH (Shell Seguro) es un protocolo cliente-servidor para conectarse y autenticarse a un servidor remoto. La autenticación significa que el servidor remoto puede verificar que eres tú mismo no alguien más hablando por ti. Podrías ya estar usando la autenticación SSH de Github, ¿pero sabes cómo funciona en sí? ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-funciona-internamente-la-autenticacion-ssh-con-github/</link>
                <guid isPermaLink="false">67c4da6aa3e1830472d3e6b6</guid>
                
                    <category>
                        <![CDATA[ SSH ]]>
                    </category>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Elias Ezequiel Pereyra Gomez ]]>
                </dc:creator>
                <pubDate>Tue, 15 Apr 2025 14:30:46 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2025/03/aba38efa-117c-4ef7-a844-91599c0a4d62.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/ssh-authentication-with-github-under-the-hood/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How SSH Authentication with GitHub Works Under the Hood</a>
      </p><p>El SSH (Shell Seguro) es un protocolo cliente-servidor para conectarse y autenticarse a un servidor remoto.</p><p>La autenticación significa que el servidor remoto puede verificar que eres tú mismo no alguien más hablando por ti.</p><p>Podrías ya estar usando la autenticación SSH de Github, ¿pero sabes cómo funciona en sí? En este artículo, aprenderá qué sucede de forma interna y cómo funciona en realidad la autenticación de SSH.</p><p>A lo largo, entenderás los conceptos fundamentales de criptografía que cada desarrollador debería saber: encriptación de clave simétrica, encriptación de clave asimétrica, funciones hash criptográficas, y firmas digitales.</p><p>Algunos desarrolladores usualmente no tienen la chance de aprender y entender estos fundamentos de criptografía, pero estos conceptos te ayudarán a la larga. También, te ayudarán en estar en una mejor posición para tomar decisiones de seguridad informadas para tus aplicaciones de web en producción.</p><p>Así que vamos, abróchate los cinturones de seguridad, ¡y comencemos!</p><h3 id="esto-es-lo-que-cubriremos-"><strong>Esto es lo que cubriremos:</strong></h3><ol><li><a href="#primero-por-que-autenticacion-importante">Primero, ¿por qué la Autenticación es tan importante?</a></li><li><a href="#encriptacion-clave-simetrica">Encriptación de Clave Simétrica</a> </li><li><a href="#encriptacion-llave-asimetrica">Encriptación de Clave Asimétrica</a></li><li><a href="#funciones-hash-criptograficas">Funciones de Hash Criptográficas</a> </li><li><a href="#firmas-digitales">Firmas Digitales</a></li><li><a href="#como-funciona-la-autenticacion-ssh">Cómo Funciona la Autenticación SSH</a> </li><li><a href="#resumiendo-todo">Resumiendo Todo</a></li></ol><!--kg-card-begin: html--><h2 id="primero-por-que-autenticacion-importante">Primero, ¿por qué la Autenticación es tan importante?</h2><!--kg-card-end: html--><p>Cuando ejecutamos <code>git push</code>, Github necesita verificar que la persona correcta está interactuando con Github. Imagina si un atacante podría llegar a hacer <code>git push</code> por ti.</p><p>Entonces todos tus repositorios estarían bajo el control del atacante. Podrían eliminar todo tu código juntamente con todo el historial de las confirmaciones.</p><p>Esto suena bastante peligroso, ¿no? Así que para verificar que eres tú el que está hablando con Github, y no un atacante, Github tiene varias formas de autenticarte.</p><p>El método más usado para autenticar con Github es la autenticación SSH.</p><p>Antes que entendamos cómo funciona la autenticación SSH internamente, necesitaremos entender los conceptos fundamentales de criptografía, a saber – encriptación de clave simétrica, encriptación de clave asimétrica, funciones de hash criptográficas, y firmas digitales.</p><p>¡Comencemos!</p><!--kg-card-begin: html--><h2 id="encriptacion-clave-simetrica">Encriptación de Clave Simétrica</h2><!--kg-card-end: html--><p>En los tiempos antiguos, los gobernantes idearon varios métodos de comunicar mensajes militares secretos a sus comandantes del ejército.</p><p>En los métodos más primitivos, mayormente usados por los gobernantes Griegos antiguos y posiblemente luego los Romanos, involucrados usando una vara de madera cilíndrica llamado un <strong><a href="https://es.wikipedia.org/wiki/Esc%C3%ADtala">Escítala</a></strong>.</p><p>Antes de una invasión militar, el gobernante tendría las dos mismas varas de madera cilíndricos exactas. Entonces le daría una escítala al comandante del ejército y mantener uno para sí mismo.</p><figure class="kg-card kg-image-card"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734514827027/b4945c3a-64d4-458b-a410-f23b1a08d9ef.png" class="kg-image" alt="A scytale with leather strip wounded and a message written on it." width="2012" height="1176" loading="lazy"></figure><p>El dispositivo funcionaba al enrollar una tira de cuero alrededor de escítala. Después de hacer esto, el gobernante escribiría el mensaje por encima de la tira de cuero enrollada de forma que solo pudiera ser leído cuando estuviere enrollada de forma apropiada nuevamente. </p><p>Supón que la escítala le permitiera escribir tres letras alrededor en un circulo y cinco letras de forma recta a lo largo de su longitud. La tira de cuero enrollada con el mensaje <code>attackfromright</code> escrito luciría así:</p><pre><code class="language-plaintext">       |   |   |   |   |   |
       | a | t | t | a | c |  |
     __| k | f | r | o | m |__|
    |  | r | i | g | h | t |
    |  |   |   |   |   |   |
</code></pre><p>Después de escribir el mensaje en la escítala, el gobernante desenrollaría la tira de cuero y lo enviaría al comandante del ejército. Cuando estaba desenrollada, la tira de cuero tendría el siguiente mensaje desordenado:</p><pre><code class="language-plaintext">----------------
akrtfitrgaohcmt
----------------
</code></pre><p>Así que ahora lo ves, incluso si la tira de cuero fuera interceptada por un espía enemigo, el mensaje no tendría sentido. ¿No es fascinante? El uso inteligente de una vara de madera y una tira de cuero, ¡podría haber ayudado a algunos gobernantes antiguos ganar batallas!</p><p>Cuando la tira de cuero alcanzaba al comandante del ejército, lo envolvería con su propia escítala (que sería exactamente el mismo que el del gobernante), y luego el comandante sería capaz de entender el mensaje apropiadamente.</p><p>Esta técnica de la escítala en realidad es un ejemplo de la encriptación de clave simétrica en la práctica.</p><p>La encriptación es un proceso en el que el mensaje origina es modificado (o codificado) de tal forma que solamente el recipiente indicado puede decodificar y ver el mensaje actual.</p><p>El mensaje original se llama texto plano, mientras que el mensaje codificado se llama texto cifrado. La encriptación convierte el <code>texto plano a texto cifrado</code> con la ayuda de una clave.</p><p>Para descifrar el mensaje, que sería convertir el <code>texto cifrado a texto plano</code>, una persona debe tener acceso a la misma llave.</p><p>Si lo comparamos a la técnica de la escítala, la escítala es la llave. El gobernantes solamente comparte la llave (escítala) con el comandante del ejército que necesita saber lo que dice el mensaje.</p><p>Así es como luce el proceso de encriptación:</p><figure class="kg-card kg-image-card"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734519516607/75c926a3-faec-402a-8bcd-122039f47a01.png" class="kg-image" alt="Encryption with scytale as key." width="2023" height="526" loading="lazy"></figure><p>El proceso de descifrado lucirá así:</p><figure class="kg-card kg-image-card"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734519525487/de096889-332c-4482-b2df-b28ce609a8a6.png" class="kg-image" alt="Decryption with scytale as key." width="1979" height="526" loading="lazy"></figure><p>Llamamos a esto encriptación de llave simétrica porque la misma llave se usa tanto para encriptar y descifrar el mensaje.</p><p>Esta llave (la escítala) se debe mantener resguardada del acceso del enemigo. Si el enemigo accede a esta llave, entonces será capaz de descifrar los mensajes.</p><p>Pero hay otro tipo de encriptación llamada encriptación de llave asimétrica. Ahora que entiendes la encriptación de llave simétrica, sigamos con la encriptación de llave asimétrica.</p><!--kg-card-begin: html--><h2 id="encriptacion-llave-asimetrica">Encriptación de Llave Asimétrica</h2><!--kg-card-end: html--><p>En la encriptación de llave simétrica, como vimos arriba, la misma llave era usada por el gobernante y el comandante del ejército para encriptar y descifrar el mensaje.</p><p>Pero en una encriptación de llave asimétrica, hay dos llaves (llamado un par de llaves). De las dos llaves, una es una llave privada y la otra es una llave pública.</p><p>La llave pública puede ser compartido con todos (el cual por eso se llama pública). Pero la llave privada tiene que mantenerse, ¡en secreto! Nunca debe ser revelado a nadie.</p><figure class="kg-card kg-image-card"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735200860039/7aca8ffa-c33a-44e5-ab1a-181492ebefd8.png" class="kg-image" alt="Public key can be shared with everyone. But the private key must be kept secret." width="2714" height="1428" loading="lazy"></figure><p>Lo interesante sobre la encriptación de llave asimétrica es eso, si un mensaje es encriptado con la llave pública, entonces puede ser descifrado solamente con la llave privada correspondiente. Ninguna otra llave puede descifrarlo.</p><p>Y funciona de la otra forma también. Si un mensaje es encriptado con la llave privada entonces puede ser descifrado solamente usando la llave pública correspondiente.</p><figure class="kg-card kg-image-card"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735120077350/b90901c8-b55c-428a-8eb4-1b8ffa65fa06.png" class="kg-image" alt="Illustration of public and private key mathematically linked with each other." width="948" height="835" loading="lazy"></figure><p>Las dos llaves – pública y privada – están enlazados matemáticamente uno con el otro. Mientras uno encripta, el otro descifra.</p><p>Sólo una pequeña nota, la encriptación de llave asimétrica también se le llama encriptación de llave pública. Estos dos términos son usados de forma intercambiable pero significa lo mismo.</p><!--kg-card-begin: html--><h2 id="funciones-hash-criptograficas">Funciones Hash Criptográficas</h2><!--kg-card-end: html--><p>Una función hash criptográfica está diseñada para tomar una entrada de cualquier longitud y producir una salida de longitud fijada. La salida de longitud fijada se le denomina valor hash.</p><p>Un ejemplo popular de una función hash criptográfica es SHA-256.</p><figure class="kg-card kg-image-card"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735030835833/201640c6-13b4-4b2b-9be3-88e245269bd1.png" class="kg-image" alt="SHA-256 calculation of &quot;freeCodeCamp.org&quot;" width="2283" height="285" loading="lazy"></figure><p>La imagen de arriba muestra el valor hash SHA-256 de la entrada "freeCodeCamp.org". Las funciones hash criptográficas tienen tres propiedades que lo hacen muy útiles (lo veremos en las próximas secciones).</p><p>Primero, es prácticamente imposible para tomar el valor hash y averiguar la entrada del valor hash.</p><p>Por ejemplo, si nos dan el valor hash <code>c9c31315ef2257e4b7698</code>, no hay forma de que averigüemos que la entrada a la función hash fuere "freeCodeCamp.org".</p><p>Segundo, si pasamos la misma entrada a la función hash, obtenemos el mismo valor hash como la salida.</p><p>Si pasamos "freeCodeCamp.org" nuevamente a la función hash SHA-256, obtendremos la misma salida hash como nuestra llamada previa.</p><p>Tercero, dos entradas distintas nunca comparten el mismo valor hash. Inclusive el cambio más ligero en la entrada produce una salida totalmente distinta.</p><p>Supón que si proveemos "freeCodeCamp" como entrada en vez de "freeCodeCamp.org" – obtenemos una salida totalmente distinta.</p><!--kg-card-begin: html--><h2 id="firmas-digitales">Firmas Digitales</h2><!--kg-card-end: html--><p>En tus vidas diarias, podrías tener que firma varios documentos. Podrían ser documentos legales, o el boletín de calificaciones de tus hijos, o tal vez algo más.</p><p>Cuando tu firma esté presente en el documento, le transmite a la otra parte que eres tú el que está de acuerdo cualquier cosa que esté escrito en ese documento.</p><p>Luego, no puedes dar marcha atrás de lo que está escrito en el documento. ¿Correcto?</p><p>De forma similar, en el mundo digital, tenemos las firmas digitales – o podemos simplemente llamarlos firmas.</p><p>Entendamos cómo funcionan las firmas usando un ejemplo. Tenemos dos usuarios llamados "Alice" y "Bob".</p><p>Bob quiere transferir algo de dinero a la cuenta bancaria de Alice. Así que Bob le pide a Alice su información de cuenta bancaria.</p><figure class="kg-card kg-image-card"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735042150046/034d26c5-b33d-4b82-aeb8-173e47cd8e8e.png" class="kg-image" alt="An illustration showing alice and bob's computers far away from each other and alice's bank account number." width="1972" height="1410" loading="lazy"></figure><p>Alice sabe sobre las firmas digitales y decidió usar una. Al final, entenderás por qué Alice optó por una firma digital.</p><p>Antes de que Alice pueda crear una firma digital. Alice provee a Bib su clave pública (y guarda la clave privada para sí misma).</p><p>Luego Alice crea una firma digital y lo color al final del documento.</p><figure class="kg-card kg-image-card"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735041977880/35313148-8820-42d7-b122-3ddf0cbaa723.png" class="kg-image" alt="Process of digital signature generation." width="1065" height="471" loading="lazy"></figure><p>Una firma digital se crea primero al pasar el contenido del documento a una función hash criptográfica como SHA-256. En el caso de Alice, el contenido del documento es su número de cuenta bancaria.</p><p>Una vez que obtenemos el valor hash, se encripta con la <strong>clave privada</strong> de Alice. La salida de esta encriptación es la firma el cual se coloca al final del documento.</p><p>Luego esto se lo envía a Bob por Internet.</p><p>Cuando Bob recibe este documento, verifica si la <strong>firma es válida o no</strong>.</p><figure class="kg-card kg-image-card"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735043216695/256f7707-3f40-433f-9b00-c11b27ef01e8.png" class="kg-image" alt="Process of signature verification." width="2905" height="1636" loading="lazy"></figure><p>Para verificar la firma, Bob primero descifra la firma con la clave pública de Alice. Si lo recuerdas, Alice generó la firma al encriptar el valor hash.</p><pre><code class="language-plaintext"> plaintext                         ciphertext  
     |                                 |
     |                                 |
     |                                 |
hash value --------encrypt--------&gt; signature
</code></pre><p>Así que, cuando Bob descifra la firma, obtendrá el valor hash que Alice calculó. Llamemos a este valor hash de Alice.</p><pre><code class="language-plaintext"> ciphertext                         plaintext  
     |                                 |
     |                                 |
     |                                 |
signature --------decrypt--------&gt; hash value
</code></pre><p>Luego Bob toma el número de la cuenta bancaria que esta presente en el documento y lo pasa a la función hash.</p><p>Finalmente, Bob coincide el valor hash de Alice (la firma descifrada) y el valor hash que calculó. Si ambos valores hash coinciden entonces significa que la firma es válida.</p><p>Muy bien – ¿pero por qué necesitábamos hacer todo esto? ¿Qué significa si la firma es válida?</p><p>Cuando la verificación de la firma es exitosa, prueba dos cosas.</p><p>Primero, prueba que el documento ha sido enviado por Alice solamente. Nadie más podría haber enviado este documento.</p><p>La garantía de que solamente Alice ha enviado este documento viene del hecho de que fuimos capaces de descifrar la firma usando la clave pública de Alice.</p><p>Hemos aprendido de que si algo es encriptado usando una clave privada entonces puede ser descifrado solamente usando su clave pública vinculada.</p><p>Asi que, si Bob fue capaz de descifrar la firma usando la clave pública de Alice, significa que fue descifrado utilizando la clave privada de Alice, ¿correcto?</p><p>Y solamente Alice tiene acceso a su clave privada. Esto significa que, ¡Alice es la única persona quien podría haber enviado este documento!</p><p>Segundo, prueba que el contenido del mensaje no ha sido modificado por un atacante durante la transmisión en red.</p><p>Hicimos dos cosas para verificar la firma. Desciframos la firma, y nos dio el valor hash que Alice calculó. Y también hasheamos el número de cuenta bancaria recibido.</p><p>Si el valor hash que Alice caluló y el valor hash que Bob calculó son los mismos, significa que Alice y Bob dieron exactamente la misma entrada a la función hash.</p><p>Y esto significa que el número de cuenta bancaria que Alice envió y que Bob recibió son exactamente los mismos.</p><p>Si un atacante habría cambiado el número de cuenta bancaria antes de que el documento le llegara a Bob, entonces Bob hubiera recibido un número de cuenta bancaria modificado.</p><p>Cuando Bob fuera a calcular el valor hash de este número de cuenta bancaria modificado, el valor hash hubiera sido distinto de lo que Alice había calculado.</p><p>Así que mientras coincida el valor hash de Alice (firma descifrada) y el valor hash que Bob calculó, la coincidencia fallaría. Y evitaría que Bob transfiera dinero al número de cuenta bancaria errónea.</p><p>Para concluir, cuando la firma es verificada con éxito, significa que:</p><ol><li>El documento es solamente de Alice.</li><li>El contenido del documento no fue modificado por algún tercero.</li></ol><p>Ahora has aprendido sobre encriptación de clave simétrica, encriptación de clave asimétrica, funciones de hash criptográficas, y firmas digitales. ¡Es genial!</p><p>Hemos construido una fundación realmente sólido. Ahora entender la autenticación SSH va a ser mucho más fácil para ti.</p><!--kg-card-begin: html--><h2 id="como-funciona-la-autenticacion-ssh">Cómo Funciona la Autenticación SSH</h2><!--kg-card-end: html--><p>Si no has configurado la autenticación SSH con Github, entonces después de terminar este artículo puedes seguir la <a href="https://docs.github.com/es/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account">documentación detallada de Github sobre cómo hacerlo</a>. Por ahora, por favor quédate hasta el final.</p><p>La cruz del proceso de configuración es que crees un par de claves pública y privada en tu computadora local. Luego subes tu clave pública a tu perfil de Github – ¡y eso es todo!</p><p>Después que hemos creado nuestro par de claves pública y privada, en Ubuntu, el par de claves se almacenan dentro de la carpeta <code>~/.ssh</code>.</p><figure class="kg-card kg-image-card"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735035539565/1f837d9b-9717-44fa-a5e0-5801276113df.png" class="kg-image" alt="Showing my public key from my terminal." width="4380" height="243" loading="lazy"></figure><p>La imagen de arriba muestra mi clave pública. Tengo esta clave pública cargada en mi perfil de Github:</p><figure class="kg-card kg-image-card"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735035898284/1ef9133a-895b-4847-a7ac-6157fdcc3143.png" class="kg-image" alt="Showing my GitHub profile settings where my public key is uploaded for SSH authentication with GitHub." width="4287" height="1398" loading="lazy"></figure><p>Ahora, cuando ejecuto <code>git push</code> o cualquier otro comando que se quiera comunicar con Github, estaré autenticado usando la autenticación SSH.</p><figure class="kg-card kg-image-card"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735053545173/6fb293f1-f90a-4b64-b026-082d8676afae.png" class="kg-image" alt="The illustration of SSH authentication process between client and GitHub server." width="4082" height="2574" loading="lazy"></figure><p>SSH es un protocolo cliente-servidor. Nuestra computadora que ejecuta <code>git push</code> es el cliente SSH. Github es el servidor SSH.</p><p>El cliente comienza con el proceso de autenticación al solicitar nuestra clave pública que tenemos dentro de <code>~/.ssh</code>.</p><p>Luego el cliente prepara un mensaje el cual tiene nuestra clave pública. Y luego el cliente genera la firma usando la clave privada correspondiente.</p><p>La clave pública y la firma se envían a Github. Al recibir este mensaje, Github hace dos cosas:</p><p>Primero, verifica si la clave pública mencionada en el mensaje se conecta a un perfil de Gihtub o no. Ya que subimos nuestra clave pública a Github, este paso se realizó con éxito.</p><p>Segundo, Github verifica la firma usando la clave pública que hemos subido.</p><p>Hemos aprendido que si la verificación de la firma termina siendo exitoso significa que solamente la persona quién está en posesión de la clave privada correspondiente podría haber enviado el mensaje.</p><p>Ya que solamente tenemos la clave privada vinculada a la clave pública cargada, esto prueba a Github que en realidad somos nosotros intentando comunicarse con Github y no un atacante.</p><p>Ahora, Github es 100% seguro que somos la persona correcta, estamos autenticados exitosamente, y a nuestro <code>git push</code> se le permite proceder.</p><p>Ves, se volvió fácil de entender la autenticación SSH ya que aprendiste los fundamentos.</p><figure class="kg-card kg-image-card"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1735120630613/e9a8bbba-3cc4-43e7-8369-865ab377fb87.png" class="kg-image" alt="A xkcd comic depicting Cueball thinking to share his private key. A dangerous move!" width="733" height="282" loading="lazy"></figure><p>La imagen de arriba es del cómic popular xkcd. El personaje allí (llamado Cueball) está pensando en revelar su clave privada. Espero que ahora sepas por qué está mal revelar tu clave privada.</p><p>Si revelas tu clave privada entonces alguien más puede autenticarse a Github en tu nombre. No quieres que eso suceda, ¿verdad? ;)</p><p>Así que, siempre asegúrate de mantener tu clave privada para ti mismo nada más.</p><!--kg-card-begin: html--><h2 id="resumiendo-todo">Resumiendo Todo</h2><!--kg-card-end: html--><p>Si has llegado hasta acá, entonces felicitaciones 🥳.</p><p>Has aprendido como funciona en realidad la autenticación SSH – cuando la firma fue verificado exitosamente por Github, le confirma a Github que somos nosotros quienes le estamos hablando, no un atacante.</p><p>A lo largo adquiriste una comprensión fundamental de la encriptación de clave simétrica, encriptación de clave asimétrica, funciones hash criptográficas y firmas digitales.</p><p>Gracias por estar conmigo en esta, espero que te vayas con algunos nuevos y valiosos aprendizajes.</p><p>Pongo ideas y recursos útiles en mi Twitter. <a href="https://twitter.com/vkwebdev"><strong>Deberías seguirme allí</strong></a>. Respetaré tu tiempo.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Consejos de búsqueda en GitHub: Cómo buscar problemas, repositorios y más de manera efectiva en GitHub ]]>
                </title>
                <description>
                    <![CDATA[ Cuando era principiante en contribuciones de código abierto, uno de mis mayores desafíos era encontrar los proyectos o problemas correctos en los que trabajar. Durante mucho tiempo, confié en recursos seleccionados por diferentes autores en Internet -muy buenos-, por cierto.  No obstante, siempre quise encontrar una forma de evitar ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/consejos-de-busqueda-en-github-como-buscar-problemas-repositorios-y-mas-de-manera-efectiva-en-github/</link>
                <guid isPermaLink="false">65d04f88400c3a03efdc9435</guid>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Andrés  Torres ]]>
                </dc:creator>
                <pubDate>Tue, 19 Mar 2024 07:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2024/03/Search-Github-Freecodecamp-English.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/github-search-tips/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">GitHub Search Tips – How to Search Issues, Repos, and More Effectively on GitHub</a>
      </p><h3 id="cuando-era-principiante-en-contribuciones-de-c-digo-abierto-uno-de-mis-mayores-desaf-os-era-encontrar-los-proyectos-o-problemas-correctos-en-los-que-trabajar-">Cuando era principiante en contribuciones de código abierto, uno de mis mayores desafíos era encontrar los proyectos o problemas correctos en los que trabajar.</h3><p>Durante mucho tiempo, confié en recursos seleccionados por diferentes autores en Internet -muy buenos-, por cierto. </p><p>No obstante, siempre quise encontrar una forma de evitar mi denominado problema personal: una forma de buscar, acceder y seguir proyectos que fueran adecuados para mis habilidades (a fin de poder maximizar mi contribución en línea).</p><p>Acordemos una cosa: a diferencia de Google, buscar en GitHub no es fácil. Pero como desarrollador, es probable que interactúes con GitHub o Gitlab a diario.</p><p>Ahora la pregunta no es para qué usas estos<strong> <a href="https://www.freecodecamp.org/espanol/news/aprende-los-conceptos-basicos-de-git-en-menos-de-10-minutos/">sistemas de control de versiones</a></strong>, sino cómo los estás usando. </p><p>Así como dominar las habilidades de búsqueda en Google es esencial para cualquier usuario regular de Internet; creo que también es esencial para los desarrolladores aprender a buscar eficazmente en GitHub.</p><p>En este artículo vamos a echar un vistazo a diferentes técnicas que puedes emplear para <strong>efectuar búsquedas más exactas en GitHub</strong>. Aprenderás cómo buscar a través de:</p><ul><li>Problemas y solicitudes de extracción</li><li>Repositorios</li><li>Usuarios</li><li>Temas</li></ul><p>Y más... Vamos a empezar.</p><h2 id="consultas-de-b-squeda-de-github">Consultas de búsqueda de GitHub </h2><p>Es bien sabido que para encontrar información detallada sobre algo en Internet, necesitas tener las habilidades de búsqueda correctas. </p><p>No es diferente con GitHub: para encontrar información detallada, puedes utilizar <strong>técnicas comunes de filtrado, ordenación y búsqueda</strong> para encontrar fácilmente problemas y solicitudes de extracción específicos de un proyecto dado.</p><p>Aunque tienes múltiples recursos enumerados en Internet para diferentes proyectos, el principal problema surge cuando quieres hacer una búsqueda por ti mismo. </p><p>¿Cómo empiezas? ¿Qué palabras clave deberías usar para encontrar los resultados correctos?</p><p>La mayoría de los <a href="https://docs.github.com/es/organizations/organizing-members-into-teams/assigning-the-team-maintainer-role-to-a-team-member">mantenedores </a>tienden a etiquetar sus proyectos con problemas, lo que facilita que los colaboradores encuentren proyectos adecuados. A continuación se muestran algunos de los trucos que pueden ayudarte cuando estás usando GitHub.</p><h2 id="c-mo-buscar-problemas-y-solicitudes-de-extracci-n-en-github">Cómo buscar problemas y solicitudes de extracción en GitHub</h2><p>Una de las formas más comunes de encontrar proyectos para contribuir es buscando a través de problemas y solicitudes de extracción relacionadas. Aquí hay algunos trucos que puedes usar para encontrar fácilmente respuestas confiables:</p><ol><li><strong><a href="https://github.com/search?q=is%3Aissue+is%3Aopen+label%3Abeginner&amp;type=issues">is:issue is:open label:beginner</a></strong> - Esta consulta particular mostrará todos los proyectos con problemas abiertos etiquetados como principiante. <code>beginner</code>.</li><li><strong><a href="https://github.com/search?q=is%3Aissue+is%3Aopen+label%3Aeasy&amp;type=issues">is:issue is:open label:easy</a></strong> - Aquí mostrará todos los problemas abiertos etiquetados como fáciles.<code>easy</code>.</li><li><strong><a href="https://github.com/search?q=is%3Aissue+is%3Aopen+label%3Afirst-timers-only&amp;type=issues">is:issue is:open label:first-timers-only</a></strong> - De esta forma se listan todos los problemas abiertos que dan la bienvenida a contribuciones de recién llegados.</li><li><strong><a href="https://github.com/search?q=is%3Aissue+is%3Aopen+label%3Agood-first-bug&amp;type=issues">is:issue is:open label:good-first-bug</a></strong> - Esto enumera los proyectos con problemas abiertos (<em>open issues</em>) etiquetados como "buenos primeros errores" <code>good-first-bug</code>, para atraer a los colaboradores a trabajar en ellos.</li><li><strong><a href="https://github.com/search?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&amp;type=issues">is:issue is:open label:"good first issue"</a></strong> - Con esta consulta se te mostrarán todos los problemas abiertos con la etiqueta buen primer problema, <code>good first issue</code>, lo que significa que es un buen lugar para que los principiantes comiencen. </li><li><strong><a href="https://github.com/search?q=is%3Aissue+is%3Aopen+label%3Astarter&amp;type=issues">is:issue is:open label:starter</a></strong> - Lista todos los problemas abiertos de GitHub etiquetados como iniciadores <code>starters</code></li><li><strong><a href="https://github.com/search?q=is%3Aissue+is%3Aopen+label%3Aup-for-grabs&amp;type=issues">is:issue is:open label:up-for-grabs</a></strong> - Enumera problemas abiertos que están listos para ser trabajados si tienes las habilidades necesarias.</li><li><strong><a href="https://github.com/search?q=no%3Aproject+type%3Aissue+is%3Aopen&amp;type=issues">no:project type:issue is:open</a></strong> - Mostrará todos los problemas abiertos que no están asignados a un proyecto específico.</li><li><strong><a href="https://github.com/search?q=no%3Amilestone+type%3Aissue+is%3Aopen&amp;type=issues">no:milestone type:issue is:open</a></strong> - Muchas veces, los proyectos están organizados con hitos. Pero si quieres encontrar problemas que no estén rastreados, esta consulta de búsqueda los listará para ti.</li><li><strong><a href="https://github.com/search?q=no%3Alabel+type%3Aissue+is%3Aopen&amp;type=issues">no:label type:issue is:open</a></strong> - Señala todos los problemas abiertos que no tienen etiquetas.</li><li><strong><a href="https://github.com/search?q=is%3Aissue+is%3Aopen+no%3Aassignee&amp;type=issues">is:issue is:open no:assignee</a></strong> - Enseña todos los problemas abiertos que aún no han sido asignados a una persona.</li></ol><h2 id="c-mo-buscar-repositorios">Cómo buscar repositorios</h2><p>Por defecto, para realizar una búsqueda, escribirás el nombre del repositorio en la barra de búsqueda ¡y <em>voilà</em>! Obtendrás algunos resultados de búsqueda.</p><p>Pero las probabilidades de que llegues al repositorio exacto que tenías en mente son muy bajas.</p><p>Veamos algunas formas de estrechar tu búsqueda: </p><h2 id="c-mo-encontrar-por-nombre-descripci-n-readme">Cómo encontrar por nombre, descripción/README</h2><p>Al buscar por nombre y descripción del archivo README, hay que tener en cuenta que la frase de búsqueda debe comenzar con el calificador <em><strong>in</strong></em>. Esto hace posible buscar "dentro" de lo que estamos buscando.</p><p>Veamos un ejemplo de cómo sería una búsqueda individual:</p><ul><li>Usando <code>in:name</code>. Digamos que estás buscando recursos para aprender más sobre Ciencia de Datos. En este caso, puedes usar el comando <code>Ciencia de Datos in:name</code>, que listará los repositorios con Ciencia de Datos <strong><em>en el nombre</em></strong> del repositorio.</li><li>Usando <code>in:description</code>. Si deseas encontrar repositorios con una descripción específica, por ejemplo, repositorios donde se incluya el término "freeCodeCamp" <strong><em>en la descripción</em></strong>, nuestra búsqueda será: <code>freecodecamp in:description</code>.</li><li>Usando <code>in:readme</code> Utilizas esto para buscar a través de un README de un archivo para una cierta frase. Si queremos encontrar repositorios donde se incluya el término freecodecamp <strong><em>en el README</em></strong>, nuestra búsqueda será: freecodecamp <code>in:readme</code>.</li><li>Usando <code>in:topic</code>. Utilizas esto para encontrar si una cierta frase o palabra está etiquetada en los temas. Por ejemplo, para encontrar todos los repositorios donde freecodecamp esté listado <strong><em>en el tema</em></strong>, nuestra búsqueda será: freecodecamp <code>in:topic</code>.</li></ul><p>También se pueden combinar múltiples consultas de búsqueda para estrechar aún más la búsqueda.</p><h2 id="c-mo-encontrar-por-estrellas-forks">Cómo encontrar por Estrellas, Forks </h2><p>Podemos además buscar un repositorio basado en cuántas estrellas y forks tiene el proyecto. Esto nos facilita saber qué tan popular es el proyecto.</p><p><strong>Ejemplos</strong></p><p>Usando <code>stars:n</code>. Si buscamos un repositorio con 1000 estrellas entonces la consulta será <code>stars:1000</code>. Esta acción listará exactamente 1000 repositorios. </p><p>Empleando <code>forks:n</code>. Aquí especificamos el número de <em>forks (</em>es decir<em> </em>las bifurcaciones o ramificaciones<em>) </em>que deseamos de un repositorio. Si queremos que los forks sean menos de 100 entonces nuestra consulta será la siguiente: <code>forks:&lt;100</code>.</p><p>¿La buena noticia? ¡Siempre podemos usar operadores relacionales! &nbsp;<code>&lt;</code>, <code>&gt;</code>, <code>&lt;=</code>, <code>&gt;=</code> &amp; <code>..</code> Esto nos ayudará a hacer más fácil y rápida la búsqueda.</p><h2 id="realizando-b-squedas-mediante-el-lenguaje">Realizando búsquedas mediante el lenguaje</h2><p>Otra forma genial de buscar en GitHub es mediante el lenguaje. Ello nos ayuda a filtrar nuestro repositorio en base al<strong> lenguaje de programación </strong>que buscamos.</p><p><strong>Por ejemplo:</strong></p><ul><li>Tenemos la forma <code>language:LANGUAGE</code>. Si quisieramos buscar un proyecto con código en PHP, nuestra búsqueda sería: <code>language:PHP</code></li></ul><h2 id="b-squedas-mediante-el-nombre-de-la-organizaci-n">Búsquedas mediante el nombre de la organización</h2><p>También podemos buscar repositorios/proyectos que son mantenidos o creados por una organización en específico. Para ello necesitamos empezar nuestra búsqueda con la palabra clave <code>org:</code> seguida del nombre de la organización.</p><p>Si usamos <code>org:freecodecamp</code> nos mostrará los repositorios que sean de freeCodeCamp.</p><h2 id="encontrando-mediante-fechas">Encontrando mediante fechas</h2><p>Si deseamos que los resultados se ajusten a una fecha específica, podemos buscar usando una las siguientes palabras clave: <code>created</code>, <code>updated</code>, <code>merged</code> and <code>closed</code>. Estas palabras clave deberán estar acompañadas por la fecha en el formato <code>YYYY-MM-DD</code>.</p><p><strong>Ejemplo:</strong></p><ul><li>Usando <code>keyword:YYYY-MM-DD</code>. Supongamos que deseamos buscar <strong><em>todos </em></strong>los repositorios con la palabra freeCodeCamp que fueron creados después de 2022-10-01. Entonces nuestra búsqueda será: <code>freecodecamp created:&gt;2022-10-01</code></li></ul><p>También podemos usar los operadores relaciones <code>&lt;</code>, <code>&gt;</code>, <code>&gt;=</code> y<code>&lt;=</code> para buscar repositorios después de, antes de o en una fecha exacta . Si queremos buscar en un <strong><em>rango</em></strong>, entonces usamos<code>...</code>.</p><h4 id="encontrando-repositorios-mediante-el-tipo-de-licencia"><strong>Encontrando repositorios mediante el tipo de licencia</strong></h4><p>Las licencias son muy importantes cuando estamos buscando un proyecto al cual contribuir. Diferentes licencias otorgan diferentes derechos en cuanto a lo que un contribuidor puede o no puede hacer. </p><p>Para facilitarnos la búsqueda de proyectos con las licencias adecuadas, necesitamos tener un buen entendimiento de las licencias. Podemos leer más sobre ellas aquí.</p><p><strong>Ejemplo:</strong></p><ul><li>Usamos <code>license:LICENSE_KEYWORD</code>. Esta es una buena forma de buscar proyectos con licencias específicas. Para buscar proyectos con la licencia MIT, por ejemplo, haríamos lo siguiente: <code>license:MIT</code>.</li></ul><h2 id="encontrar-por-visibilidad">Encontrar por visibilidad</h2><p>También podemos llevar a cabo nuestra búsqueda en términos de la visibilidad del repositorio. En este caso, podemos usar tanto público como privado.</p><p>Esto coincidirá con los problemas (<em>issues</em>) y las <a href="https://docs.github.com/es/issues/tracking-your-work-with-issues/viewing-all-of-your-issues-and-pull-requests">solicitudes de extracción (PRs)</a> que estén en un repositorio público o privado, respectivamente.</p><p><strong>Ejemplos:</strong></p><ul><li>Usamos <code>is:public</code>. Esto mostrará una lista de repositorios públicos. Tomemos un ejemplo donde queramos buscar todos los repositorios <strong><em>públicos </em></strong>propiedad de freeCodeCamp. Entonces nuestra búsqueda será: <code>is:public org:freecodecamp</code>.</li><li>Usando <code>is:private</code>. Dicha consulta significa que listará todos los repositorios <strong><em>privados </em></strong>dentro de los parámetros.</li></ul><h2 id="conclusi-n">Conclusión</h2><p>Aunque hemos cubierto muchas consultas de búsqueda aquí, siempre podemos agregar nuestra creatividad para estrechar aún más nuestra búsqueda combinando varios parámetros juntos. </p><p>Para obtener recursos adicionales y más parámetros de búsqueda, siempre podemos consultar la <a href="https://docs.github.com/es/search-github/searching-on-github">documentación de GitHub</a> o hacer uso de la <a href="https://github.com/search/advanced?">Búsqueda Avanzada de GitHub. </a></p><p>Estos métodos siempre nos serán útiles ya que ofrecen más opciones de filtrado. Hay una miríada de parámetros de búsqueda y variaciones que podríamos utilizar para hacer más fácil nuestra actividad diaria en GitHub. </p><p>Espero que esto les ayude a utilizar la plataforma de manera más fácil y efectiva.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo crear una rama local en Git ]]>
                </title>
                <description>
                    <![CDATA[ Al realizar cambios en un repositorio de Git, la mejor práctica es hacer push de los cambios a una rama diferente. Esto permite comparar los cambios antes de hacer un pull request y finalmente fusionar las ramas.  Esto es esencialmente crucial cuando se trabaja con otros desarrolladores. La rama ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-crear-una-rama-local-en-git/</link>
                <guid isPermaLink="false">65402204e76d6303de0db7a5</guid>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Cristian Fernando Villca Gutierrez ]]>
                </dc:creator>
                <pubDate>Tue, 07 Nov 2023 06:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/10/cover-template.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-create-a-local-git-branch/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Create a Local Branch in Git</a>
      </p><p>Al realizar cambios en un repositorio de Git, la mejor práctica es hacer push de los cambios a una rama diferente. Esto permite comparar los cambios antes de hacer un pull request y finalmente fusionar las ramas. </p><p>Esto es esencialmente crucial cuando se trabaja con otros desarrolladores.</p><p>La rama <code>main</code> de tu repositorio es considerada como la rama principal, es la única rama presente por defecto. Ahora repasemos rápidamente cómo crear ramas en Git. </p><h2 id="c-mo-crear-ramas-en-git"><strong>Cómo crear ramas en Git</strong></h2><p>En esencia, hay dos métodos para crear ramas en Git.</p><p>Puede usar un sólo comando para crear la rama y moverse a ella. O bien, puede crear la rama primero con un comando y luego moverse a ella con otro comando cuando desee trabajar en esa rama. </p><p>Aquí está una versión rápida del código:</p><pre><code class="language-bash">// crear una rama y moverse a esa rama
$ git checkout -b &lt;nombre-rama&gt;

// crear sólo una rama
$ git branch &lt;nombre-rama&gt;</code></pre><h3 id="c-mo-crear-una-rama-en-git-y-moverse-a-esa-nueva-rama"><strong>Cómo crear una rama en Git y moverse a esa nueva rama</strong></h3><p>Podemos crear una nueva rama y moverse a ella usando el comando <code>git checkout</code> con la opción <code>-b</code> y <code>&lt;nombre-rama&gt;</code>. Se ve así: </p><pre><code class="language-bash">$ git checkout -b &lt;branch-name&gt;</code></pre><p>Supongamos que queremos crear una nueva rama de Git llamada "paginación" a partir de la rama <code>main</code>. Para lograr esto, usaremos el comando <code>git checkout</code> con la opción <code>-b</code> seguido del nombre de la rama "paginación".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/10/s_E7E3F14C4905C4CE20AE3FDC33EFE78C3CAFED59288B605B89A9E40497700515_1657112003074_branch.gif" class="kg-image" alt="s_E7E3F14C4905C4CE20AE3FDC33EFE78C3CAFED59288B605B89A9E40497700515_1657112003074_branch" width="1456" height="608" loading="lazy"></figure><p>Como puede ver, creamos una nueva rama y el comando checkout hizo que nuestra rama cambiara automáticamente de "main" a "paginación".</p><p>Veamos ahora cómo crear una rama en Git sin movernos a ella. </p><h2 id="c-mo-crear-una-rama-en-git-sin-movernos-a-la-nueva-rama"><strong>Cómo crear una rama en Git sin movernos a la nueva rama</strong></h2><p>Este es el método estándar para crear una rama usando el comando <code>git branch</code> y especificando el nombre de la rama en Git que desea crear.</p><pre><code class="language-bash">$ git branch &lt;nombre-rama&gt;</code></pre><p>Por ejemplo, como hicimos anteriormente, podemos crear una rama "paginación" para reemplazar con "paginación". Así es como se vería: </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/10/s_E7E3F14C4905C4CE20AE3FDC33EFE78C3CAFED59288B605B89A9E40497700515_1657114781462_switch.gif" class="kg-image" alt="s_E7E3F14C4905C4CE20AE3FDC33EFE78C3CAFED59288B605B89A9E40497700515_1657114781462_switch" width="1456" height="608" loading="lazy"></figure><p>Como puede ver, la rama no cambió, pero se creó una nueva rama. Para ver una lista de todas las ramas disponibles, puede usar este comando:</p><pre><code class="language-git">$ git branch
</code></pre><p>Finalmente, supongamos que más tarde deseamos cambiar a nuestra nueva rama en Git o a cualquier otra rama que hayamos creado anteriormente. En este caso, podemos hacer uso del comando <code>git checkout</code>.</p><pre><code class="language-bash">$ git checkout &lt;branch-name&gt;
</code></pre><h2 id="conclusi-n"><strong>Conclusión</strong> </h2><p>En este artículo, aprendimos a usar comandos de Git en nuestra terminal para crear una rama localmente. </p><p>Si queremos agregar esta rama de forma remota, todo lo que tenemos que hacer es enviarla a nuestro proveedor de Git como GitHub usando el siguiente comando:</p><pre><code class="language-bash">$ git push -u origin &lt;nombre-rama&gt;</code></pre><p>Aprende a <a href="https://joelolawanle.com/posts/how-to-clone-a-specific-branch-with-git">clonar una rama específica con Git con este artículo</a>. &nbsp;</p><p>¡Feliz codificación! </p><p>Puedes acceder a más de 200 de mis artículos <a href="https://joelolawanle.com/contents">visitando mi sitio web</a>. También puedes usar el campo de búsqueda para ver si he escrito un artículo específico. </p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Aprende los conceptos básicos de Git en menos de 10 minutos ]]>
                </title>
                <description>
                    <![CDATA[ Sí, el título es un clickbait. No hay forma de que puedas comprender los conceptos básicos de la tecnología git en solo 10 minutos. Pero puedes acercarte bastante en unos 25 minutos. Y ese es el propósito de este artículo. Si deseas comenzar a aprender sobre la tecnología Git, has ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/aprende-los-conceptos-basicos-de-git-en-menos-de-10-minutos/</link>
                <guid isPermaLink="false">6478104949c8db0881633ccf</guid>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Andrés  Torres ]]>
                </dc:creator>
                <pubDate>Mon, 26 Jun 2023 17:49:33 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/06/git-fcc.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/learn-the-basics-of-git-in-under-10-minutes-da548267cc91/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Learn the Basics of Git in Under 10 Minutes</a>
      </p><p>Sí, el título es un <em>clickbait</em>. No hay forma de que puedas comprender los conceptos básicos de la tecnología git en solo 10 minutos. Pero puedes acercarte bastante en unos 25 minutos. Y ese es el propósito de este artículo.</p><p>Si deseas comenzar a aprender sobre la tecnología Git, has venido al lugar correcto. Esta es una guía completa para principiantes de Git. Hay muchos clientes para Git. La tecnología es la misma sin importar el cliente. Pero en esta guía usaremos GitHub para entender Git.</p><h3 id="-empecemos-">¡Empecemos!</h3><h2 id="-qu-es-el-control-de-versiones">¿Qué es el control de versiones?</h2><blockquote>El control de versiones es un sistema que registra los cambios en un archivo o conjunto de archivos a lo largo del tiempo para que pueda recuperar versiones específicas más adelante. Es decir que, idealmente; podemos colocar cualquier archivo en la computadora en el control de versiones. </blockquote><h2 id="en-teor-a-esto-est-bien-pero-por-qu-habr-amos-de-hacer-eso">En teoría esto está bien... ¿Pero por qué habríamos de hacer eso?</h2><h3 id="este-es-el-por-qu-">Este es el por qué:</h3><p>Un Sistema de control de versiones (VCS en inglés) nos permite revertir los archivos a un estado anterior, revertir todo el proyecto a un estado anterior, revisar los cambios realizados a lo largo del tiempo, ver quién modificó por última vez algo que podría estar causando un problema, quién introdujo un problema y cuando, y más. El uso de un VCS también significa que si por descuido arruinamos las cosas o perdemos nuestros archivos, generalmente podemos recuperarlos fácilmente. Y a veces solo quieres saber “quién escribió esta porquería”. ¿y tener acceso a esa información vale la pena?.</p><h3 id="entonces-qu-es-git">Entonces, ¿qué es Git?</h3><p>Git es un sistema de control de versiones para rastrear cambios en archivos de computadora y coordinar el trabajo en esos archivos entre varias personas. Git es un sistema de control de versiones distribuido. Git no depende necesariamente de un servidor central para almacenar todas las versiones de los archivos de un proyecto. En cambio, cada usuario “clona” una copia de un repositorio (una colección de archivos) y tiene el historial completo del proyecto en su propio disco duro. Este clon tiene todos los metadatos del original, mientras que el original en sí se almacena en un servidor autohospedado o en un servicio de alojamiento de terceros como GitHub.</p><p>Git te ayuda a realizar un seguimiento de los cambios que realizas en tu código. Es básicamente la pestaña de historial para tu editor de código (¿sin modo de incógnito?). Si en algún momento durante la codificación te encuentras con un error fatal y no sabes qué lo está causando, siempre puedes volver al estado estable. Por lo tanto, es muy útil para la depuración. O simplemente puede ver qué cambios realizó en su código a lo largo del tiempo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/06/image.png" class="kg-image" alt="image" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/06/image.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2023/06/image.png 800w" sizes="(min-width: 720px) 720px" width="800" height="325" loading="lazy"><figcaption>Una versión simple del historial de un archivo.</figcaption></figure><p>En el ejemplo anterior, las tres "tarjetas" representan diferentes versiones del mismo archivo. Podemos seleccionar qué versión del archivo queremos usar en cualquier momento. Entonces puedo saltar de un lado a otro a cualquier versión del archivo en el continuo de tiempo de git.</p><p>Git también te <strong>ayuda a sincronizar código </strong>entre varias personas. Así que imagina que tú y tu amigo están colaborando en un proyecto. Ambos están trabajando en los mismos archivos de proyecto. Git toma esos cambios que tú y su amigo hicieron de forma independiente y los fusiona en un solo repositorio "maestro" (Master). Entonces, al usar Git, puedes asegurarse de que ambos estén trabajando en la versión más reciente del repositorio. Por lo tanto, no tienes que preocuparte por enviar tus archivos por correo y trabajar con una cantidad ridícula de copias del archivo original. ¿Y colaborar a larga distancia se vuelve tan fácil como HTML?.</p><h3 id="flujo-de-trabajo-git-"><strong>Flujo de trabajo Git:</strong></h3><p>Antes de comenzar a trabajar con los comandos de Git, es necesario que comprendas lo que representa.</p><h3 id="-qu-es-un-repositorio">¿Qué es un Repositorio?</h3><p>Un repositorio, también conocido como repositorio, no es más que una colección de código fuente.</p><h3 id="hay-cuatro-elementos-fundamentales-en-el-flujo-de-trabajo-de-git-">Hay cuatro elementos fundamentales en el flujo de trabajo de Git.</h3><p><strong>1.Directorio de trabajo.</strong></p><p><strong>2.Área de ensayo.</strong></p><p><strong>3.Repositorio local.</strong></p><p><strong>4.Repositorio remoto.</strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/06/image-1.png" class="kg-image" alt="image-1" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/06/image-1.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2023/06/image-1.png 800w" sizes="(min-width: 720px) 720px" width="800" height="470" loading="lazy"><figcaption>Diagrama de un flujo de trabajo Git simple</figcaption></figure><p><strong>Si consideras un archivo en su Directorio de trabajo, puedes estar en tres estados posibles.</strong></p><ol><li><strong>Puede ser escenificado</strong>. Lo que significa que los archivos con los cambios actualizados están marcados para ser confirmados en el repositorio local pero aún no confirmados.</li><li>Se puede <strong>modificar</strong>. Lo que significa que los archivos con los cambios actualizados aún no están almacenados en el repositorio local.</li><li>Se puede<strong> consolidar (commit).</strong> Lo que significa que los cambios que realizó en su archivo se almacenan de forma segura en el repositorio local.</li></ol><ul><li><code>git add</code> es un comando que se usa para agregar un archivo que está en el <strong>directorio de trabajo </strong>al área de preparación.</li><li><code>git commit</code> es un comando que se usa para agregar todos los archivos que están almacenados en el <strong>repositorio local.</strong></li><li><code>git push</code> es un comando que se usa para agregar todos los archivos comprometidos en el repositorio local al repositorio remoto. Entonces, en el repositorio remoto, todos los archivos y cambios serán visibles para cualquier persona con acceso al repositorio remoto.</li><li><code>git fetch</code> es un comando que se usa para obtener archivos del repositorio remoto al repositorio local, pero no al directorio de trabajo.</li><li><code>git merge</code> es un comando que se usa para obtener los archivos del repositorio local en el directorio de trabajo.</li><li><code>git pull</code> Este comando se usa para obtener archivos del repositorio remoto directamente en el directorio de trabajo. es equivalente a un <code>git fetch</code> y un <code>git merge</code> .</li></ul><p><strong>Ahora que sabemos qué es Git y sus terminologías básicas, veamos cómo podemos colocar un archivo en git.</strong> Lo haremos de la manera correcta y de la manera difícil. Sin ninguna aplicación GUI.</p><p>Supongo que ya tienes un archivo que deseas colocar bajo el control de versiones. Si no, cree una carpeta de muestra llamada 'MuskCult' y coloques algunos archivos de código de muestra en ella.</p><h2 id="paso-0-crea-una-cuenta-de-github">Paso 0: Crea una cuenta de GitHub</h2><p>Si aún no tienes una cuenta, puedes crear una <a href="https://github.com/join" rel="noopener">aquí</a>.</p><h2 id="paso-1-aseg-rate-de-tener-installado-git-en-tu-equipo">Paso 1: Asegúrate de tener installado Git en tu equipo</h2><p>Si estás en una<strong> <strong>Mac</strong></strong>, enciende la terminal e ingresa el siguiente comando:</p><pre><code>$ git --version</code></pre><p>Esto te pedirá que abras un instalador si aún no tienes git. Así que configúralo usando el instalador. Si ya tienes git, solo te mostrará qué versión de git tienes instalada.</p><p>Si estás usando <strong><strong>Linux</strong></strong>(deb), escribe lo siguiente en la terminal:</p><pre><code>$ sudo apt install git-all</code></pre><p>Si estás en <strong><strong><a href="https://git-scm.com/download/win">Windows</a></strong></strong>:</p><pre><code>winget install --id Git.Git -e --source winget</code></pre><h2 id="paso-2-dile-a-git-quien-eres">Paso 2: Dile a Git quien eres</h2><p>Preséntate. En serio, menciona tu nombre de usuario y dirección de correo electrónico de Git, ya que en cada confirmación de Git se utilizará esta información para identificarte como el autor.</p><pre><code>$ git config --global user.name "YOUR_USERNAME"

$ git config --global user.email "im_satoshi@musk.com"

$ git config --global --list # To check the info you just provided</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*JbyUdhLMEdglRxQk6PH7Vg.gif" class="kg-image" alt="1*JbyUdhLMEdglRxQk6PH7Vg" width="800" height="477" loading="lazy"></figure><h2 id="paso-3-genera-comprueba-tu-equipo-en-busca-de-claves-ssh-existentes-opcional-">Paso 3: Genera/comprueba tu equipo en busca de claves SSH existentes. (Opcional)</h2><p>¿Porque preguntas? Con el protocolo SSH, puede conectarse y autenticarse en servidores y servicios remotos. Con las claves SSH, puede conectarse a GitHub sin proporcionar su nombre de usuario o contraseña en cada visita.</p><p>Sigue este<strong><strong> <a href="https://help.github.com/articles/about-ssh/" rel="noopener">link</a> </strong></strong>para aprender más acerca de SSH.<br>Visita <strong><a href="https://help.github.com/articles/checking-for-existing-ssh-keys/">aquí</a><strong> </strong></strong>para verificar si tienes una clave SSH existente.<br>Ve <strong><a href="https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/">aquí</a></strong> para generar una clave SSH.<br>Ve <strong><a href="https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/">aquí</a><strong> </strong></strong>para añadir la clave SSH a tu cuenta de GitHub.<br>Finalmente <strong><a href="https://help.github.com/articles/testing-your-ssh-connection/">aquí</a></strong> puedes comprobar la conección.</p><p>Si configuraste SSH, cada comando de git que tiene un enlace lo reemplazará por:</p><pre><code>Instead of : https://github.com/username/reponame

You use    : git@github.com:username/reponame.git

           Note : You can use both ways alternatively</code></pre><p><strong>Usaré el protocolo SSH en este tutorial.</strong></p><h2 id="paso-4-hagamos-git">Paso 4: Hagamos Git</h2><p>Crear un nuevo repositorio en GitHub. Sigue este <a href="https://github.com/new" rel="noopener">link</a>.<br>Ahora, ubica la carpeta que deseas colocar debajo de git en su terminal.</p><pre><code>$ cd Desktop/MuskCult</code></pre><h4 id="inicia-git-"><strong>Inicia Git:</strong></h4><p>Y para colocar la carpeta debajo de git, ingresa:</p><pre><code>$ touch README.md    # To create a README file for the repository
$ git init           # Initiates an empty git repository</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*Q_DUXRghgFQb9F47mUB6LQ.gif" class="kg-image" alt="1*Q_DUXRghgFQb9F47mUB6LQ" width="800" height="477" loading="lazy"></figure><p>Cómo editar el archivo README.md para proporcionar información acerca del repositorio.</p><h3 id="agrega-archivos-al-rea-de-preparaci-n-para-la-confirmaci-n-">Agrega archivos al área de preparación para la confirmación:</h3><p>Ahora, para agregar los archivos al repositorio de git el commit:</p><pre><code>$ git add .  
# Adds all the files in the local repository and stages them for commit

OR if you want to add a specific file

$ git add README.md 
# To add a specific file</code></pre><h3 id="antes-del-commit-veamos-qu-archivos-se-preparan-">Antes del commit, veamos qué archivos se preparan:</h3><pre><code>$ git status # Lists all new or modified files to be committed</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/06/image-2.png" class="kg-image" alt="image-2" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/06/image-2.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2023/06/image-2.png 800w" sizes="(min-width: 720px) 720px" width="800" height="477" loading="lazy"></figure><p><strong>Confirma los cambios que realizaste en tu Git Repo:</strong><br>Ahora para confirmar los archivos que agregó a su repositorio de git:</p><pre><code>$ git commit -m "First commit"
# The message in the " " is given so that the other users can read the message and see what changes you made</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*LoUwFy29RkgCS7hCajd_3g.gif" class="kg-image" alt="1*LoUwFy29RkgCS7hCajd_3g" width="800" height="478" loading="lazy"></figure><h3 id="anula-la-confirmaci-n-de-los-cambios-que-acaba-de-realizar-en-su-git-repo-">Anula la confirmación de los cambios que acaba de realizar en su Git Repo:</h3><p>Ahora supongamos que que acabamos de cometer algún error en el código o colocamos un archivo no deseado dentro del repositorio. Este archivo no deseado puede desorganizar los archivos que acabamos de agregar, por lo tanto usamos:</p><pre><code>$ git reset HEAD~1
# Remove the most recent commit
# Commit again!</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*rxOX_U-ZRmGfhgIhNWlDIQ.gif" class="kg-image" alt="1*rxOX_U-ZRmGfhgIhNWlDIQ" width="800" height="477" loading="lazy"></figure><h3 id="a-adiendo-un-origen-remoto-y-un-git-push-">Añadiendo un origen remoto y un Git Push:</h3><p>Ahora cada vez que tú hagas cambios en los archivos y los guardes, no será automáticamente actualizado en GitHub. Todos los cambios que hicimos en el archivo se actualizan en el repositorio local. Ahora para actualizar los cambios en el repositorio maestro:</p><pre><code>$ git remote add origin remote_repository_URL
# sets the new remote</code></pre><p>El comando <strong>git remote</strong> nos permite crear, ver y eliminar conexiones a otros repositorios.</p><pre><code>$ git remote -v
# List the remote connections you have to other repositories.</code></pre><p>El comando <strong>git remote -v</strong> enumera las URL de las conexiones remotas que tiene con otros repositorios.</p><pre><code>$ git push -u origin master # pushes changes to origin</code></pre><p>Ahora, el comando <strong>git push </strong>traslada los cambios en su repositorio local hasta el repositorio remoto que especificó como origen.</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*w-nfopsKIks_JRzFe5D8xA.gif" class="kg-image" alt="1*w-nfopsKIks_JRzFe5D8xA" width="800" height="477" loading="lazy"></figure><p>Y ahora, si vamos y revisamos nuestra página de repositorio en GitHub, debería verse así:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2023/06/image-3.png" class="kg-image" alt="image-3" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2023/06/image-3.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2023/06/image-3.png 800w" sizes="(min-width: 720px) 720px" width="800" height="491" loading="lazy"></figure><p>Y eso es. Acabas de agregar los archivos al repositorio que acabas de crear en GitHub.</p><h3 id="observa-los-cambios-que-realizaste-en-tu-archivo-">Observa los cambios que realizaste en tu archivo:</h3><p>Una vez que empieces a hacer cambios en tus archivos y los guardes, el archivo no coincidirá con la última versión que se comprometió con git. Para ver los cambios que acabas de hacer:</p><p>Has hecho lo siguiente:</p><pre><code>$ git diff # To show the files changes not yet staged</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*xym1QvvvWorfoyGMXv28Yg.gif" class="kg-image" alt="1*xym1QvvvWorfoyGMXv28Yg" width="800" height="477" loading="lazy"></figure><h3 id="vuelve-a-la-ltima-versi-n-comprometida-con-git-repo-">Vuelve a la última versión comprometida con Git Repo:</h3><p>Ahora puedes optar por volver a la última versión confirmada ingresando:</p><pre><code>$ git checkout .

OR for a specific file

$ git checkout -- &lt;filename&gt;</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*HYgYkfo3W4MUA8CJl12rXg.gif" class="kg-image" alt="1*HYgYkfo3W4MUA8CJl12rXg" width="800" height="477" loading="lazy"></figure><h3 id="ver-historial-de-commits-">Ver historial de commits:</h3><p>Puedes emplear el comando <strong><strong>git log</strong></strong> para observar el historial de <em>commits</em> que has hecho en tus archivos.</p><pre><code>$ git log</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*9w7uBJcQMxc708DBw8Sewg.gif" class="kg-image" alt="1*9w7uBJcQMxc708DBw8Sewg" width="800" height="473" loading="lazy"></figure><p>Cada vez que realiza cambios que desea que se reflejen en GitHub, los siguientes son los flujos de comandos más comunes:</p><pre><code>$ git add .
$ git status # Lists all new or modified files to be committed
$ git commit -m "Second commit"
$ git push -u origin master</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*rWBJnBdF1V8YO_mi-jEfxA.gif" class="kg-image" alt="1*rWBJnBdF1V8YO_mi-jEfxA" width="800" height="477" loading="lazy"></figure><p>Ahora, si vamos y vemos nuestro repositorio, podemos identificar si la confirmación fue exitosa mirando el mensaje de confirmación para cada archivo.</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*QHM8m5HGavHkdzPz06UWGw.png" class="kg-image" alt="1*QHM8m5HGavHkdzPz06UWGw" width="800" height="524" loading="lazy"></figure><h2 id="paso-5-eso-est-muy-bien-pero-c-mo-descargo-y-trabajo-en-otros-repositorios-en-github">Paso 5 : Eso está muy bien... Pero, ¿cómo descargo y trabajo en otros repositorios en GitHub?</h2><h3 id="clonando-un-repo-de-git-">Clonando un Repo de Git:</h3><p>Localiza el directorio en el que deseas clonar el repositorio. Copia el enlace del repositorio que deseas e ingresa lo siguiente:</p><pre><code>$ git clone remote_repository_URL</code></pre><p>Siéntete libre de seguir adelante y clonar el repositorio que creé arriba usando: <a href="https://github.com/Gothamv/MuskCult" rel="noopener">https://github.com/Gothamv/MuskCult</a></p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*6NACk8-IiBjbauM-k-aesQ.gif" class="kg-image" alt="1*6NACk8-IiBjbauM-k-aesQ" width="800" height="477" loading="lazy"></figure><h3 id="empujar-cambios-al-git-repo-">Empujar cambios al Git Repo:</h3><p>Ahora puedes trabajar en los archivos que deseas y comprometerte con los cambios localmente. Si deseas enviar cambios a ese repositorio, debes<a href="https://docs.github.com/es/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/inviting-collaborators-to-a-personal-repository"> agregarte como colaborador para el repositorio o bien,</a> debes crear algo conocido como solicitud de extracción. Observa cómo hacer uno aquí y envíame una solicitud de extracción con tu archivo de código.</p><h3 id="colaborando-">Colaborando:</h3><p>Así que imagina que tú y tu amigo están colaborando en un proyecto. Ambos están trabajando en los mismos archivos de proyecto. Cada vez que realizas algunos cambios y los inserta en el repositorio maestro, tu amigo tiene que extraer los cambios que insertaste en el repositorio de git. </p><p>Es decir, para asegurarse de que está trabajando en la última versión del repositorio de git cada vez que comienzas a trabajar, un comando de extracción de git es el camino a seguir.<br>Ahora a continuación hay un ejemplo de un proyecto en el que mi amigo y yo estamos colaborando:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/1*2-tl2rHsgPqiv88aI55CPw.png" class="kg-image" alt="1*2-tl2rHsgPqiv88aI55CPw" width="800" height="434" loading="lazy"><figcaption>There has just been a commit on the repo</figcaption></figure><p>Entonces, para asegurarme de que esos cambios se reflejen en mi copia local del repositorio:</p><pre><code>$ git pull origin master</code></pre><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*ySDKu2OEdkc26yOUp-TJJQ.gif" class="kg-image" alt="1*ySDKu2OEdkc26yOUp-TJJQ" width="798" height="473" loading="lazy"></figure><h3 id="aqu-hay-dos-comandos-git-m-s-tiles-">Aquí hay dos comandos git más útiles:</h3><pre><code>$ git fetch
    AND
$ git merge</code></pre><p>En los términos más simples, <code>git fetch</code> seguido de un <code>git merge </code>equivale a un <code>git pull</code>. Pero entonces... ¿Porqué existe?</p><p>Cuando usas <code>git pull</code>, Git intenta hacer tu trabajo automáticamente. Es sensible al contexto, por lo que Git fusionará cualquier confirmación extraída en la rama en la que estás trabajando actualmente. <code>git pull</code> <strong>fusiona automáticamente las confirmaciones sin permitirle revisarlas primero.</strong></p><p>Cuando aplicas <code>git fetch</code>, Git recopila todas las confirmaciones de la rama de destino que no existen en tu rama actual <strong>y las almacena en tu repositorio local. Sin embargo, no los fusiona con su rama actual</strong>. Esto es particularmente útil si necesita mantener su repositorio actualizado, pero está trabajando en algo que podría fallar si actualiza sus archivos. Para integrar las confirmaciones en su rama maestra, usa <code>git merge</code>.</p><h3 id="un-detalle-m-s-"><strong>Un detalle más:</strong></h3><pre><code>.gitignore</code></pre><p>¿Qué es esto?</p><p><code>.gitignore</code> le dice a git qué archivos (o patrones) debe ignorar. Por lo general, se usa para evitar enviar archivos transitorios de su directorio de trabajo que no son útiles para otros colaboradores, como productos de compilación, archivos temporales creados por IDE, etc.</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*3NFtOjfz0NvNSwba7YCmDA.png" class="kg-image" alt="1*3NFtOjfz0NvNSwba7YCmDA" width="800" height="625" loading="lazy"></figure><p>Entonces, en el ejemplo anterior, el sistema usa archivos como <strong>pycache</strong>, .DS_Store para almacenar información para un acceso más rápido. Esto no es útil para otros colaboradores. <strong>Entonces podemos decirle a git que los ignore</strong> agregando un archivo <code>.gitignore</code> .</p><p>Usa el comando <em>touch </em>para crear el archivo &nbsp;<code>.gitignore</code> :</p><pre><code>$ touch .gitignore</code></pre><p>Y puede agregar los siguientes patrones para decirle a git que ignore dichos archivos.</p><pre><code>/*.cmake
/*.DS_Store
/.user
/build
etc. depending upon the files you want git to untrack</code></pre><p><strong>Y eso es todo por lo básico. Estén atentos a la Parte 2, que se centrará en Branch, Merge, Stash, Rebase, etc.</strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo obtener y configurar tus claves SSH de Git y Github ]]>
                </title>
                <description>
                    <![CDATA[ Si usas Github sin configurar una clave SSH, te lo estas perdiendo. Sólo piensa en todo el tiempo que gastas en introducir tu correo electrónico y contraseña en la consola cada vez que haces push de un commit, que podría ser dedicado a programar.  Bueno, no mas. Aquí hay ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-obtener-y-configurar-tus-claves-ssh-de-git-y-github/</link>
                <guid isPermaLink="false">647b2c8f4ecd43077f3f58ae</guid>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Limbert Lino Mattos ]]>
                </dc:creator>
                <pubDate>Mon, 26 Jun 2023 17:21:32 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2023/06/5f9c9e49740569d1a4ca3c4e.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/git-ssh-how-to/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Get and Configure Your Git and GitHub SSH Keys</a>
      </p><p>Si usas Github sin configurar una clave SSH, te lo estas perdiendo. Sólo piensa en todo el tiempo que gastas en introducir tu correo electrónico y contraseña en la consola cada vez que haces push de un commit, que podría ser dedicado a programar. </p><p>Bueno, no mas. Aquí hay una guía rápida para generar y configurar una clave SSH con GitHub, para que nunca mas tengas que autenticarte de la manera antigua. </p><h3 id="verifica-si-ya-existe-una-clave-ssh"><strong>Verifica si ya existe una clave SSH</strong></h3><p>Primero, revisa si ya tienes generadas claves SSH para tu maquina. Abre la terminal e ingresa el siguiente comando.</p><pre><code class="language-shell">ls -al ~/.ssh</code></pre><p>Si ya generaste claves SSH, deberías ver una respuesta similar a esta:</p><pre><code class="language-sh">-rw-------  1 user_name user_name  1766 Jul  7  2018 id_rsa
-rw-r--r--  1 user_name user_name   414 Jul  7  2018 id_rsa.pub
-rw-------  1 user_name user_name 12892 Feb  5 18:39 known_hosts</code></pre><p>Si tus claves ya existen, avanza a la sección <strong>copiar tu clave SSH pública </strong>mas debajo.</p><p>Si no ves ninguna respuesta o recibes un mensaje de que el archivo o directorio no existe (<code>No such file or directory</code>), entonces ejecuta en la terminal:</p><pre><code class="language-shell">mkdir $HOME/.ssh</code></pre><p>Luego genera un nuevo conjunto de claves con:</p><pre><code class="language-shell">ssh-keygen -t rsa -b 4096 -C your@email.com</code></pre><p>Ahora revisa que tus claves existan con el comando <code>ls -al ~/.ssh</code> y asegurate de que la salida de la terminal es similar a la mostrada mas arriba. </p><p><strong>Aviso: </strong>Las claves SSH siempre son generadas como un par de claves públicas (<code>id_rsa.pub</code>) &nbsp;y privadas (<code>id_rsa</code>). Es extremadamente importante que <strong>nunca reveles tu clave privada, </strong>y <strong>solo uses tu clave pública </strong>para cosas como la autenticación en GitHub. Puedes leer mas sobre como funcionan los pares de claves SSH / RSA <a href="https://www.freecodecamp.org/news/a-top-down-introduction-to-ssh-965f4fadd32e/">aquí</a>.</p><h3 id="agregua-tu-clave-ssh-al-ssh-agent"><strong>Agregua tu clave SSH al ssh-agent</strong></h3><p><code>ssh-agent</code> es un programa que se inicia cuando inicias sesión y almacena tus claves privadas. Para que funcione correctamente, necesita estar ejecutandose y tener una copia de tu clave privada. </p><p>Primero, asegúrate de que <code>ssh-agent</code> esta ejecutándose con:</p><pre><code class="language-shell">eval "$(ssh-agent -s)" # for Mac and Linux</code></pre><p>o:</p><pre><code class="language-shell">eval `ssh-agent -s`
ssh-agent -s # for Windows</code></pre><p>Luego, añade tu clave privada al <code>ssh-agent</code> con:</p><pre><code class="language-shell">ssh-add ~/.ssh/id_rsa</code></pre><h3 id="copia-tu-clave-ssh-publica"><strong>Copia tu clave SSH publica</strong></h3><p>A continuación, debes copiar tu clave SSH pública en el portapapeles</p><p>Para Linux o Mac, imprime el contenido de tu clave pública a la consola con:</p><pre><code class="language-shell">cat ~/.ssh/id_rsa.pub # Linux</code></pre><p>Luego selecciona y copia la respuesta.</p><p>O para Windows simplemente ejecuta:</p><pre><code class="language-shell">clip &lt; ~/.ssh/id_rsa.pub # Windows</code></pre><h3 id="a-ade-tu-clave-p-blica-ssh-a-github"><strong>Añade tu clave pública SSH a GitHub</strong></h3><p>Ve a la página de ajustes de GitHub, click en SSH and GPG keys y en dar al botón "New SSH key": </p><p>Luego ingresa un nombre reconocible y pega tu clave pública &nbsp;(<code>id_rsa.pub</code>) :</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/02/image-15.png" class="kg-image" alt="image-15" width="600" height="400" loading="lazy"></figure><p>Finalmente, comprueba la autenticación en la terminal con: </p><pre><code class="language-shell">ssh -T git@github.com</code></pre><p>Si seguiste correctamente todos los pasos, deberías ver este mensaje:</p><pre><code class="language-sh">Hi your_user_name! You've successfully authenticated, but GitHub does not provide shell access.</code></pre> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo utilizar Lighthouse en las acciones de GitHub ]]>
                </title>
                <description>
                    <![CDATA[ GitHub Actions [https://docs.github.com/es/actions] se utilizan para automatizar los flujos de trabajo de ingeniería de software. Al igual que herramientas como CircleCI, Jenkins, Travis y muchas otras, GitHub Actions proporciona una API declarativa para definir flujos de trabajo. Estos flujos de trabajo pueden incluir trabajos para construir, probar y desplegar aplicaciones. ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-utilizar-lighthouse-en-las-acciones-de-github/</link>
                <guid isPermaLink="false">6015880762984e09f6084d57</guid>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Santiago Toquica Yanguas ]]>
                </dc:creator>
                <pubDate>Mon, 29 Mar 2021 05:20:22 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/03/zuccotti-1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><a href="https://docs.github.com/es/actions">GitHub Actions</a> se utilizan para automatizar los flujos de trabajo de ingeniería de software. Al igual que herramientas como CircleCI, Jenkins, Travis y muchas otras, GitHub Actions proporciona una API declarativa para definir flujos de trabajo. Estos flujos de trabajo pueden incluir trabajos para construir, probar y desplegar aplicaciones.</p><p>Lighthouse es un proyecto de código abierto de Google para mejorar la calidad de las páginas web. Proporciona métricas centradas en el usuario para auditar el SEO, el rendimiento, la accesibilidad, mejores prácticas y las aplicaciones web progresivas. Para profundizar en Lighthouse, lee "<a href="https://www.freecodecamp.org/news/three-ways-to-analyze-website-performance-with-lighthouse-8d100966c04b/">Cómo analizar el rendimiento de un sitio web con Lighthouse</a>". Este post demostrará lo siguiente:</p><ul><li>Implementación básica de Lighthouse en un flujo de trabajo de GitHub Actions.</li><li>Configuración avanzada para mostrar los resultados de Lighthouse en los comentarios de las solicitudes de extracción.</li><li>Reporte de informes Lighthouse en S3.</li><li>Notificaciones de Slack.</li></ul><h1 id="lighthouse-comprobaci-n-de-github-action">Lighthouse Comprobación de GitHub Action</h1><p>Esta entrada proporcionará una guía para utilizar <a href="https://github.com/foo-software/lighthouse-check-action">Lighthouse Check Action</a> para automatizar las auditorías de Lighthouse. Se puede utilizar dentro de un flujo de trabajo, <a href="https://docs.github.com/es/actions/reference/events-that-trigger-workflows">desencadenado por cualquier evento</a>. Este post demostrará cómo utilizar la acción cuando se desencadena por un evento de solicitud de extracción.</p><h1 id="ejemplo-b-sico">Ejemplo básico</h1><p>Con los siguientes pasos podemos crear un flujo de trabajo básico.</p><ol><li>Crea y cambia a una nueva rama localmente.</li><li>Cree un archivo en su proyecto con una ruta similar a la siguiente <code>.github/workflows/mi-flujo-de-trabajo.yml</code> (sustituyendo <code>mi-flujo-de-trabajo</code> por cualquier nombre de tu elección).</li><li>Rellene el archivo anterior con el ejemplo que se muestra a continuación, sustituyendo el campo <code>urls</code> por una lista separada por comas de las URLs que deseas probar.</li><li>Confirme los cambios localmente y envíe la rama a la remota.</li><li>Desde tu nueva rama, abre un pull request.</li></ol><figure class="kg-card kg-code-card"><pre><code class="language-yaml">name: Lighthouse Check
on: [pull_request]

jobs:
  lighthouse-check:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - run: mkdir /tmp/artifacts
    - name: Run Lighthouse
      uses: foo-software/lighthouse-check-action@master
      with:
        outputDirectory: /tmp/artifacts
        urls: 'https://www.foo.software,https://www.foo.software/contact'
    - name: Upload artifacts
      uses: actions/upload-artifact@master
      with:
        name: Lighthouse reports
        path: /tmp/artifacts
</code></pre><figcaption>yaml</figcaption></figure><p>Y Voilà? - ¡Nosotros tenemos un flujo de trabajo con Lighthouse! Asumiendo que tienes las Github Actions habilitadas en tu repo, tú deberías ver algo como lo siguiente (nota: en el momento de escribir esto las Github Actions están en modo "beta" y <a href="https://docs.github.com/es/actions">requieren registro</a>).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/11/github-tabs.png" class="kg-image" alt="github-tabs" width="600" height="400" loading="lazy"><figcaption>Tabs del repositorio de GitHub&nbsp;</figcaption></figure><p>Al hacer clic en "Acciones" se enumeran todos los flujos de trabajo que se están ejecutando y los anteriores.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/11/list-github-actions.png" class="kg-image" alt="list-github-actions" width="600" height="400" loading="lazy"><figcaption>Flujo de trabajo de la lista de Github Actions</figcaption></figure><p>Después de seguir los pasos de nuestro ejemplo básico, tú deberías ver un elemento en esta lista. Al hacer clic en él se nos mostrarán los resultados de Lighthouse impresos en la consola.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/11/output-github-actions.png" class="kg-image" alt="output-github-actions" width="600" height="400" loading="lazy"><figcaption>Resultados de Lighthouse impresos en consola</figcaption></figure><p>Desde nuestra configuración, también tenemos resultados capturados en informes HTML guardados como "artefactos".</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/11/artifacts-github-actions.png" class="kg-image" alt="artifacts-github-actions" width="600" height="400" loading="lazy"><figcaption>Al hacer clic en el desplegable "Artefactos" se descargan los informes HTML</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/11/lighthouse-report-github-actions.png" class="kg-image" alt="lighthouse-report-github-actions" width="600" height="400" loading="lazy"><figcaption>Informe completo de Lighthouse como archivo HTML descargado de "Artifacts"</figcaption></figure><h1 id="ejemplo-avanzado">Ejemplo avanzado</h1><p>Lighthouse Check Action ofrece un conjunto completo de campanas y silbatos utilizando el <a href="https://github.com/foo-software/lighthouse-check">módulo de NPM</a>( <code>lighthouse-check</code>) bajo el capó. Hay mucho más que podemos hacer con esto. ¡Vamos a proceder!</p><h2 id="comentarios-del-pull-request">Comentarios del Pull Request</h2><p>Al utilizar esta función, los comentarios se publican con los resultados de Lighthouse en cada confirmación. Nosotros podemos hacerlo siguiendo los siguientes pasos.</p><ol><li>Crea un nuevo usuario o busca uno ya existente para que actúe como "bot".</li><li><a href="https://docs.github.com/es/github/authenticating-to-github/creating-a-personal-access-token">Crear un token de acceso personal</a> desde esta cuenta de usuario.</li><li><a href="https://docs.github.com/es/actions/reference/encrypted-secrets">Crea un secreto de GitHub para mantener el valor</a> encriptado desde arriba. En nuestro ejemplo lo nombramos <code>LIGHTHOUSE_CHECK_GITHUB_ACCESS_TOKEN</code>.</li><li>Actualizar nuestro archivo de flujo de trabajo con el diff que se muestra a continuación.</li><li>Commit y push.</li></ol><figure class="kg-card kg-code-card"><pre><code class="language-yaml">with:
+  accessToken: ${{ secrets.LIGHTHOUSE_CHECK_GITHUB_ACCESS_TOKEN }}
  outputDirectory: /tmp/artifacts
</code></pre><figcaption>yaml</figcaption></figure><p>Con esto, hemos creado un bot para publicar los resultados de Lighthouse en los pull requests</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/11/pr-comment-1-github-actions.png" class="kg-image" alt="pr-comment-1-github-actions" width="600" height="400" loading="lazy"><figcaption>Lighthouse resultados como comentarios en los Pull Request</figcaption></figure><h2 id="reporte-de-informes-s3">Reporte de informes S3</h2><p>En nuestro ejemplo, nosotros persistimos los resultados cargando los informes como artefactos en nuestro flujo de trabajo. Esta solución podría ser suficiente en algunos casos, pero los artefactos no se almacenan permanentemente. Para ver los informes, tenemos que navegar en el flujo de trabajo y descargar manualmente los informes desde la vista de artefactos.</p><p>Pero, ¿Si queremos una forma más fiable de almacenar y referenciar los informes? Aquí es donde entra en juego la función S3. Nosotros podemos configurar el almacenamiento de AWS S3 siguiendo los siguientes pasos.</p><ol><li><a href="https://aws.amazon.com/es/premiumsupport/knowledge-center/create-and-activate-aws-account/">Cree una cuenta de AWS</a>, si, tú no tienes una.</li><li><a href="https://docs.aws.amazon.com/es_es/AmazonS3/latest/gsg/SigningUpforS3.html">Crea un S3 bucket</a>, si, tú no tienes uno.</li><li><a href="https://docs.aws.amazon.com/es_es/general/latest/gr/aws-sec-cred-types.html">Adquiere un identificador de clave de acceso de AWS y una clave de acceso secreta.</a></li><li><a href="https://docs.github.com/es/actions/reference/encrypted-secrets">Crea secretos de GitHub</a> para estos dos valores. En nuestro ejemplo nosotros usaremos <code>LIGHTHOUSE_CHECK_AWS_ACCESS_KEY_ID</code> &nbsp;y <code>LIGHTHOUSE_CHECK_AWS_SECRET_ACCESS_KEY</code>, respectivamente.</li><li>Añade el nombre del cubo y la <a href="https://docs.aws.amazon.com/es_es/AWSEC2/latest/UserGuide/using-regions-availability-zones.html">región</a> (ejemplo: <code>us-east-1</code>) como secretos de GitHub: <code>LIGHTHOUSE_CHECK_AWS_BUCKET</code> y <code>LIGHTHOUSE_CHECK_AWS_REGION</code>.</li></ol><p>A continuación, nosotros actualizaremos nuestra configuración con el siguiente diff.</p><figure class="kg-card kg-code-card"><pre><code class="language-yaml">with:
  accessToken: ${{ secrets.LIGHTHOUSE_CHECK_GITHUB_ACCESS_TOKEN }}
+  awsAccessKeyId: ${{ secrets.LIGHTHOUSE_CHECK_AWS_ACCESS_KEY_ID }}
+  awsBucket: ${{ secrets.LIGHTHOUSE_CHECK_AWS_BUCKET }}
+  awsRegion: ${{ secrets.LIGHTHOUSE_CHECK_AWS_REGION }}
+  awsSecretAccessKey: ${{ secrets.LIGHTHOUSE_CHECK_AWS_SECRET_ACCESS_KEY }}
</code></pre><figcaption>yaml</figcaption></figure><p>¡En nuestro próximo commit y push, los informes se suben automáticamente a S3 ✅! También los tenemos enlazados en los comentarios de nuestro PR.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/11/pr-comment-github-actions.png" class="kg-image" alt="pr-comment-github-actions" width="600" height="400" loading="lazy"><figcaption>Lighthouse resultados PR commentarios con reporte del enlace del S3</figcaption></figure><h2 id="notificaciones-de-slack">Notificaciones de Slack</h2><p>¿Qué es una nueva función en un flujo de trabajo de DevOps sin las notificaciones de Slack? Una tristeza sin duda. Vamos a acelerar las cosas añadiendo notificaciones a un canal de Slack para que todo nuestro equipo las vea. Nosotros podemos lograr esto en los siguientes pasos.</p><ol><li><a href="https://api.slack.com/messaging/webhooks">Cree un "Webhook entrante" en su espacio de trabajo de Slack y autorice un canal.</a></li><li>Añade la URL del Webhook como <a href="https://docs.github.com/es/actions/reference/encrypted-secrets">secreto de GitHub</a> &nbsp;- <code>LIGHTHOUSE_CHECK_WEBHOOK_URL</code>.</li><li>Añade los datos de GitHub y la URL del Webhook a nuestra configuración con el siguiente diff. Los datos de GitHub se renderizarán en nuestras notificaciones. Nosotros pasamos los datos de GitHub a través de la configuración con el <a href="https://docs.github.com/es/actions/reference/context-and-expression-syntax-for-github-actions#github-context">"contexto" de GitHub</a>.</li></ol><figure class="kg-card kg-code-card"><pre><code class="language-yaml">with:
  accessToken: ${{ secrets.LIGHTHOUSE_CHECK_GITHUB_ACCESS_TOKEN }}  +  author: ${{ github.actor }}
  awsAccessKeyId: ${{ secrets.LIGHTHOUSE_CHECK_AWS_ACCESS_KEY_ID }}
  awsBucket: ${{ secrets.LIGHTHOUSE_CHECK_AWS_BUCKET }}
  awsRegion: ${{ secrets.LIGHTHOUSE_CHECK_AWS_REGION }}
  awsSecretAccessKey: ${{ secrets.LIGHTHOUSE_CHECK_AWS_SECRET_ACCESS_KEY }}
+  branch: ${{ github.ref }}
  outputDirectory: /tmp/artifacts
+  sha: ${{ github.sha }}
+  slackWebhookUrl: ${{ secrets.LIGHTHOUSE_CHECK_WEBHOOK_URL }}
  urls: 'https://www.foo.software,https://www.foo.software/contact'
</code></pre><figcaption>yaml</figcaption></figure><p>¡Nuestro próximo commit y push introduce las notificaciones de Slack! El enlace "Lighthouse audit" está en la siguiente captura de pantalla, navega por el informe del S3 tal y como está configurado✨.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/11/slack-github-actions.png" class="kg-image" alt="slack-github-actions" width="600" height="400" loading="lazy"><figcaption>Lighthouse Slack notificación</figcaption></figure><h2 id="mantener-un-registro-hist-rico">Mantener un registro histórico</h2><p><a href="https://www.foo.software/lighthouse">Foo's Automated Lighthouse Check</a> es una herramienta que podemos utilizar para gestionar un registro histórico de las auditorías de Lighthouse. Nosotros podemos conectarnos a ella con el GitHub de Lighthouse Check. De esta forma podemos ejecutar Lighthouse de forma remota frente a un entorno local y dockerizado de GitHub. Con esto nosotros podemos estar seguros de que nuestros resultados de Lighthouse no son defectuosos por el cambio de infraestructura de GitHub. Siga los pasos <a href="https://github.com/foo-software/lighthouse-check-action#usage-automated-lighthouse-check-api">documentados para conectarse con Automated Lighthouse Check</a>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/01/automated-lighthouse-check.png" class="kg-image" alt="automated-lighthouse-check" width="600" height="400" loading="lazy"><figcaption>Un registro histórico de las auditorías de Lighthouse con "Automated Lighthouse Check"</figcaption></figure><h1 id="-y-ahora-qu-">¿Y ahora qué?</h1><p>Puede encontrar un ejemplo completo de lo anterior en la documentación de <a href="https://github.com/foo-software/lighthouse-check-action#example-usage">Lighthouse Check Action</a>. ¡Espero que este artículo sea un complemento útil para su flujo de trabajo en DevOps!. Con Lighthouse integrado en un pipeline de CI/CD, podemos estar totalmente equipados para asegurar una alta calidad en el SEO del sitio web, el rendimiento, la accesibilidad, las mejores prácticas y las aplicaciones web progresivas.</p><p>Traducido del artículo de <a href="https://www.freecodecamp.org/news/author/adam/"><strong>Adam Henson</strong></a> - <a href="https://www.freecodecamp.org/news/how-to-use-lighthouse-in-github-actions/"><strong>How to use Lighthouse in GitHub Actions</strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Por favor, todos, pongan su entorno de desarrollo en GitHub ]]>
                </title>
                <description>
                    <![CDATA[ Detenme si esto suena familiar... Quieres iniciar con un nuevo framework/tiempo de ejecución. Así que instalas dicho framework/tiempo de ejecución. Entonces, abres la terminal y ... comando no encontrado(command not found). Gran suspiro. Revisitas los documentos que sugieren que has hecho algunos cambios a la configuración de perfil. De lo ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/por-favor-todos-pongan-su-entorno-de-desarrollo-en-github/</link>
                <guid isPermaLink="false">5fefc8a38c7cd154bb982c50</guid>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Cristian Sulbaran  ]]>
                </dc:creator>
                <pubDate>Fri, 19 Mar 2021 05:05:53 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/03/put-dev-env-in-the-cloud.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/put-your-dev-env-in-github/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Please, Everyone, Put Your Entire Development Environment in Github</a>
      </p><p>Detenme si esto suena familiar...</p><p>Quieres iniciar con un nuevo framework/tiempo de ejecución. Así que instalas dicho framework/tiempo de ejecución.</p><p>Entonces, abres la terminal y ... comando no encontrado(command not found). Gran suspiro.</p><p>Revisitas los documentos que sugieren que has hecho algunos cambios a la configuración de perfil. De lo cual no estás seguro cómo hacerlo, así que vas a StackOverflow, donde encuentras una respuesta de "user92902399" que <em>parece</em> como si pudiera ser legítimo (quién sabe); así que copias y pegas eso en tu terminal y le ruegas a dios que no borre tu disco duro, y le envíes tu historial de búsqueda al presidente por correo. </p><p>Ahora el comando del tiempo de ejecución funciona. Pero falla. El error es críptico.</p><p>Regresas a Google.</p><p>Esta vez no hay respuesta clara en StackOverflow, a pesar de que varias personas tienen un problema similar. Encuentras un <em>issue</em> de Github que pareciera que podría estar relacionado. En algún lado, en el medio de una masa de gente diciendo "¡Gracias, esto funciona!" y "Esto no funciona para nada", alguien utiliza la palabra "Python".</p><p>Revisas tu versión de Python, y suficientemente seguro, este framework/tiempo de ejecución no es compatible con el que tienes instalado. Estás a punto de degradarlo, cuando te das cuenta de que la última vez que miraste en la dirección general de la instalación de Python, te tomó un día hacerlo funcionar nuevamente y todavía no está seguro de cómo lo hiciste.</p><p>¿Sabes qué? Este nuevo framework/tiempo de ejecución probablemente no sea tan bueno. Definitivamente no vale la pena tanto esfuerzo. ¡Oh mira! Una publicación de blog sobre cómo nunca debes usar declaraciones ternarias. ¿En qué estabas trabajando antes? A quien le importa.</p><p>¿Un poco <em>demasiado</em> parecido a lo que hiciste? Así es como es intentar configurar un nuevo proyecto, framework o tiempo de ejecución. Cada vez. Esto es parte de la razón por la que todos los desarrolladores, en un momento dado, miraron a alguien sin comprender, a mitad de un Cheeto, y dijeron: "funciona en mi máquina".</p><h2 id="funciona-en-todas-las-m-quinas">Funciona en TODAS las máquinas</h2><p>La raíz del problema es que, para que el código funcione, hay un entorno completo que también debe configurarse correctamente. Este es un problema difícil de resolver. Lo que necesitamos es una forma de <strong>aislar</strong> el entorno de desarrollo y luego enviarlo con el código para que funcione en todas las máquinas. Y debemos hacerlo sin tener que enviar un sistema operativo completo.</p><p>La clave está en la palabra "aislar". Resulta que tenemos una forma de aislar y enviar entornos completos. Se llama "Docker". Puedes crear un contenedor con cualquier configuración y luego enviarlo a cualquier otra persona. Todo lo que necesitas ahora es una forma de desarrollar en ese contenedor como si fuera su máquina local.</p><p>Tú puedes.</p><p>En este artículo, te mostraré cómo puedes usar algunos archivos de configuración para empaquetar, y enviar todo tu entorno de desarrollo sin tu mal gusto en dubstep.</p><p>Todo esto gracias a la <a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers&amp;WT.mc_id=freecodecamp-blog-buhollan">nueva extensión de contenedores de desarrollo para VSCode.</a></p><h2 id="vs-code-y-contenedores-de-desarrollo">VS Code y contenedores de desarrollo</h2><p>El concepto básico detrás de contenedores de desarrollo (Dev containers), es que especifiques un archivo Docker, que a su vez especifica todas las dependencias y pasos de configuración necesarios para obtener la configuración correcta del entorno de desarrollo. VS Code activará ese contenedor, instalará un pequeño servidor en él y luego se conectará de nuevo a tu instancia de VS Code. Lo que esto significa, es que ahora estás desarrollando dentro de un entorno preconfigurado. Pero para ti, es solo VS Code.</p><p>Para mostrarte cómo funciona esto, voy a crear un contenedor en el cual desarrollar la API de backend de un proyecto en el que trabajé llamado theurlist.com. El backend de este proyecto está escrito en C# y se ejecuta en <a href="https://code.visualstudio.com/tutorials/functions-extension/getting-started?WT.mc_id=freecodecamp-blog-buhollan">Azure Functions</a>. Para ejecutarlo localmente, tendría que instalar el <a href="https://dotnet.microsoft.com/download?WT.mc_id=freecodecamp-blog-buhollan">.NET Core </a>tiempo de ejecución, <a href="https://github.com/Azure/azure-functions-core-tools">CLI de Azure Functions </a>y la <a href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurefunctions&amp;WT.mc_id=freecodecamp-blog-buhollan">extensión Azure Functions VS Code</a>.</p><p>El primer paso es instalar la extensión <a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers&amp;WT.mc_id=freecodecamp-blog-buhollan">Dev Containers</a>. Esto agregará un pequeño ícono en la esquina inferior izquierda de tu VSCode. </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/08/image-90.png" class="kg-image" alt="image-90" width="600" height="400" loading="lazy"></figure><p>También necesitarás tener instalado Docker. Los contenedores de Docker no funcionan muy bien si no tienes Docker. Puede descargar la Community Edition <a href="https://docs.docker.com/install/">aquí</a>.</p><p>Con la extensión instalada, necesitas agregar los archivos de configuración adecuados a este proyecto. Es decir, un "Dockerfile" que especifique el contenedor en el que se cargará el proyecto. La extensión viene con un montón de entornos preconfigurados. Para agregar uno al proyecto, abre la paleta de comandos y selecciona "<em>Dev Containers: Add Development Container Configuration Files"</em><strong><em> </em></strong><em>(</em>"Contenedores de Desarrollo: Agregar archivos de configuración de contenedor de desarrollo").</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/08/image-91.png" class="kg-image" alt="image-91" width="600" height="400" loading="lazy"></figure><p>Este proyecto utiliza Azure Functions y C#, por lo que seleccionarás esa definición de container.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/08/image-92.png" class="kg-image" alt="image-92" width="600" height="400" loading="lazy"></figure><p>Tan pronto como lo hagas, VS Code agregará una carpeta ".deployment" con "Dockerfile" y un archivo "devcontainer.json" dentro. También preguntará inmediatamente si quieres volver a abrir el proyecto en un contenedor. Decimos que no, y dejas que VS Code se relaje por un minuto mientras miramos estos archivos.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/08/image-93.png" class="kg-image" alt="image-93" width="600" height="400" loading="lazy"></figure><p>Primero vamos a mirar en el "Dockerfile". </p><h3 id="configuraci-n-dockerfile">Configuración Dockerfile</h3><p>El "Dockerfile" especifica lo que habrá en el contenedor. Si lo abres, puedes ver que hay bastante allí. Es un poco detallado. Pero podemos analizar las partes importantes.</p><p>Lo primero que hace es incorporar la última versión de .NET Core SDK.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/08/image-94.png" class="kg-image" alt="image-94" width="600" height="400" loading="lazy"></figure><p>Luego instala algunas utilidades en el contenedor. Específicamente, instala ...</p><ul><li>Git (Fuente de controles)</li><li>procps (utilidad de inspección de procesos)</li><li>curl (utilidad HTTP)</li><li>apt-transport-https (utilidad HTTPS)</li><li>gnupg2 (una herramienta de encriptado)</li><li>lsb-release (Imprime información específica de Linux)</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/08/image-95.png" class="kg-image" alt="image-95" width="600" height="400" loading="lazy"></figure><p>Todo esto es para crear un entorno que tenga todas las herramientas oscuras que un desarrollador pueda necesitar para ejecutar este proyecto y poder registrarlo dentro y fuera del control de código fuente. </p><p>Luego, instala las herramientas principales de Azure Functions. Configura todas las ubicaciones de repositorio necesarias antes de la instalación. Estas son todas las cosas que un desarrollador tendría que hacer antes de poder ejecutar este proyecto. </p><p>El otro archivo de la carpeta ".devcontainer" es el archivo "devcontainer.json".</p><h3 id="el-archivo-devcontainer-json">El archivo devcontainer.json</h3><p>Este archivo especifica algunas configuraciones adicionales para el entorno de desarrollo remoto. Específicamente...</p><ol><li>Indica que el "Dockerfile" debe usarse para construir el contenedor.</li><li>Se asegura de que el puerto "7071" se reenvíe desde el contenedor para que puedas acceder a él en "localhost: 7071". Este es el puerto en el que Azure Functions se ejecuta localmente.</li><li>Especifica las extensiones que se deben instalar en el contenedor. Dado que en realidad no estás usando VS Code localmente, sus extensiones no se instalan automáticamente. Especificarlos en este archivo asegura que estén allí cuando se abre el proyecto.</li></ol><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/08/image-96.png" class="kg-image" alt="image-96" width="600" height="400" loading="lazy"></figure><p>Y con eso, podemos abrir la paleta de comandos y seleccionar <em>"Dev Containers: Reopen folder in container"</em>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/08/image-98.png" class="kg-image" alt="image-98" width="600" height="400" loading="lazy"></figure><p>VS Code se recargará y comenzará a construir el contenedor para este proyecto.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/08/image-100.png" class="kg-image" alt="image-100" width="600" height="400" loading="lazy"></figure><p>La primera vez que hace esto, tarda uno o dos minutos porque las imágenes base deben extraerse y construirse. Una vez hecho esto por primera vez, las cargas posteriores son mucho más rápidas, ya que la imagen existe en tu máquina. </p><p>En el caso de este proyecto, una vez que se construye el contenedor, VS Code se propone restaurar las dependencias de C#, lo cual se realiza con la extensión C# que se incluyó en el archivo de configuración "devcontainer.json".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/08/image-105.png" class="kg-image" alt="image-105" width="600" height="400" loading="lazy"></figure><p>Cuando todo haya terminado, puedes ejecutar este proyecto simplemente presionando F5. Y así, la aplicación está en funcionamiento.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/08/image-110.png" class="kg-image" alt="image-110" width="600" height="400" loading="lazy"></figure><p>Piensa en lo que habríamos tenido que hacer para obtener esta configuración localmente ...</p><ol><li>Instalar .NET Core</li><li>Instalar las Functions Core Tools</li><li>Instalar la extensión VS Code Functions</li><li>Instalar la extensión VS Code C# </li></ol><p>Con los contenedores de desarrollo, nada de eso es necesario. Podemos configurar y enviar un entorno de desarrollo completo<strong> en dos archivos de texto</strong>.</p><h3 id="por-favor-pon-tu-entorno-de-desarrollo-en-github">Por favor, pon tu entorno de desarrollo en Github</h3><p>Así que aquí está mi humilde súplica: en lugar de describir 15 pasos en un README de Github para configurar tu proyecto para que se ejecute, <strong>coloca todo tu entorno de desarrollo en Github</strong>. Eso significa registrar en esa carpeta ".devcontainers". Si un desarrollador usando tu proyecto no tiene VS Code o la extensión "Dev Containers", no sucede nada. No puedes perder.</p><p>Estoy emocionado porque siento que los días de configuraciones del infierno están llegando a su fin. Y además, piensa en todas las personas que salvaremos de los artículos dogmáticos sobre sentencias ternarias.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo crear una página web estática, libre con GitHub Pages en 10 minutos ]]>
                </title>
                <description>
                    <![CDATA[ Las páginas web estáticas se han vuelto de moda y con buena razón, son increíblemente rápidas y con un número cada vez mayor de servicios de alojamiento compatibles, bastante fáciles de configurar. No voy a entrar en todos los quién, qué, cuándo, dónde o por qué de las web estáticas. ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-crear-un-sitio-estatico-libre-con-github-pages-en-10-minutos/</link>
                <guid isPermaLink="false">5ff0e9998c7cd154bb98332a</guid>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Santiago Toquica Yanguas ]]>
                </dc:creator>
                <pubDate>Mon, 15 Feb 2021 04:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/02/photo-1505682634904-d7c8d95cdc50-1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Las páginas web estáticas se han vuelto de moda y con buena razón, son increíblemente rápidas y con un número cada vez mayor de servicios de alojamiento compatibles, bastante fáciles de configurar.</p><p>No voy a entrar en todos los quién, qué, cuándo, dónde o por qué de las web estáticas. Asumo que tienes al menos una vaga idea de lo que son o sólo quieres crear tu propia <em>página web estática</em>, asimismo no te importan los demás detalles. De cualquier manera esta publicación es para ti.</p><p>Primero, quiero que sepas que estoy escribiendo esto para una audiencia tan amplia como sea posible; tu no necesitas ningún conocimiento de programación para seguirlo, aunque un poco de familiaridad con la <em>línea de comandos y Git</em> ayudará mucho.</p><h2 id="entonces-c-mo-puedes-crear-una-p-gina-web-est-tica-con-github-en-10-minutos">Entonces, ¿cómo puedes crear una página web estática con GitHub en 10 minutos?</h2><p>Nosotros trabajaremos con dos herramientas específicas: GitHub Pages, que está específicamente diseñado para servir contenido estático y un generador de contenido estático llamado Jekyll.</p><p>Jekyll es una gema de Ruby para crear sitios web estáticos fácilmente, por lo que necesitarás tener Ruby instalado en tu computador si quieres usar Jekyll. Si, tú tienes OSX lo más probable es que ya tengas una versión de Ruby (aunque puede que tú necesites actualizarla). Si no lo tienes o estás en un ordenador con Windows, tú puedes aprender más sobre su instalación aquí: <a href="https://www.ruby-lang.org/es/documentation/installation/">Instalando Ruby</a>.</p><p>Con eso fuera del camino, abrir una nueva ventana con la terminal y escribe <code>gem install bundler jekyll</code>. Esto instalará Bundler (una herramienta de gestión de paquetes de Ruby asimismo Jekyll).</p><p>Una vez que esas gemas (paquetes de Ruby) se hayan instalado, escribe <code>Jekyll new mi-sitio-estatico</code> (llámalo como quieras) que ejecutará el <em>generador de Jekyll</em> para crear tu proyecto en un nuevo directorio. Después de que tu sitio sea creado, salta al directorio del sitio recién creado escribiendo <code>cd mi-sitio-estatico</code> (o <code>cd</code> como sea que llames a tu proyecto).</p><p>Abre tu proyecto en un editor de texto y tú verás varios archivos y carpetas que Jekyll creadas por ti. Ahora mismo sólo tienes que preocuparte por el Gemfile (no el <em>Gemfile.lock</em>). El <em>Gemfile</em> es un archivo de Ruby que maneja todos los paquetes asociados de Ruby necesarios para ejecutar un proyecto.</p><p>El archivo contendrá una línea con la versión de Jekyll, coméntala:</p><pre><code class="language-ruby">#gem "jekyll", "~&gt; 4.0.0"
</code></pre><p>Entonces, añade esta línea:</p><pre><code class="language-ruby">gem "github-pages", group: :jekyll_plugins
</code></pre><p>A veces las gemas de las que depende están desactualizadas o las gemas que has instalado localmente son demasiado modernas para<em> </em>GitHub Pages.</p><p>He descubierto que esto puede dificultar la construcción y la prueba de mi página web de Jekyll localmente. Puede ser más fácil probar tu sitio localmente y guardar la construcción hasta que esté listo para el despliegue. Sin embargo, en el momento de escribir esto puedes especificar estas versiones de dependencia en tu Gemfile y Jekyll funcionará tanto localmente como con GitHub Pages:</p><pre><code class="language-ruby">gem "jekyll", "~&gt; 3.8.5"
gem "github-pages","~&gt; 202" , group: :jekyll_plugins
group :jekyll_plugins do
  gem "jekyll-feed", "~&gt; 0.11.0"
end
</code></pre><p>Gracias a <a href="https://stackoverflow.com/users/6885157/alex-waibel">Alex Waibel</a> en <a href="https://stackoverflow.com/questions/58598084/how-does-one-downgrade-jekyll-to-work-with-github-page">StackOverflow</a> por la configuración más reciente.</p><p>Para ver tu sitio web en acción, ejecute <code>bundle exec Jekyll serve</code> &nbsp;en la línea de comandos. Esto iniciará un servidor y podrás ver tu sitio web escribiendo <code>localhost:4000</code> en la barra de direcciones de tu navegador.</p><p>¡Felicitaciones! Has creado un sitio web estático con Jekyll y estás en el directorio del proyecto. Ya has terminado el 50%.</p><h2 id="pongamos-esto-en-l-nea">Pongamos esto en línea</h2><p>Ve a GitHub.com y regístrate o si ya tienes una cuenta selecciona el botón "nuevo" y crea un repositorio. Es importante que le pongas un nombre a tu repositorio, después del enlace que servirá tu cuenta de GitHub Pages, que es tú_nombredeusuario.github.io. Por ejemplo, mi nombre de usuario de GitHub es tfantina y mi blog es tfantina.github.io, por lo que mi repositorio GitHub se llama: "tfantina.github.io".</p><p>Vuelve a la ventana de tu terminal, sube tu sitio Jekyll desde tu computadora hasta GitHub ejecutando los siguientes comandos:</p><figure class="kg-card kg-code-card"><pre><code class="language-shell">git init
git remote add origin git@github.com:&lt;tu-nombre_usuario&gt;/&lt;tu_nombre_del_repo&gt;.git
git commit -am “Configurando Jekyll!”
git push -u origin master
</code></pre><figcaption>Comandos de git</figcaption></figure><p>(Al sustituir el nombre de usuario y el nombre del proyecto, tú no necesitas abrir o cerrar &lt;&gt;).</p><p>Una vez que tus cambios han sido subidos a tu repositorio, tú deberías tener un sitio web estático que funcione. Esto se debe a que estás usando la gema GitHub Pages y has nombrado tu repositorio de tal manera que GitHub entienda que quieres alojarlo con GitHub Pages.</p><p>Tú puedes confirmarlo visitando tu sitio o entrando en la pestaña de configuración de GitHub y desplazándote a la sección de páginas. Tú deberías ver un botón verde que muestra dónde se ha publicado tu sitio:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/11/DFAC66CE-C182-4ECA-9379-87843C730645.png" class="kg-image" alt="DFAC66CE-C182-4ECA-9379-87843C730645" width="600" height="400" loading="lazy"></figure><p>Tú también notarás que se puede cambiar fácilmente el tema desde aquí también. GitHub ofrece algunos temas predeterminados para Jekyll, pero por supuesto también puedes crear propios. </p><p>Si tu sitio web dice que está publicado, pero se ve en blanco, es posible que tengas que hacer una refrescar la página o intentar mirar tu sitio en una ventana privada. Esto puede parecer obvio, pero pasa usualmente cada vez que configuro una nueva instancia de Jekyll.</p><p>Si, todo va de acuerdo con el plan, tu sitio debería verse algo como esto:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/11/65F58F30-3000-44E5-96CF-DCC1CFEDF953.png" class="kg-image" alt="65F58F30-3000-44E5-96CF-DCC1CFEDF953" width="600" height="400" loading="lazy"><figcaption>Bienvenida Jekyll</figcaption></figure><hr><p><em>Ahí lo tienes</em> - en pocos minutos has creado y desplegado un sitio web estático con GitHub Page. Pero, tú probablemente quieras ser capaz de poner algo de contenido en tu página.</p><p>Prometí que esto sólo tomaría diez minutos, así que no me sumergiré en todos los detalles de las páginas, la portada o el lenguaje de plantillas de Liquid. Eso es una publicación para otro día. En este instante compartiré cómo crear tu primera publicación.</p><p>De vuelta en tu editor de texto, abre la carpeta "_posts". &nbsp;Ya hay una entrada que te da la bienvenida a tu nuevo blog. Crea un nuevo archivo de anotaciones y guárdalo con un nombre en este formato: AÑO-MES-DÍA-TÍTULO.markdown (ver abajo):</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/11/B90755E4-B12A-4038-8DD7-AF945E73FE43.png" class="kg-image" alt="B90755E4-B12A-4038-8DD7-AF945E73FE43" width="600" height="400" loading="lazy"></figure><p>Una publicación de <em>Jekyll</em> contiene dos secciones: portada y cuerpo.</p><p>La portada da instrucciones específicas a Jekyll, como cuál va a ser el título de la publicación, qué diseño usar y cuándo fue escrito la publicación.</p><p>La portada es altamente personalizable. Por ejemplo, quería que mis mensajes tuvieran imágenes de héroes, así que creé una etiqueta <code>lead_image</code> y puse algo de sintaxis en mi diseño para comprobar específicamente si hay imágenes "lead" en el material de portada de cada publicación. El lenguaje de plantillas Liquid facilita la incorporación de contenido del material de portada en el tema.</p><p>Hay mucho más que se puede hacer con la portada, pero empecemos con un ejemplo genérico.</p><p>La portada por defecto se ve así:</p><figure class="kg-card kg-code-card"><pre><code class="language-markdown">—
layout: post 
title:  "Welcome to Jekyll!"
date:   2019-11-09 18:07:11 -0600
categories: jekyll update
—
</code></pre><figcaption>Portada por defecto</figcaption></figure><ul><li>El diseño le dice a <em>Jekyll</em> en qué parte quieres que se muestre el contenido. Tú puedes tener varios diseños para diferentes páginas o tipos de publicaciones.</li><li>El título de la publicación.</li><li>Fecha de la publicación.</li><li>Categorías, que son esencialmente etiquetas. Tú puedes añadir tantas o tan pocas como quieras separadas por espacios.</li></ul><p>Después de la portada, tu publicación puede ser escrito en Markdown, lo que te da mucha flexibilidad para escribir el contenido de tu publicación.</p><p>Una vez tu publicación este finalmente guardado, abre una ventana terminal &nbsp;</p><figure class="kg-card kg-code-card"><pre><code class="language-shell">git commit -am “Públicar"
git push</code></pre><figcaption>Comando git</figcaption></figure><p>Después de un <em>minuto (y tal vez un refresco),</em> tú podrás ver tu publicación.</p><p>¡Espero que ahora tengas un sitio web estático en GitHub Pages creado con Jekyll! Si tienes algún problema o pregunta por favor hazme un tweet <a href="https://twitter.com/tfantina">@tfantina</a>, o puedes mandarme un correo electrónico a <a href="https://www.freecodecamp.org/espanol/news/p/479e1b8c-0fb8-4753-860c-800d14b1e76b/contact@travisfantina.com">contact@travisfantina.com</a>.</p><p>Traducido del artículo - <a href="https://www.freecodecamp.org/news/create-a-free-static-site-with-github-pages-in-10-minutes/">How to create a free static site with GitHub Pages in 10 minutes</a> del autor <a href="https://www.freecodecamp.org/news/author/travis/">Travis Fantina</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Git vs GitHub – ¿Qué es el Control de Versiones y Cómo Funciona? ]]>
                </title>
                <description>
                    <![CDATA[ ¿Estuviste alguna vez confundido por cómo funcionan Git y GitHub? No te preocupes – no estás solo. Git y GitHub pueden ser difícil a veces, pero al terminar este artículo tendrás una buena comprensión de ambos. Al comienzo puede ser tentador pensar que Git y GitHub son lo mismo. Pero ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/git-vs-github-what-is-version-control-and-how-does-it-work/</link>
                <guid isPermaLink="false">5fda73fe8c7cd154bb978050</guid>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ezequiel Castellanos ]]>
                </dc:creator>
                <pubDate>Sun, 14 Feb 2021 04:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/02/photo-1585770900605-fdd4161f9469-1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>¿Estuviste alguna vez confundido por cómo funcionan Git y GitHub? No te preocupes – no estás solo. Git y GitHub pueden ser difícil a veces, pero al terminar este artículo tendrás una buena comprensión de ambos.</p><p>Al comienzo puede ser tentador pensar que Git y GitHub son lo mismo. Pero en realidad no lo son. En realidad es posible utilizar Git sin GitHub! En definitiva, los dos existen por diferentes razones.</p><p>Este artículo comenzará dando una buena mirada a los propósitos de Git y GitHub. Después, vamos a aprender sobre las principales diferencias entre estas dos tecnologías vitales.</p><p>Sin más preámbulos, comencemos con Git.</p><h2 id="-qu-es-git"><strong>¿Qué es Git?</strong></h2><p>Git es un Sistema de Control de Versiones Distribuido (DVCS) utilizado para guardar diferentes versiones de un archivo (o conjunto de archivos) para que cualquier versión sea recuperable cuando lo desee.</p><p>Git también facilita el registro y comparación de diferentes versiones de un archivo. Esto significa que los detalles sobre qué cambió, quién cambió qué, o quién ha iniciado una propuesta, se pueden revisar en cualquier momento.</p><p>¿Pero si Git es un Sistema de Control de Versiones Distribuido, qué significan exactamente esos términos?</p><h3 id="-qu-significa-distribuido"><strong>¿Qué significa "distribuido"?</strong></h3><p>El término "distribuido" significa que cuando le instruyes a Git que comparta el directorio de un proyecto, Git no sólo comparte la última versión del archivo. En cambio, distribuye cada versión que ha registrado para ese proyecto.</p><p>Este sistema "distribuido" tiene un marcado contraste con otros sistemas de control de versiones. Ellos sólo comparten cualquier versión individual que un usuario haya explícitamente extraído desde la base de datos central/local.</p><p>Bueno, entonces "distribuido" significa distribuir <em>todas – </em>no solo algunas seleccionadas – versiones de los archivos del proyecto que Git haya registrado. Pero qué es exactamente un sistema de control de versiones?</p><h3 id="-qu-es-un-sistema-de-control-de-versiones"><strong>¿Qué es un Sistema de Control de Versiones?</strong></h3><p>Un Sistema de Control de Versiones (VCS) se refiere a<em>l método</em> utilizado para guardar las versiones de un archivo para referencia futura.</p><p>De manera intuitiva muchas personas ya utilizan control de versiones en sus proyectos al renombrar las distintas versiones de un mismo archivo de varias formas como <code>blogScript.js</code>, <code>blogScript_v2.js</code>, <code>blogScript_v3.js</code>, <code>blogScript_final.js</code>, <code>blogScript_definite_final.js</code>, etcétera. Pero esta forma de abordarlo es propenso a errores y inefectivo para proyectos grupales.</p><p>Además, con esta forma de abordarlo, rastrear qué cambió, quién lo cambió y porqué se cambió, es un esfuerzo tedioso. Esto resalta la importancia de un sistema de control de versiones confiable y colaborativo como Git.</p><p>Sin embargo, para obtener lo mejor de Git, es importante entender cómo Git administra tus archivos.</p><h2 id="estados-de-los-archivos-en-git"><strong>Estados de los archivos en Git</strong></h2><p>En Git hay tres etapas primarias (condiciones) en las cuales un archivo puede estar: <strong>estado modificado</strong>, <strong>estado preparado</strong>, o <strong>estado confirmado</strong>.</p><h3 id="estado-modificado"><strong>Estado modificado</strong></h3><p>Un archivo en el estado modificado es un archivo revisado – pero no acometido (sin registrar).</p><p>En otras palabras, archivos en el estado modificado son archivos que has modificado pero no le has instruido explícitamente a Git que controle.</p><h3 id="estado-preparado"><strong>Estado preparado</strong></h3><p>Archivos en la etapa preparado son archivos modificados que han sido seleccionados – en su estado (versión) actual – y están siendo preparados para ser guardados (acometidos) al repositorio <code>.git</code> durante la próxima instantánea de confirmación.</p><p>Una vez que el archivo está preparado implica que has explícitamente autorizado a Git que controle la versión de ese archivo.</p><h3 id="estado-confirmado"><strong>Estado confirmado</strong></h3><p>Archivos en el estado confirmado son archivos que se guardaron en el repositorio <code>.git</code> exitosamente.</p><p>Por lo tanto un archivo confirmado es un archivo en el cual has registrado su versión preparada en el directorio (carpeta) Git.</p><p><strong><strong>Not</strong>a<strong>: </strong></strong>El estado de un archivo determina la ubicación donde Git lo colocará.</p><h2 id="ubicaci-n-de-archivos"><strong>Ubicación de archivos</strong></h2><p>Existen tres lugares principales donde pueden residir las versiones de un archivo cuando se hace control de versiones con Git: el <strong>directorio de trabajo</strong>, el <strong>sector de preparación</strong>, o el <strong>directorio Git</strong>. </p><h3 id="directorio-de-trabajo"><strong>Directorio de trabajo</strong></h3><p>El directorio de trabajo es una carpeta local para los archivos de un proyecto. Esto significa que cualquier carpeta creada en cualquier lugar en un sistema es un directorio de trabajo.</p><p><strong><strong>Not</strong>a<strong>:</strong></strong></p><ul><li>Los archivos en el estado modificado residen dentro del directorio de trabajo.</li><li>El directorio de trabajo es distinto al directorio <code>.git</code>. Es decir, tu creas un directorio de trabajo mientras que Git crea un directorio <code>.git</code>.</li></ul><h3 id="zona-de-preparaci-n"><strong>Zona de preparación</strong></h3><p>La zona de preparación – técnicamente llamado “index” en lenguaje Git &nbsp;– es un archivo normalmente ubicado en el directory <code>.git</code>, que guarda información sobre archivos próximos a ser acometidos en el directorio <code>.git</code>.</p><p><strong><strong>Not</strong>a<strong>:</strong></strong></p><ul><li>Los archivos en la etapa de preparación residen en la zona de preparación.</li></ul><h3 id="directorio-git"><strong>Directorio Git</strong></h3><p>El directorio<code>.git</code> es la carpeta (también llamada "repositorio") que Git crea dentro del directorio de trabajo que le has instruido para realizar un seguimiento.</p><p>La carpeta <code>.git</code> también es donde Git guarda las bases de datos de objetos y metadatos de los archivos que le hayas instruido realizar un monitoreo.</p><p><strong><strong>Not</strong>a<strong>:</strong></strong></p><ul><li>El directorio<code>.git</code> es la vida de Git – es el item copiado cuando se clona un repositorio desde otra computadora (o desde una plataforma en línea como GitHub).</li><li>Los archivos en el estado acometido residen en el directorio Git.</li></ul><h2 id="el-flujo-de-trabajo-b-sico-de-git">El flujo de trabajo básico de Git</h2><p>Trabajar con el Sistema de Control de Versiones Git se ve algo así:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/08/git-basic-workflow-codesweetly.png" class="kg-image" alt="Diagrama básico del flujo de trabajo de Git" width="600" height="400" loading="lazy"></figure><ol><li>Modificar archivos en el directorio de trabajo.<br>Observe que cualquier archivo que modifiques se convierte en un archivo en el <em>estado modificado</em>.</li><li>Prepare selectivamente los archivos que quieras confirmar al directorio <code>.git</code>.<br>Observe que cualquier archivo que prepares (agregues) a la zona de preparación se convierte en un archivo en el <em>estado preparado</em>. &nbsp; <br>También tenga en cuenta que los archivos preparados todavía no están en la base de datos <code>.git</code>.<br>Preparar significa que la información sobre el archivo preparado se incluye en un archivo (llamado "index") en el repositorio <code>.git</code>.</li><li>Confirme el/los archivos que has preparado en el directorio <code>.git</code>. Esto es, guardar de manera permanente una instantánea de los archivos preparados en la base de datos <code>.git</code>.<br>Observe que cualquier versión del archivo que confirmes al directorio <code>.git</code> se convierte en un archivo en el <em>estado confirmado</em>.</li></ol><h3 id="lo-esencial-hasta-ahora"><strong>Lo esencial hasta ahora</strong></h3><p>En resumidas cuentas de todo lo discutido hasta el momento es que Git es un sistema de control de versiones genial para versionado, administración y distribución de archivos.</p><p>Pero espera un segundo, si Git nos ayuda en la administración y distribución eficaz de distintas versiones de los archivos de un proyecto, &nbsp;¿cúal es el propósito de GitHub?</p><h2 id="github-desmitificado"><strong>GitHub </strong>Desmitificado</h2><p>GitHub es una plataforma basada en la web donde los usuarios pueden alojar repositorios Git. Facilita compartir y colaborar fácilmente en proyectos con cualquier persona en cualquier momento.</p><p>GitHub también fomenta una participación más amplia en proyectos Código Abierto al proporcionar una manera segura de editar archivos en repositorios de otros usuarios.</p><p>Para alojar (o compartir) un repositorio Git en GigHub, siga los siguientes pasos:</p><h3 id="paso-1-registrar-una-cuenta-de-github"><strong>Paso 1: Registrar una cuenta de GitHub</strong></h3><p>El primer paso para comenzar con el alojamiento en GitHub es crear una cuenta personal. Visite la <a href="https://github.com/join">página de registro oficial</a> para registrarse.</p><h3 id="paso-2-crear-un-repositorio-remoto-en-github"><strong>Paso 2: Crear un repositorio remoto en GitHub</strong></h3><p>Después de registrarse, <a href="https://docs.github.com/es/free-pro-team@latest/github/getting-started-with-github/create-a-repo">crear un home (un repositorio) en GitHub</a> para el repositorio Git que quieres compartir. </p><h3 id="paso-3-conectar-el-directorio-git-del-proyecto-con-el-repositorio-remoto"><strong>Paso 3: Conectar el directorio Git del proyecto con el repositorio remoto</strong></h3><p>Una vez que hayas creado un repositorio remoto para tu proyecto, tienes que vincular el directorio <code>.git</code> del proyecto – ubicado localmente en tu sistema – con el repositorio remoto en GitHub.</p><p>Para conectar con el repositorio remoto, debes <strong>ubicarte en el directorio raíz</strong> del proyecto que quieras compartir, utilizando tu terminal local, y ejecuta este comando:</p><pre><code>git remote add origin https://github.com/tuUsuario/tuRepositorio.git</code></pre><p><strong><strong>Not</strong>a<strong>:</strong></strong></p><ul><li>Reemplaza <code>tuUsuario</code> en el código de arriba con tu nombre de usuario de GitHub.<br>También reemplaza <code>tuRepositorio</code> con el nombre del repositorio remoto al que te quieres conectar.</li><li>El comando de arriba implica que <em><em>git</em></em> debe <em><em>a</em>gregar</em> al proyecto la <em>URL </em>especificada como una referencia remota con la cual el directorio local <code>.git</code> puede interactuar.</li><li>La opción <code>origin</code> en el comando de arriba es el nombre predeterminado (un nombre corto) que Git le otorga al servidor que aloja tu repositorio remoto.<br>Es decir, Git utiliza el nombre corto <code>origin</code> en vez de la URL del servidor.</li><li>No es obligatorio quedarse con el nombre predeterminado del servidor. Si prefieres otro nombre que <code>origin</code>, simplemente sustituya el nombre <code>origin</code> en el comando <code>git remote add</code> de arriba por cualquier nombre que prefieras.</li><li>Siempre recuerda que un nombre corto del servidor (por ejemplo, &nbsp;<code>origin</code>) no es nada especial! Sólo existe – localmente – para ayudarte a referenciar fácilmente la URL del servidor. Por lo tanto, siéntete libre de cambiarlo a un nombre corto que puedas referenciar fácilmente.</li><li>Para renombrar cualquier URL remota que exista, utilice el comando <code>git remote rename</code> de esta manera:</li></ul><pre><code>git remote rename nombreURLactual nuevoNombreURL</code></pre><ul><li>Cada vez que clones (descargues) cualquier repo remota, Git automáticamente le pone nombre <code>origin</code> a la URL de la repo. Sin embargo, le puedes especificar un nombre distinto con el comando <code>git clone -o tuNombrePreferido</code>.</li><li>Para ver la URL exacta guardada para los nombres como <code>origin</code>, ejecuta el comando <code>git remote -v</code>.</li></ul><h3 id="paso-4-confirmar-la-conexi-n"><strong>Paso 4: Confirmar la conexión</strong></h3><p>Una vez que hayas conectado tu directorio Git con el repositorio remoto, verifica si la conexión fue exitosa ejecutando el comando <code>git remote -v</code>.</p><p>Después verifica la impresión para confirmar que la <em>URL mostrada</em> sea la misma que la <em>URL remota</em> que intentas conectarte.</p><p><strong><strong>Not</strong>a<strong>:</strong></strong></p><ul><li>Ver el artículo “<a href="https://docs.github.com/es/free-pro-team@latest/github/authenticating-to-github/connecting-to-github-with-ssh">Conectar con SSH</a>” si quieres conectar utilizando la URL SSH en lugar de la URL HTTPS.</li><li>Sin embargo, si no estás seguro de la URL remota que vas a utilizar, echa un vistazo al artículo “<a href="https://docs.github.com/es/free-pro-team@latest/github/using-git/which-remote-url-should-i-use">¿Qué URL remota debería utilizar?</a>”.</li><li>¿Quieres cambiar tu URL remota? <a href="https://docs.github.com/es/free-pro-team@latest/github/using-git/changing-a-remotes-url">Cambiar la URL de un remoto</a> es una excelente guía.</li></ul><h3 id="paso-5-subir-un-repo-git-local-a-un-repo-remoto"><strong>Paso 5: Subir un repo Git local a un repo remoto</strong></h3><p>Después de conectar exitosamente tu directorio local con el repositorio remoto puedes comenzar a subir (cargar) tu proyecto local upstream.</p><p>Cuando estés listo para compartir tu proyecto en otra parte, en cualquier repo remoto, simplemente le dices a Git que suba todos tus confirmaciones, ramas y archivos en tu directorio <code>.git</code> local al repositorio remoto.</p><p>La sintaxis del código utilizado para subir (push) un directorio local Git a un repositorio remoto es <code>git push -u nombreRemoto nombreRama</code>.</p><p>Esto es, para subir tu directorio local <code>.git</code> y suponiendo que el nombre corto de la URL remota es “origin”, ejecuta:</p><pre><code>git push -u origin master</code></pre><p><strong><strong>Not</strong>a<strong>:</strong></strong></p><ul><li>El comando de arriba implica que <em>git </em>debe <em>subir </em>tu rama <em>master </em>local a la rama <em>master </em>remota ubicada en la URL con nombre <em>origin</em>.</li><li>Técnicamente puedes sustituir la opción <code>origin</code> con la URL del repositorio remoto. Recuerda, la opción <code>origin</code> es solo un nombre de la URL que hayas registrado en tu directorio <code>.git</code> local.</li><li>El indicador <code>-u</code> (indicador de referencia upstream/seguimiento) automáticamente vincula la rama local del directorio <code>.git</code> con la rama remota. Esto te permite usar <code>git pull</code> sin ningún argumento.</li></ul><h3 id="paso-6-confirmar-la-subida"><strong>Paso 6: Confirmar la subida</strong></h3><p>Por último, vuelve a tu página de repositorio GitHub para confirmar que Git haya subido exitosamente tu directorio Git local al repositorio remoto.</p><p><strong><strong>Not</strong>a<strong>:</strong></strong></p><ul><li>Tal vez tengas que refrescar la página del repositorio remoto para reflejar los cambios.</li><li>GitHub también tiene un servicio gratuito opcional para convertir tu repositorio remoto en una página web funcional. Abajo vamos a ver “cómo” hacerlo.-</li></ul><h2 id="publica-tu-p-gina-web-con-github-pages"><strong>Publica tu página web con GitHub pages</strong></h2><p>Después de subir tu proyecto al repositorio remoto, fácilmente puedes publicarlo en la web de esta forma:</p><ol><li>Asegurate que el nombre del archivo principal HTML de tu proyecto sea <code>index.html</code>.</li><li>En el sitio web de la plataforma GitHub ingresa al repositorio del proyecto que quieres publicar y haz click en la <strong>pestaña settings</strong>.</li><li>Desplaza hacia la sección <strong><strong>GitHub Pages</strong></strong> y cambia la rama <strong><strong>Source</strong></strong> de <strong><strong>none</strong></strong> a <strong><strong>master</strong></strong>.</li><li>Después aparecerá una notificación que dice “Your site is published at <em><em>https://your-username.github.io/your-github-repo-name/</em></em>”.</li><li>Ahora puedes ver – y publicitar – tu proyecto en la URL especificada.</li></ol><p>Esta sección solo ha comenzado a tratar el tema de publicar tu proyecto con GitHub. Para aprender más sobre GitHub pages, echa un vistazo a esta documentación “<a href="https://docs.github.com/es/free-pro-team@latest/github/working-with-github-pages">Trabajar con páginas de GitHub Pages</a>”.</p><h3 id="en-resumen"><strong>En resumen</strong></h3><p>GitHub es una plataforma en línea de alojamiento (o para compartir) repositorios de Git. Nos ayuda crear una avenida para colaborar fácilmente con cualquier persona, en cualquier lugar, en cualquier momento.</p><h2 id="todav-a-en-duda"><strong>Todavía en duda?</strong></h2><p>Todavía estás perplejo por la delgada línea entre Git y GitHub? No te preocupes – Te tengo cubierto. Abajo hay cinco diferencias claves entre Git y GitHub.</p><h3 id="diferencia-1-git-vs-github-funci-n-principal"><strong>Diferencia 1: Git vs. GitHub — Función principal</strong></h3><p><strong><strong>Git</strong></strong> es un sistema de control de versiones distribuido que registra las distintas versiones de un archivo (o conjunto de archivos). Le permite a los usuarios acceder, comparar, actualizar, y distribuir cualquiera de las versiones registradas en cualquier momento.</p><p>Sin embargo <strong><strong>GitHub</strong></strong> principalmente es una plataforma de alojamiento para albergar tus repositorios Git en la web. Esto permite a los usuarios mantener sus repositorios remotos privados o abiertos para esfuerzos colaborativos.</p><h3 id="diferencia-2-git-vs-github-plataforma-de-operaci-n"><strong>Diferencia 2: Git vs. GitHub — Plataforma de operación</strong></h3><p>Los usuarios instalan y ejecutan Git en sus equipos locales. Esto significa que la mayoría de las operaciones de Git se pueden lograr sin una conexión a internet.</p><p>Sin embarg GitHub es un servicio basado en la web que opera solamente en línea. Esto significa que necesitas estar conectado para hacer cualquier cosa en GitHub.</p><h3 id="diferencia-3-git-vs-github-creadores"><strong>Diferencia 3: Git vs. GitHub — Creadores</strong></h3><p>Linus Torvalds comenzó Git en Abril del 2005.</p><p>Chris Wanstrath, P. J. Hyett, Tom Preston-Werner, y Scott Chacon fundaron GitHub.com en Febrero 2008.</p><h3 id="diferencia-4-git-vs-github-mantenedores"><strong>Diferencia 4: Git vs. GitHub — Mantenedores</strong></h3><p>En Julio 2005, Linus Torvalds entregó el mantenimiento de Git a Junio C. Hamano — quien ha sido el principal mantenedor desde entonces.</p><p>En Octubre 2018, Microsoft compró GitHub.</p><h3 id="diferencia-5-git-vs-github-competidores"><strong>Diferencia 5: Git vs. GitHub — Competidores</strong></h3><p>Algunas alternativas populares para Git son Mercurial, Team Foundation Version Control (TFVC), Perforce Helix Core, Apache Subversion, y IBM Rational ClearCase.</p><p>Los competidores más cercanos a GitHub son GitLab, Bitbucket, SourceForge, Cloud Source Repositories, y AWS CodeCommit.</p><h2 id="considerando-todo"><strong>Considerando todo</strong></h2><p>Git y GitHub son dos entidades diferentes que te ayudan a administrar y alojar archivos. En otras palabras Git sirve para controlar las versiones de los archivos mientras que GitHub es una plataforma para alojar tus repositorios Git.</p><p>Traducido del artículo -<strong> </strong><a href="https://www.freecodecamp.org/news/git-and-github-overview/">Git vs GitHub – What is Version Control and How Does it Work?</a> de <a href="https://www.freecodecamp.org/news/author/oluwatobi/"><strong>Oluwatobi Sofela</strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo hacer tu primer pull request en GitHub ]]>
                </title>
                <description>
                    <![CDATA[ ¿Qué es hacer un forking? Cuando nos gusta el repositorio de alguien y nos gustaría tenerlo en nuestra cuenta de GitHub, hacemos un fork o bifurcación para poder trabajar con él en forma separada. Cuando hacemos un fork de un repositorio, obtenemos una instancia de todo el repositorio con todo ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-hacer-tu-primer-pull-request-en-github/</link>
                <guid isPermaLink="false">5fe74e518c7cd154bb97ead7</guid>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Fernando Cardellino ]]>
                </dc:creator>
                <pubDate>Tue, 26 Jan 2021 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/01/Untitled-design-1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <h2 id="-qu-es-hacer-un-forking">¿Qué es hacer un forking?</h2><p>Cuando nos gusta el repositorio de alguien y nos gustaría tenerlo en nuestra cuenta de GitHub, hacemos un fork o bifurcación para poder trabajar con él en forma separada.</p><p>Cuando hacemos un fork de un repositorio, obtenemos una instancia de todo el repositorio con todo su historial. Luego, podemos hacer lo que queramos sin afectar la versión original.</p><h2 id="-qu-es-un-pull-request">¿Qué es un pull request?</h2><p>Los pull requests son la forma de contribuir a un proyecto grupal o de código abierto.</p><p>Por ejemplo, un usuario llamado Harry realiza un fork de un repositorio de ThanoshanMV y le efectúa algunos cambios. Ahora Harry puede hacer un pull request a ThanoshanMV, pero dependerá de ThanoshanMV aceptar o declinarlo. Es como decir: "ThanoshanMV, ¿podrías por favor extraer (pull) mis cambios?"</p><h2 id="-que-significa-contribuir">¿Que significa contribuir?</h2><p>No solo podemos contribuir a un proyecto de código abierto con código, sino que podemos hacerlo de muchas otras maneras. Algunas de ellas están descritas abajo.</p><p>Como indica la guía de hacktitude para iniciados de la firma IT <a href="https://99x.io/">99xtechnology</a>, podemos contribuir a un proyecto de código abierto de las siguientes maneras:</p><ol><li>Diseñando: Puedes construir los diseños de un proyecto para mejorar su usabilidad, mejorar la navegación y el menú del proyecto en función de lo indicado por investigaciones acerca de las preferencias del usuario, crear arte para logotipos o camisetas y proporcionar guías de estilo para el proyecto.</li><li>Escribiendo: Puedes escribir y mejorar la documentación del proyecto o traducirla, iniciar un boletín o escribir tutoriales para el proyecto y tomar nota de los aspectos más destacados de la lista de correo, u organizar una carpeta de ejemplos mostrando cómo se utilizan los proyectos.</li><li>Organizando: Puedes vincular problemas duplicados, sugerir nuevas etiquetas de problemas, sugerir cerrar viejos problemas aún abiertos y hacer preguntas sobre problemas abiertos recientemente para hacer avanzar la discusión.</li><li>Ayuda a otros: Responde preguntas de problemas aún en discusión, revisa el código enviado por otras personas y ofrécete a ser mentor de otro colaborador.</li><li>Elaborando código: Ayuda a resolver problemas aún en discusión, consulta si puedes proveer nuevas funciones y mejorar las herramientas y las pruebas.</li></ol><h2 id="-realicemos-nuestro-primer-pull-request-">¡Realicemos nuestro primer pull request!</h2><h3 id="1-realicemos-un-fork-del-repositorio">1. Realicemos un fork del repositorio</h3><p>Realiza un fork del repositorio haciendo un clic en el botón fork de la parte superior de la página. Esto creará una instancia del repositorio completo en tu cuenta.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2020/12/fork.jpg" class="kg-image" alt="fork" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2020/12/fork.jpg 600w, https://www.freecodecamp.org/espanol/news/content/images/2020/12/fork.jpg 822w" sizes="(min-width: 720px) 720px" width="822" height="280" loading="lazy"></figure><h3 id="2-clona-el-repositorio">2. Clona el repositorio</h3><p>Una vez que el repositorio esté en tu cuenta, clónalo a tu computador para trabajarlo localmente.</p><p>Para clonarlo, has clic en el botón "Code" y copia el link.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2020/12/clone.jpg" class="kg-image" alt="clone" srcset="https://www.freecodecamp.org/espanol/news/content/images/2020/12/clone.jpg 600w" width="600" height="419" loading="lazy"></figure><p>Abre la terminal y ejecuta el siguiente comando. Esto clonará el repositorio localmente.</p><pre><code>$ git clone [DIRECCIÓN HTTPS]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/clone2.png" class="kg-image" alt="clone2" width="600" height="400" loading="lazy"></figure><p>Ahora hemos configurado una copia de la rama maestra desde el repositorio principal del proyecto en línea.</p><p>Debemos ir al repositorio clonado ejecutando el siguiente comando:</p><pre><code>$ cd [NOMBRE DEL REPOSITORIO]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/clone3.png" class="kg-image" alt="clone3" width="600" height="400" loading="lazy"></figure><h3 id="3-crea-una-rama">3. Crea una rama</h3><p>Es una buena práctica crear una rama (branch) nueva cuando trabajas con repositorios, ya sea que se trate de un proyecto pequeño o estés contribuyendo en un equipo de trabajo.</p><p>El nombre de la rama debe ser breve y debe reflejar el trabajo que estamos haciendo.</p><p>Ahora crea una rama usando el comando <code>git checkout</code>:</p><pre><code>$ git checkout -b [Nombre de la Rama]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/branch1.png" class="kg-image" alt="branch1" width="600" height="400" loading="lazy"></figure><h3 id="4-realiza-cambios-y-conf-rmalos">4. Realiza cambios y confírmalos</h3><p>Has cambios esenciales al proyecto y guárdalos.</p><p>Luego ejecuta <code>git status</code> , y verás los cambios.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/status.png" class="kg-image" alt="status" width="600" height="400" loading="lazy"></figure><p>Agrega esos cambios a la rama recién creada usando el comando <code>git add</code>:</p><pre><code>$ git add .</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/add1.png" class="kg-image" alt="add1" width="600" height="400" loading="lazy"></figure><p>Ahora confirma esos cambios utilizando el comando <code>git commit</code>:</p><pre><code>$ git commit -m "Adding an article to week 02 of articles of the week"</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/commit.png" class="kg-image" alt="commit" width="600" height="400" loading="lazy"></figure><h3 id="5-env-a-los-cambios-a-github">5. Envía los cambios a GitHub</h3><p>Para enviar los cambios a GitHub, debemos identificar el nombre del repositorio remoto.</p><pre><code>$ git remote</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/remote.png" class="kg-image" alt="remote" width="600" height="400" loading="lazy"></figure><p>Para este repositorio el nombre es "origin".</p><p>Luego de identificar el nombre podemos enviar en forma segura los cambios a GitHub.</p><pre><code>git push origin [Nombre de la Rama]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/branch2.png" class="kg-image" alt="branch2" width="600" height="400" loading="lazy"></figure><h3 id="6-crea-un-pull-request">6. Crea un pull request</h3><p>Ve a tu repositorio en GitHub y verás un botón llamado "Pull request", has clic en él.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2020/12/pullReq.jpg" class="kg-image" alt="pullReq" width="512" height="278" loading="lazy"></figure><p>Por favor, provee todos los detalles necesarios de lo que has hecho (puedes referenciar problemas utilizando "#"). Ahora, envía el pull request.</p><p>¡Felicitaciones! Has hecho tu primer pull request.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/pullRequest-1.png" class="kg-image" alt="pullRequest-1" width="600" height="400" loading="lazy"></figure><p>Si tu pull request es aceptado recibirás un mail.</p><h3 id="7-sincroniza-tu-rama-maestra-con-la-del-repositorio-original">7. Sincroniza tu rama maestra con la del repositorio original</h3><p>Antes de enviar cualquier pull request al repositorio original debes sincronizar tu repositorio con aquel.</p><p>Incluso si no vas a enviar un pull request al repositorio original, es mejor efectuar la sincronización, ya que pueden haberse agregado algunas prestaciones o funciones adicionales y haberse corregido algunos errores desde la vez que realizaste un fork de aquel repositorio.</p><p>Sigue estos pasos para actualizar/sincronizar aquellos cambios con tu rama maestra:</p><ol><li>Primero, revisa en que rama estás ubicado.</li></ol><pre><code>$ git branch</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/branch4.png" class="kg-image" alt="branch4" width="600" height="400" loading="lazy"></figure><p>Esto enumerará todas las ramas y indicará en verde la rama actual o activa.</p><p>2. Cambia a la rama maestra.</p><pre><code>$ git checkout master</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/master9.png" class="kg-image" alt="master9" width="600" height="400" loading="lazy"></figure><p>3. Agrega el repositorio original como un repositorio upstream.</p><p>Para poder extraer los cambios desde el repositorio original a tu versión local, necesitas agregar el repositorio Git original como un repositorio upstream.</p><pre><code>$ git remote add upstream [HTTPS]</code></pre><p>Aquí, [HTTPS] es el URL que debes copiar del repositorio del propietario.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2020/12/Screenshot-from-2020-12-26-17-16-23.png" class="kg-image" alt="Screenshot-from-2020-12-26-17-16-23" width="592" height="431" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/remote-add.png" class="kg-image" alt="remote-add" width="600" height="400" loading="lazy"></figure><p>4. Busca (fetch) el repositorio.</p><p>Busca todos los cambios &nbsp;del repositorio original. Las confirmaciones (commits) del repositorio original serán almacenadas en una rama local llamada upstream/master.</p><pre><code>$ git fetch upstream</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/fetch.png" class="kg-image" alt="fetch" width="600" height="400" loading="lazy"></figure><p>5. Fusionala.</p><p>Fusiona los cambios de la rama upstream/master a tu rama maestra local. Esto hará que tu rama maestra se sincronice con el repositorio upstream sin perder tus cambios locales.</p><pre><code>$ git merge upstream/master</code></pre><p>6. Envía (push) los cambios a GitHub</p><p>En este punto tu rama local está sincronizada con la rama maestra del repositorio original. Si deseas actualizar el repositorio de GitHub, necesitas enviar tus cambios.</p><pre><code>$ git push origin master</code></pre><p><strong>NOTA:</strong> Luego de sincronizar tu rama maestra puedes eliminar el repositorio upstream, si lo desea. Pero lo necesitará para actualizar/sincronizar tu repositorio en el futuro, por lo que es una buena práctica conservarlo.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/remote-dlt.png" class="kg-image" alt="remote-dlt" width="600" height="400" loading="lazy"></figure><pre><code>$ git remote rm [Nombre del Repositorio Remoto]</code></pre><h3 id="8-elimina-ramas-innecesarias">8. Elimina ramas innecesarias</h3><p>Las ramas son creadas para propósitos especiales. Una vez que ese propósito se cumple, aquellas ramas ya no son necesarias, por lo que puedes eliminarlas.</p><pre><code>$ git branch -d [Nombre de la Rama]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/delete.png" class="kg-image" alt="delete" width="600" height="400" loading="lazy"></figure><p>También, puedes eliminar su versión en GitHub.</p><pre><code>git push origin --delete [Nombre de la Rama]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/01/last.png" class="kg-image" alt="last" width="600" height="400" loading="lazy"></figure><h2 id="conclusi-n">Conclusión</h2><p>GitHub es una poderosa herramienta para controlar el historial de versiones. Todos pueden contribuir a proyectos de código abierto mediante pull requests. Las contribuciones no siempre son un código; también hay otras formas de contribuir.</p><p>Finalmente, debo decirte que no debes preocuparte si tus pull requests son rechazadas. Los encargados de los proyectos dedican mucho tiempo a mejorarlos y saben mucho más sobre sus proyectos que nosotros. Así que no te preocupes si tu solicitud no es tenida en cuenta.</p><blockquote>Mantente fuerte, positivo y nunca te rindas.<br>― Roy T. Bennett, <a href="https://www.goodreads.com/work/quotes/49604402" rel="noopener">The Light in the Heart</a></blockquote><p>Este artículo fue originalmente publicado en <a href="https://medium.com/@mvthanoshan9/how-to-make-your-first-pull-request-on-github-9aefca5cc837">Medium</a>.</p><p>Puedes contactarme y conectar conmigo en <a href="https://twitter.com/ThanoshanMV" rel="noopener">Twitter</a>.</p><p><strong>¡Sigue contribuyendo al mundo del código abierto!</strong></p><p>Traducido del arículo de <strong><a href="https://www.freecodecamp.org/news/author/thanoshan/">Thanoshan MV</a> - <a href="https://www.freecodecamp.org/news/how-to-make-your-first-pull-request-on-github-3/">How to make your first pull request on GitHu</a></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo Obtener y Configurar tus Claves SSH para Git y GitHub ]]>
                </title>
                <description>
                    <![CDATA[ Si usas GitHub sin configurar una clave SSH, realmente te estás perdiendo de algo genial. Piensa en todo el tiempo que pasaste introduciendo tu correo electrónico y tu contraseña en la consola cada vez que haces un commit podrías haberlo pasado programando. Bueno, ya no más. Aquí hay una guía ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-obtener-y-configurar-tus-claves-ssh-para-git-y-github/</link>
                <guid isPermaLink="false">5fe79cb18c7cd154bb97ee3f</guid>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Juan Carrillo ]]>
                </dc:creator>
                <pubDate>Fri, 15 Jan 2021 14:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2020/12/photo-1550527882-b71dea5f8089.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Si usas GitHub sin configurar una clave SSH, realmente te estás perdiendo de algo genial. Piensa en todo el tiempo que pasaste introduciendo tu correo electrónico y tu contraseña en la consola cada vez que haces un commit podrías haberlo pasado programando.</p><p>Bueno, ya no más. Aquí hay una guía rápida para generar y configurar una clave SSH con GitHub para que nunca más tengas que autentificarte a la antigua.</p><h3 id="comprobar-si-existe-una-clave-ssh">Comprobar si existe una clave SSH</h3><p>Primero, comprueba si ya has generado las claves SSH para tu máquina. Abre una terminal e introduce el siguiente comando:</p><pre><code class="language-shell">ls -al ~/.ssh</code></pre><p>Si ya has generado las claves SSH, deberías ver una salida similar a esta:</p><pre><code class="language-sh">-rw-------  1 usuario usuario  1766 Jul  7  2018 id_rsa
-rw-r--r--  1 usuario usuario   414 Jul  7  2018 id_rsa.pub
-rw-------  1 usuario usuario 12892 Feb  5 18:39 known_hosts</code></pre><p>Si tus claves ya existen, pasa a la sección <strong>Copia tu clave pública de SSH</strong> abajo.</p><p>Si no ves ninguna salida o ese directorio no existe (obtienes un mensaje de <code>No such file or directory</code>), entonces ejecuta:</p><pre><code class="language-shell">mkdir $HOME/.ssh</code></pre><p>Luego genera un nuevo conjunto de claves con:</p><pre><code class="language-shell">ssh-keygen -t rsa -b 4096 -C tu@correo.com</code></pre><p>Ahora comprueba que tus claves existen con el comando <code>ls -al ~/.ssh</code> y asegúrate de que la salida es similar a la anterior.</p><p><strong>Nota: </strong>Las claves SSH siempre se generan como un par de claves públicas (<code>id_rsa.pub</code>) y privadas (<code>id_rsa</code>). Es extremadamente importante que <strong>nunca reveles tu clave privada</strong>, y que <strong>sólo uses tu clave pública</strong> para cosas como la autenticación de GitHub. Puedes leer más sobre cómo funcionan los pares de claves SSH / RSA <a href="https://www.freecodecamp.org/news/a-top-down-introduction-to-ssh-965f4fadd32e/">aquí</a>.</p><h3 id="agrega-tu-clave-ssh-a-ssh-agent">Agrega tu clave SSH a ssh-agent</h3><p><code>ssh-agent</code> es un programa que se inicia cuando te conectas y almacena tus claves privadas. Para que funciones correctamente, debe estar ejecutándose y tener una copia de tu clave privada.</p><p>Primero, asegúrate de que <code>ssh-agent</code> se está ejecutando con:</p><pre><code class="language-shell">eval "$(ssh-agent -s)" # para Mac y Linux</code></pre><p>o:</p><pre><code class="language-shell">eval `ssh-agent -s`
ssh-agent -s # para Windows</code></pre><p>Entonces, agrega tu clave privada a <code>ssh-agent</code> con:</p><pre><code class="language-shell">ssh-add ~/.ssh/id_rsa</code></pre><h3 id="copia-tu-clave-p-blica-de-ssh">Copia tu clave pública de SSH</h3><p>A continuación, tienes que copiar tu clave pública de SSH en el portapapeles.</p><p>Para Linux o Mac, imprime el contenido de tu clave pública en la consola con:</p><pre><code class="language-shell">cat ~/.ssh/id_rsa.pub # Linux</code></pre><p>Luego resalta y copia la salida.</p><p>O para Windows, simplemente ejecuta:</p><pre><code class="language-shell">clip &lt; ~/.ssh/id_rsa.pub # Windows</code></pre><h3 id="agrega-tu-clave-ssh-p-blica-a-github">Agrega tu clave SSH pública a GitHub</h3><p>Ve a la página de <a href="https://github.com/settings/keys">configuración</a> de tu GitHub y haz clic en el botón "New SSH key":</p><p>Luego dale a tu clave un título reconocible y pégala en tu clave pública (<code>id_rsa.pub</code>):</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2020/02/image-15.png" class="kg-image" alt="image-15" width="600" height="400" loading="lazy"></figure><p>Finalmente, prueba la autenticación con:</p><pre><code class="language-shell">ssh -T git@github.com</code></pre><p>Si has seguido todos estos pasos correctamente, deberías ver este mensaje:</p><pre><code class="language-sh">Hi tu_usuario! You've successfully authenticated, but GitHub does not provide shell access.
</code></pre><h3 id="m-s-informaci-n-sobre-ssh-">Más información sobre SSH:</h3><ul><li><a href="https://www.freecodecamp.org/news/the-ultimate-guide-to-ssh-setting-up-ssh-keys/">Ultimate guide to SSH</a></li><li><a href="https://www.freecodecamp.org/news/a-top-down-introduction-to-ssh-965f4fadd32e/">A top-down intro to SSH</a></li></ul><p>Traducido del artículo - <a href="https://www.freecodecamp.org/news/git-ssh-how-to/"><strong>How to Get and Configure Your Git and GitHub SSH Keys</strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo crear tu primer Pull Request en GitHub ]]>
                </title>
                <description>
                    <![CDATA[ Existen muchos tutoriales sobre este tema, pero hacen las cosas demasiado complicadas al asumir que uno tiene que contribuir con código a un proyecto. ¿Y si solo necesitan editar un archivo, tal vez el README de un proyecto para arreglar una errata? No necesitas saber cómo programar o cómo usar ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-crear-tu-primer-pull-request-en-github/</link>
                <guid isPermaLink="false">5fe4002e8c7cd154bb97d67b</guid>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Juan Carrillo ]]>
                </dc:creator>
                <pubDate>Thu, 14 Jan 2021 14:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2020/12/pr.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Existen muchos tutoriales sobre este tema, pero hacen las cosas demasiado complicadas al asumir que uno tiene que contribuir con <strong>código</strong> a un proyecto.</p><p>¿Y si solo necesitan editar un archivo, tal vez el README de un proyecto para arreglar una errata?</p><p>No necesitas saber cómo programar o cómo usar Git para hacerlo. Pero una vez que empieces a hacer Pull Requests, podrás hacer muchas más cosas y colaborar en proyectos con otras personas. Y tal vez esto te empuje a contribuir también con código más adelante.</p><p>Supongo que ya tienes una cuenta de GitHub (gratuita). Si no la tienes, entonces ve a <a href="https://github.com/">github.com</a> y consigue una.</p><p>Déjame mostrarte el proceso.</p><p>Fui a esta página <a href="https://web.dev/prefers-color-scheme/">https://web.dev/prefers-color-scheme/</a> y encontré una posible errata. A esta línea le falta un punto al final.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/07/article-i-want-to-edit.png" class="kg-image" alt="article-i-want-to-edit" width="600" height="400" loading="lazy"></figure><blockquote><em>No soy muy riguroso con la gramática, esto es sólo para encontrar un ejemplo...</em></blockquote><p>Sé que ese sitio está alojado en GitHub, y que el artículo exacto está alojado aquí: <a href="https://github.com/GoogleChrome/web.dev/tree/master/src/site/content/en/blog/prefers-color-scheme">https://github.com/GoogleChrome/web.dev/tree/master/src/site/content/en/blog/prefers-color-scheme</a></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/07/github-folder-for-article.png" class="kg-image" alt="github-folder-for-article" width="600" height="400" loading="lazy"></figure><p>Abro el archivo index.md <a href="https://github.com/GoogleChrome/web.dev/blob/master/src/site/content/en/blog/prefers-color-scheme/index.md">https://github.com/GoogleChrome/web.dev/blob/master/src/site/content/en/blog/prefers-color-scheme/index.md</a> directamente en GitHub y presiono el icono del lápiz en la barra de herramientas del archivo. Al pasar el ratón por encima de él dice: "Fork this project and edit the file".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/07/the-index-md-file.png" class="kg-image" alt="the-index-md-file" width="600" height="400" loading="lazy"></figure><p>Esto trae una vista de editor con esta información:</p><blockquote><em>Estás editando un archivo en un proyecto al que no tienes acceso de escritura. Enviando un cambio a este archivo lo escribirá a una nueva rama en su fork flaviocopes/wev.dev, para que puedas enviar un pull request.</em></blockquote><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/07/the-editor-view.png" class="kg-image" alt="the-editor-view" width="600" height="400" loading="lazy"></figure><p>Puedo ir y agregar ese punto, luego en el formulario de abajo explico los cambios que hice:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/07/propose-file-change.png" class="kg-image" alt="propose-file-change" width="600" height="400" loading="lazy"></figure><p>Presioné el botón "Propose File Change" y apareció una vista comparativa.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/07/compare-view.png" class="kg-image" alt="compare-view" width="600" height="400" loading="lazy"></figure><p>Allí puedo revisar los cambios que hice, para asegurarme de que todo está bien, y finalmente puedo hacer clic en el botón "Create Pull Request". Actualmente los cambios se han hecho en el fork del proyecto, que fue hecho automáticamente por GitHub cuando hiciste clic en el icono del lápiz.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/07/open-pull-request.png" class="kg-image" alt="open-pull-request" width="600" height="400" loading="lazy"></figure><p>En la parte superior de esta vista pueden ver que estoy a punto de enviar un PR (Pull Request) al proyecto <code>GoogleChrome/web.dev</code> desde mi formulario <code>flaviocopes/web.dev</code>, desde mi rama <code>patch-2</code> a su rama <code>master</code>.</p><p>Al pulsar el botón "Create Pull Request" se muestra otro formulario donde puedo escribir una descripción detallada del Pull Request.</p><p>Los Pull Requests puede contener muchos cambios diferentes, así que en teoría podrías tener muchos archivos editados en el mismo PR, por eso puedes agregar un resumen.</p><p>Este repositorio tiene una plantilla para el texto del PR, para ayudar al equipo a manejarlo. Nuestro PR es muy simple, así que quito la plantilla y solo pego el contenido del mensaje de confirmación de antes.</p><p>¿Notas la pista de la derecha? Me dice que el proyecto tiene un archivo CONTRIBUTING.md, que explica cómo contribuir y las directrices. Bastante genial.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/07/contributing.png" class="kg-image" alt="contributing" width="600" height="400" loading="lazy"></figure><p>Parece que necesitamos firmar un CLA (Acuerdo de Licencia de Contribuyente) para completar nuestro PR. Ya firmé un CLA de Google en el pasado, así que este paso está claro para mí, pero puede que tengas que arreglarlo. La mayoría de los proyectos no lo necesitan realmente.</p><p>¡Hice clic en "Create pull request" y ahora se envía el PR!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2019/07/pull-request-sent.png" class="kg-image" alt="pull-request-sent" width="600" height="400" loading="lazy"></figure><p>Ahora depende de que los que mantienen el proyecto intervengan y lo acepten, solo tienes que esperar a que te envíen un correo electrónico diciéndote que se ha fusionado, o cualquier comentario que otras personas hayan hecho.</p><p>[... un par de horas pasaron...]</p><p>Recibí un correo electrónico de vuelta, el PR fue rechazado ¡porque ese punto este en el lugar correcto! (No sabía eso).</p><p>Pero de todos modos, aquí hay una cosa que quería añadir: no te enfades o te molestes si un PR que presentas no es aceptado. Los que mantienen el proyecto trabajan en él durante meses o años y saben mejor que tú lo que es mejor para él.</p><p>Además, especialmente con el código, los puntos de vista pueden ser muy diferentes y un PR que creas que es genial puede no ser bienvenido.</p><p>También es mejor preguntar antes de trabajar en un PR sustancial, para ver si es algo que el proyecto realmente necesita.</p><p>La corrección de bugs (errores) es un comienzo fácil.</p><p>Traducido del artículo de <a href="https://www.freecodecamp.org/news/author/flavio/"><strong>Flavio Copes</strong></a> - <a href="https://www.freecodecamp.org/news/how-to-make-your-first-pull-request-on-github/"><strong>How to make your first Pull Request on GitHub</strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Una primera mirada a GitHub Actions con Heroku ]]>
                </title>
                <description>
                    <![CDATA[ En octubre, GitHub anunció que su última gran característica, GitHub Actions, iba a ser beta pública. En ese momento no tenía muy en claro de qué consistía,  pero después de leer la publicación en su publicación de blog me pareció bastante simple. GitHub Actions es la respuesta a las principales ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/github-actions-una-primera-mirada-con-heroku/</link>
                <guid isPermaLink="false">5fdaa0758c7cd154bb978249</guid>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Stephanie Frias ]]>
                </dc:creator>
                <pubDate>Sun, 10 Jan 2021 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/01/1_GsbQnrSIRn8-MkyfFGXJHw-1-.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>En octubre, GitHub anunció que su última gran característica, GitHub Actions, iba a ser beta pública. En ese momento no tenía muy en claro de qué consistía, &nbsp;pero después de leer la publicación en su publicación de blog me pareció bastante simple. GitHub Actions es la respuesta a las principales características de su competidor: La función Auto DevOps de Gitlab.</p><p>Hace poco creé mi propia cuenta personal en Gitlab solo por el hecho que GitLab me ofrecía una forma muy fácil de automatizar mi proceso de compilación y despliegue de una aplicación simple de una página en React usando tan solo un archivo &nbsp;<code>.gitlab-ci.yml</code></p><p>Sin embargo, cuando obtuve acceso al beta de GitHub Actions tenía que darle un intento. Así que decidí construir algo similar.</p><h4 id="-mu-strame-el-c-digo-">¡Muéstrame el código!</h4><p>Si ya tienes una idea de qué acciones son y solo quieres ver el código relacionado, siéntete libre de explorar el repositorio para este artículo en el siguiente enlace: <a href="https://github.com/pedsm/tryGithubAction">https://github.com/pedsm/tryGithubAction</a></p><h4 id="un-breve-descargo"><strong>Un breve descargo</strong></h4><p>Toda mi experiencia con GitHub Action hasta el momento está basada en su versión beta, así tenlo en consideración. Pueda que muchas de las cosas de las que hablo aquí no sean liberadas en versión final, además ignoraré los errores y comportamientos raros que he ido encontrando.</p><h3 id="-qu-es"><strong>¿Qué es?</strong></h3><p>GitHub Actions te permite automatizar tareas a ser completadas cuando algo sucede en tus repositorios (como pushes, issues, versión y demás). Esto significa que puedes configurar tu repositorio de manera tal que pueda ser automáticamente probado y desplegado cada vez hay un nuevo commit, que es exactamente lo que yo hice.</p><p>Como ya mencioné, la única razón por la que decidí crear una cuenta en GitLab fue la posibilidad de tener un flujo de trabajo en el cual todo nuevo código agregado al Master sea desplegado directamente al sitio web, entonces decidí recrear esto exactamente.</p><h3 id="la-configuraci-n"><strong>La Configuración</strong></h3><p>Una vez que tienes acceso a GitHub Action, verás una nueva pestaña con el nombre de <code>Actions</code> en tus repositorios. En ella podrás crear tu primer flujo de trabajo. Un flujo de trabajo es un archivo de flujo de trabajo que vive dentro del .github que ya se usa para otras cosas, como plantillas de relaciones públicas y otras configuraciones de GitHub específicas del repositorio.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/1*zUZtwIE2WjvlpS4DqcLxBw.png" class="kg-image" alt="la" width="800" height="83" loading="lazy"><figcaption>La nueva pestaña de "Actions"</figcaption></figure><p>GitHub Actions viene con un editor gráfico completamente equipado para tus flujos de trabajo. Esto es un soplo de aire fresco si pensaste que ibas a tener que aprender un nuevo esquema YAML or algún lenguaje específico a la tecnología como en el caso de <code>Jenkinsfile</code>. Por otro lado, si no quieres usar ninguna de estas alucinantes herramientas gráficas siempre puedes editar el archivo .workflow a tu gusto.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/1*gk2BNOWyKfD-50-1CrgTHw.png" class="kg-image" alt="1*gk2BNOWyKfD-50-1CrgTHw" width="800" height="569" loading="lazy"><figcaption>El visualizador gráfico del .workflow</figcaption></figure><p>Los archivos de Workflow usan el lenguaje de configuración HashiCorp(conocido también como HCL). Si conoces de Terraform, este lenguaje se te hará familiar.</p><h3 id="las-diferencias"><strong>Las diferencias</strong></h3><p>Si has implementado algún tipo de prueba automatizada, todo esto se te hará muy familiar. Quizá aparte de tener acceso a un editor gráfico. De todas maneras, encontraremos menos similitudes a medida que avancemos.</p><p>GitHub Actions, como el nombre lo sugiere, es una serie de <code>actions</code> que son ejecuciones de comandos individuales, lo cual es bastante inusual. Si le prestas atención al archivo <em>de flujo de trabajo, </em>habrás notado que la definición de las acciones tiene un parámetro <code>uses</code>. Si usas una acción <code>npm</code> podrías crear una solo tarea NPM como <code>npm install</code> y luego otra acción para hacer la prueba <code>npm test</code>. Esto es inusual, ya que algunas tareas lógicas como "instalar dependencias" podrían requerir más de un comando y usualmente están agrupadas en "Etapas" en otras soluciones de integración continua.</p><p>Al usar el editor gráfico y agregas una nueva acción, lo primero que se te muestra es una lista de acciones disponibles. Luego aparece un formulario simple en el cual solo debes ingresar texto en los campos <em>label</em>, <em>args</em> y <em>run</em>.</p><p>El campo <em>label, </em> como podrías inferir, es solo un nombre amigable para lo que hace tu acción, como por ejemplo "<em>Testing". </em>La acción luego realizas un <em><em>‘runs args’</em> &nbsp;</em>en la terminal considerando que <em>runs </em>no está siendo sobreescrito. Esto significa que para ejecutar <code>npm install</code> en una acción que use npm, tendrías que dejar el campo <em>runs </em>con el texto por defecto (vacío) y en el campo <em>args</em> escribir <code>install</code></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/1*N6uwl7UCYhFb-xmcU5RBUg.png" class="kg-image" alt="1*N6uwl7UCYhFb-xmcU5RBUg" width="388" height="536" loading="lazy"><figcaption>La pantalla de configuración de una acción en el editor gráfico</figcaption></figure><p>A este momento me provoca un poco de decepción, porque al parecer GitHub quiere restringir la funcionalidad de esta característica a solo las cosas que la plataforma determine. Npm está disponible por el momento, pero si usas pip para tu proyecto en Python entonces tendrás que implementar una acción propia o buscar una alternativa de código abierto. Ya es posible crear tus propias acciones personalizadas, pero dado que aún está en su versión beta es poco probable que encuentres gran variedad. Mirando el lado positivo, si tenían las dos cosas que necesitaba, NMP y Heroku.</p><h3 id="el-proyecto"><strong>El Proyecto</strong></h3><p>La idea del proyecto es bastante simple: Quería construir una aplicación en Vue(ya que es lo que estoy aprendiendo actualmente) y tener un despliegue automático a un servicio de alojamiento.</p><p>Después quería crearlo de manera que el contenido del sitio web refleje un archivo <code>json</code> con una serie de nombres de usuario de GitHub. De esta manera cualquier podría crear un PR con su nombre de usuario de GitHub y yo podría darle clic a un botón y tener todo desplegado mágicamente. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/1*J55Yixev7q9A4LPcY_jyDg.png" class="kg-image" alt="1*J55Yixev7q9A4LPcY_jyDg" width="800" height="674" loading="lazy"><figcaption>You can check it out here <a href="https://try-github-action.herokuapp.com/" rel="noopener" target="_blank" title="" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">https://try-github-action.herokuapp.com/</a></figcaption></figure><p>Omitiré todo el contenido en Vue.js e iré directamente a los Actions. Luego de construir esta simple aplicación, sólo tenía que hacer las siguientes acciones:</p><ol><li>Instalar las dependencias</li><li>Ejecutar los linters (muy importante para prevenir cualquier mala estructura en el archivo json)</li><li>Construir el código listo para ir a producción</li><li>Desplegar en algún sitio web. (Decidí usar Heroku ya que parece ser el menos complicado en términos de servidores y que hay acciones disponible para esta plataforma).</li></ol><p>Con los 3 primeros pasos tuve la experiencia más intuitiva automatizando cualquier cosa. Me recordó mucho a la plataforma IFTT. Solo tienes que darle clic a la acción NPM y luego escoger que quieres que NPM haga. Sé que mencioné que me sentí un poco restringido al solo tener una par de acciones, pero la realidad es que en ningún momento tuve que preocuparme sobre la distribución de Linux que estaba usando, si NPM estaba empaquetado con la instalación Node.js, y lo más importante cero preocupación si es que la sintaxis HCL estaba correcta. Un par de clic en la interfaz gráfica y listo. El proceso completo tomó 4 acciones y menos de 5 minutos.</p><p>Luego pasé a la fase de despliegue. Sabía que esta iba a ser un poco más complicada, porque a pesar de saber cómo funciona Heroku, nunca antes lo había utilizado. Sin embargo, en el repositorio actions/heroku &nbsp;encontré instrucciones claras que me ayudaron a hacer exactamente lo que quería hacer. Al final, fue un tema de más clics y listo.</p><h3 id="secretos"><strong>Secretos</strong></h3><p>Creo que esté el momento perfecto para hablar sobre mi funcionalidad favorita de GitHub Actions, los secretos. Como podrás suponer, Heroku requiere una API Key para poder permitirle a alguien desplegar la aplicación. De lo contrario, cualquiera leyendo este artículo podría reemplazar mi aplicación con lo que le plazca. Usualmente, esto es algo molesto al encargarse de un proyecto de código abierto, ya que no puedes almacenarlo dentro del mismo repositorio. AWS tiene incluso un servicio dedicado a esta clase de problema. A pesar de ellos, GitHub ha implementado una elegante solución a este problema.</p><p>Los secretos son valores que puedes almacenar al mismo nivel del repositorio y que será automáticamente encriptados y luego enviados como variables de entorno a las acciones que definas que tengan acceso a estos valores.</p><p>Si le has pegado una mirada al repositorio de la acción de Heroku, te habrás dado cuenta de que <code>HEROKU_API_KEY</code> está listado como un secreto requerido. El proceso para hacer esto en el editor es tan simple como darle clic a <em><em>*new secret*</em>, </em>y luego darle un nombre y valor. A partir de ellos, puedes marcar el checkbox para cualquier acción que quieras que tenga acceso a esta información.</p><p>Ya que estos secretos se convierten en variable de entorno, no te quedas limitado a las acciones. Por ejemplo, tu framework de pruebas podría recibir las credenciales para un base de datos ya existente para guardar los resultados de tus pruebas, entonces podrías enviar estos secretos mediante una acción <code>npm test</code>.</p><h4 id="env"><strong>Env</strong></h4><p><em>Env</em> es otra opción dentro del editor gráfico que básicamente hace lo mismo que <em>Secrets, </em>pero omite todos los malabares de encriptar tu información. No es un gran problema, ya que la información no sensible podría ser almacenada en un archivo <code>.env</code> dentro del mismo repositorio. </p><h3 id="mis-reflexiones-sobre-github-actions"><strong>Mis reflexiones sobre GitHub Actions</strong></h3><p>GitHub Actions no está haciendo nada novedoso. Hay docenas si no cientos de soluciones disponibles ya sea comerciales o gratuitas que hacen lo mismo que hace Actions. Incluso GitHub tiene toda una categoría de marketplace para la automatización de tareas para tu repositorio.</p><p>Sin embargo, personalmente nunca he tenido tan buena experiencia de usuarios configurando una canalización de CI/CD. GitHub actions no está reinventando la rueda, solo la está haciendo más económica.</p><p>Como desarrolladores, siempre tenemos que encontrar el balance entre simplicidad de uso y cuántas funcionalidades queremos agregarle a algo. El eternos dilema entre usar la terminal de Git o su interfaz gráfica. Por otra parte, GitHub está súper consciente de lo que el mercado tiene disponible y que ellos no están tratando de ser competidores de los grandes. No, no te vas a deshacer de Jenkins, Circle o cualquier otra solución que tu organización esté ya usando. Pero si tienes un pequeño proyecto propio, definitivamente vale la pena darle una chance con GitHub Actions.</p><p><strong>Contribuye</strong></p><p>Todo el código para éste artículo es abierto y disponible en <a href="https://github.com/pedsm/tryGithubActions" rel="noopener">https://github.com/pedsm/tryGithubActions</a>. Si deseas registrar algún issue y agregar tu usuario de GitHub al proyecto, siéntete libre de crear un PR.</p><p>Traducido del artículo de <strong>Pedro Mendonça</strong> - <strong><a href="https://www.freecodecamp.org/news/a-first-look-at-github-actions-with-heroku-a6b4239d556/">A first look at GitHub Actions with Heroku</a> </strong>de <strong>Pedro Mendonça</strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Una guía rápida para cambiar tu nombre de usuario en GitHub ]]>
                </title>
                <description>
                    <![CDATA[ Algunos pasos adicionales a considerar después de realizar un cambio en tu nombre de usuario en GitHub. Siendo esta la 238,947,234 vez y probablemente última vez que cambiaré mi nombre de usuario (el matrimonio es permanente, ¿verdad?), pensé que sería mejor escribir un post rápido sobre cómo se puede lograr ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/una-guia-rapida-para-cambiar-tu-nombre-de-usuario-en-github/</link>
                <guid isPermaLink="false">5fe208bf8c7cd154bb97c91d</guid>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Kelvin Sanchez ]]>
                </dc:creator>
                <pubDate>Wed, 06 Jan 2021 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2020/12/barcat.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <h2 id="algunos-pasos-adicionales-a-considerar-despu-s-de-realizar-un-cambio-en-tu-nombre-de-usuario-en-github-"><strong>Algunos pasos adicionales a considerar después de realizar un cambio en tu nombre de usuario en GitHub.</strong></h2><p>Siendo esta la 238,947,234 vez y probablemente última vez que cambiaré mi nombre de usuario (el matrimonio es permanente, ¿verdad?), pensé que sería mejor escribir un post rápido sobre cómo se puede lograr esta transición de la manera más fluida posible. La siguiente es una guía rápida de algunas cosas a considerar <em><em><em><em>después.</em></em></em></em></p><h1 id="donde-hacer-cambios"><strong>Donde hacer cambios</strong></h1><ol><li>Cambia tu nombre de usuario haciendo clic en <strong>Change username</strong> en las <a href="https://github.com/settings/admin">opciones de tu cuenta de GitHub</a>.</li><li>Si usas GitHub Pages, cambia el nombre de tu repositorio “nombredeusuario.github.io”.</li><li>Si usas otros servicios que apunten a tu dirección de repositorio "nombredeusuario.github.io", actualízalos.</li><li>Si usas Netlify, es <em><em><em><em>posible que</em></em></em></em> desees iniciar sesión y volver a conectar tus repositorios.</li><li>Inicia sesión en Travis CI y otras integraciones, encuéntralas en la pestaña (Settings -&gt; Integrations) de tu repositorio. Esto actualizará tu nombre de usuario allí.</li><li>Actualiza tus archivos locales y enlaces de repositorio usando muy cuidadosamente comandos <code>find</code> y <code>sed</code>, empujando luego los cambios a GitHub.</li><li>Relanza cualquier sitio web que puedas tener con tu enlace de GitHub actualizado.</li><li>Corrige cualquier enlace en la web hacia tu perfil, tus repositorios, o Gists que hayas compartido.</li></ol><h1 id="actualizaci-n-de-archivos-locales"><strong>Actualización de archivos locales</strong></h1><p>Aquí hay algunas sugerencias de cadenas para buscar y reemplazar tu nombre de usuario.</p><ul><li><code>github.com/nombredeusuario</code> (Referencias a tu página de GitHub en READMEs o en la copia del sitio web)</li><li><code>nombredeusuario.github.io</code> (Enlaces a tu página de GitHub)</li><li><code>git@github.nombredeusuario</code> (URL ssh remotas de configuración de Git)</li><li><code>travis-ci.com/nombredeusuario</code>(Insignias de Travis en READMEs)</li><li><code>shields.io/github/.../nombredeusuario</code>(Insignias Shields en READMEs, incluyen <code>contribuyentes</code>, <code>estrellas</code>, <code>etiquetas</code>, y más)</li></ul><p>Puedes identificar rápidamente dónde se encuentran las cadenas anteriores utilizando este comando para cada cadena:</p><p><code>grep -rnw -e 'foobar'</code></p><p>Esto buscará recursivamente (<code>r</code>) todos los archivos para cadenas que coincidan con todo (<code>w</code>) el patrón (<code>e</code>) proporcionado y antepondrá los resultados con los números de línea (<code>n</code>) para que puedas encontrarlos fácilmente.</p><p>Usando <code>find</code> y <code>sed</code> puedes hacer estos cambios mucho más rápido. Consulta <a href="https://victoria.dev/verbose/how-to-replace-a-string-in-a-dozen-old-blog-posts-with-one-sed-terminal-command/?source=post_page---------------------------">este artículo sobre buscar y reemplazar</a> .</p><p>¡Disfruta tu nuevo nombre! (Espero que este haga click contigo.)</p><p>Traducido del artículo de <strong><strong><a href="https://www.freecodecamp.org/news/author/victoria/">Victoria Drake</a></strong> <strong>- </strong><a href="https://www.freecodecamp.org/news/a-quick-guide-to-changing-your-github-username/">A quick guide to changing your GitHub username</a></strong></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
