<!-- 32 -->
<!-- <div class="img zoomable">
	<img src="/static/source_imgs/git/pst_2/git.webp" alt="" style="height: 300px; width: auto;">
</div> -->
<p>
  Para poder subir cambios o descargar <a class="link" data-bs-toggle="modal"
    data-bs-target="#repositorio">repositorios</a> de nuestro servidor de control de versiones con <a class="link"
    data-bs-toggle="modal" data-bs-target="#git">Git</a> (No host GitHub)
  debemos primero haber creador el repositorio en nuestro servidor, para ello checa primero esa nota.
</p>
<p>
  Una vez creado el repositorio en nuestro servidor en nuestra maquina local podrémos hacer las siguientes
  procedimientos:
</p>
<ul class="nav nav-tabs" id="tab-dix" role="tablist">
  <li class="nav-item">
    <a class="nav-link active" id="tab1-tab" data-toggle="tab" href="#tab1" role="tab" aria-controls="tab1"
      aria-selected="true"><i class="bi bi-git"></i> Vincular </a>
  </li>
  <li class="nav-item">
    <a class="nav-link" id="tab2-tab" data-toggle="tab" href="#tab2" role="tab" aria-controls="tab2"
      aria-selected="false"><i class="fa-solid fa-link-slash"></i> Desvincular</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" id="tab3-tab" data-toggle="tab" href="#tab3" role="tab" aria-controls="tab3"
      aria-selected="false"><i class="bi bi-copy"></i> Clonar</a>
  </li>
</ul>
<div class="tab-content" id="myTabContent">
  <div class="tab-pane fade active show" id="tab1" role="tabpanel" aria-labelledby="tab1-tab">
    <!-- {# i nav 1 #} -->
    <div>
      <p>
        Imaginemos que vamos a crear un nuevo proyecto llamado <i>new_project</i>, por lo tanto creamos la carpeta:
      </p>
      <pre><i class="bi bi-copy"> Copiar código</i>
<code contenteditable="true" class="code_lightMode">mkdir new_project; cd new_project</code></pre>
      <p>
        Una vez dentro de la carpeta de nuestro nuevo proyecto debemos inicializar un repositorio Git:
      </p>
      <pre><i class="bi bi-copy"> Copiar código</i>
<code class="code_lightMode"># iniciar un entorno de git
git init .
</code></pre>
      <p>
        Para vincular la carpeta del proyecto a nuestro servidor debemos ejecutar los siguientes comandos:
      </p>
      <pre><i class="bi bi-copy"> Copiar código</i>
<code contenteditable="true" class="code_lightMode"># vincular el proyecto a repositorio.
git remote add origin nombre_usuario@ip_servidor_o_dns:/ruta/carpeta/repositorio/en/servidor
# ejemplo: git remote add origin dave@192.162.1.18:/home/gitserver/repos/new_project
</code></pre>
      <p>
        El comando <b><i>git remote add origin</i></b> vincula nuestro proyecto local a un repositorio remoto. El alias
        <b><i>origin</i></b> se usa para
        referirse a este repositorio en comandos futuros como <i>git push</i> o <i>git pull</i>.
      </p>
      <p>
        El comando anterior debe funcionar tanto en redes locales como externas. Para conexiones externas, asegúrate de
        abrir y
        redirigir el <a class="link" data-bs-toggle="modal" data-bs-target="#puerto">puerto</a> <a class="link"
          data-bs-toggle="modal" data-bs-target="#ssh">SSH</a> (22) en tu router hacia la <a class="link"
          data-bs-toggle="modal" data-bs-target="#ip">IP</a> del servidor. Si tienes una IP dinámica, considera usar
        servicios
        como <a href="https://www.duckdns.org/" target="_blank">DuckDNS</a>.
      </p>
      <p>
        Cabe mencionar que no es recomendable aperturar el puerto 22 de tu tu router ISP, pero en caso de que así lo
        desees esos son
        los pasos a seguir, lo más recomendable es usar una <a class="link" data-bs-toggle="modal"
          data-bs-target="#vpn">VPN</a> como wireguard y ya sea que tu hagas la instalación o
        compres un router que
        sea compatible con algunas VPN.
      </p>
      <p>
        En caso de que hayas cambiado el puerto por defecto de escucha que es el 22 debes cambiar el comando de
        vinculación a tu proyecto y especificar el puerto, el comando
        puede ser aplicado tanto para redes locales y externas.
      </p>
      <pre><i class="bi bi-copy"> Copiar código</i>
<code contenteditable="true" class="code_lightMode"># comando para puerto de escucha modificado
git remote add origin ssh://nombre_usuario@ip_publica_o_dns:puerto/ruta/carpeta/repositorio/en/servidor
# ejemplo: ssh://dave@ip-casa-dns-sample.duckddns.org:2200/home/gitserver/repos/new_project
</code></pre>
      <p>
        Una vez hecho todos los pasos anterior ya puedes continuar con tu proyecto sin importar en el lenguaje de
        programación en que vayas a
        trabajar, guardar cambios con <b><i>git add .</i></b>, guardar cambios <i><b>git commit -m "mensaje relacionado
            a los cambios hechos"</b></i>
        y subirlos a tu servidor <i><b>git push -u origin master</b></i>.
      </p>
      <p>
        Adicional a lo anterior, tambien es importante que conozcas que puedes vincular un proyecto a más de un servidor
        en caso de que quieras
        redundancias para backups, para hacerlo el proceso es similar al anterior, ejemplo del comando:
      </p>
      <pre><i class="bi bi-copy"> Copiar código</i>
<code contenteditable="true" class="code_lightMode">git remote add server_1 dave1@192.168.16.10:/home/servergit1/new_project
git remote add server_2 dave2@192.168.16.11:/home/servergit2/new_project
</code></pre>
      <p>
        Para hacer el envio de cambios es importante que hagas push por cada servidor, en este caso serían dos push,
        ejemplo:
      </p>
      <pre><i class="bi bi-copy"> Copiar código</i>
<code contenteditable="true" class="code_lightMode"># Para enviar a servidor_1
git push server_1 master	

# Para enviar a servidor_2
git push server_2 master	
</code></pre>

    </div>
    <!-- {# f nav 1 #} -->
  </div>
  <div class="tab-pane fade" id="tab2" role="tabpanel" aria-labelledby="tab2-tab">
    <!-- {# i nav 2 #} -->
    <div>
      <p>
        Si deseas desvincular el repositorio remoto configurado en tu máquina local, el procedimiento es muy sencillo.
        Primero, verifica las conexiones actuales de tu repositorio mediante el siguiente comando:
      </p>
      <pre><i class="bi bi-copy"> Copiar código</i>
<code class="code_lightMode"># Listar los remotos configurados en el repositorio local
git remote -v
</code> 
			</pre>
      <p>
        Este comando muestra las URL de los remotos configurados para operaciones de <i>fetch</i> (descarga) y
        <i>push</i> (envío).
        La salida será similar a la siguiente:
      </p>
      <pre><code>$ git remote -v
origin  dave@dns_server_git:/home/gitserver/repo/new_project (fetch)
origin  dave@dns_server_git:/home/gitserver/repo/new_project (push)
</code></pre>
      <p>
        Alternativamente, puedes usar el comando <code>git remote show origin</code> para obtener información más
        detallada
        sobre la configuración del remoto llamado <code>origin</code>, incluyendo su URL y el estado actual de las
        conexiones.
      </p>
      <p>
        Una vez que hayas identificado el remoto que deseas eliminar, puedes desvincularlo usando el siguiente comando:
      </p>
      <pre><i class="bi bi-copy"> Copiar código</i>
<code class="code_lightMode"># Eliminar un remoto llamado 'origin'
git remote remove origin
</code></pre>
      <p>
        Después de ejecutar este comando, el repositorio local ya no estará vinculado al remoto eliminado.
        No podrás realizar operaciones como <code>git push</code> o <code>git pull</code> hasta que configures una nueva
        vinculación.
        Sin embargo, los cambios realizados en tu repositorio local permanecerán intactos.
      </p>
      <p>
        Si tienes múltiples remotos configurados, como se menciona en la sección "Vincular", asegúrate de especificar
        correctamente el nombre del remoto que deseas eliminar. Por ejemplo:
      </p>
      <pre><i class="bi bi-copy"> Copiar código</i>
<code class="code_lightMode"># Eliminar un remoto llamado 'server_1'
git remote remove server_1
</code></pre>
    </div>

    <!-- {# f nav 2 #} -->
  </div>
  <div class="tab-pane fade" id="tab3" role="tabpanel" aria-labelledby="tab3-tab">
    <!-- {# i nav 3 #} -->
    <div>
      <p>
        Clonar un repositorio es el proceso de crear una copia local de un repositorio remoto. Este procedimiento es
        sencillo,
        ya sea que trabajes en una red local o externa, siempre y cuando hayas realizado las configuraciones necesarias,
        como
        la apertura de puertos o la configuración de claves SSH.
      </p>
      <p>
        Para clonar un repositorio utilizando el puerto SSH predeterminado (22), usa el siguiente comando:
      </p>
      <pre><i class="bi bi-copy"> Copiar código</i>
<code class="code_lightMode"># Clonar repositorio con puerto predeterminado (22)
git clone usuario@direccion_ip_servidor_o_dns:/ruta/carpeta/repositorio/en/servidor
# Ejemplo: git clone dave@192.168.11.31:/home/gitserver/repos/new_project
</code></pre>
      <p>
        Si tu servidor está configurado para usar un puerto SSH diferente, debes especificarlo en el comando.
        A continuación, te mostramos el formato y un ejemplo:
      </p>
      <pre><i class="bi bi-copy"> Copiar código</i>
<code class="code_lightMode"># Clonar repositorio con puerto modificado
git clone ssh://usuario@direccion_ip_servidor_o_dns:puerto/ruta/carpeta/repositorio/en/servidor
# Ejemplo: git clone ssh://dave@192.168.11.31:2200/home/gitserver/repos/new_project
</code></pre>
      <p>
        <b>En caso de que no tengas una llave SSH te solicitará autenticación, solo ingresa la contraseña y podrás
          clonar el repositorio,
          puedes consultar mi nota de como crear una llave SSH.</b>
      </p>
    </div>
    <!-- {# f nav 3 #} -->
  </div>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>