Servicios Sociales
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Write
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Help
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Write
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # Iniciando en Git y Github :::info ## Table de Contenido: [TOC] ::: ## Introducción En este documento se desea que el usuario pueda introducirse a Git y Github sin conocimiento del mismo. La gestión de versiones facilita la colaboración de equipos de desarrollo en la modificación y actualización de archivos en un proyecto, mientras se mantiene un registro de los cambios realizados a lo largo del tiempo. Además, esta práctica ayuda a evitar la duplicación de código y a prevenir conflictos que puedan surgir entre diferentes desarrolladores que trabajan simultáneamente en el mismo proyecto. De esta manera, se puede registrar el historial completo de las modificaciones realizadas en cada archivo versionado. Es importante destacar que existen dos categorías principales de sistemas de control de versiones: los centralizados y los distribuidos. ## Instalar Git ### Instalar Git en Linux **1.-** En la terminal del OS. ```linux= ubuntu@Ubuntu:~$ ``` Para actualizar el repositorio de paquetes disponibles en Ubuntu, se debe ejecutar el siguiente comando. ```linux= $ sudo apt-get update ``` Luego instale Git ```linux= $ sudo apt-get install git ``` Si quiere asegurarse de que la instalación de Git se realizó con éxito, puede verificar la versión instalada ingresando el siguiente comando en la terminal. ```linux= $ git -v ``` ### Instalar Git en Windows Para obtener Git en su computadora con sistema operativo Windows, simplemente seleccione la opción de Windows y descargue el instalador compatible con las especificaciones de su equipo. [Click para instalar la version mas reciente de Git para Windows](https://git-scm.com/download/win) Para instalar el software, se requiere hacer doble clic en el archivo de instalación y conceder permiso al sistema operativo para que lo ejecute. **1.-** En la ventana inicial del asistente de configuración, se presenta la licencia de Git con fines meramente informativos. Es posible leerla detenidamente o simplemente omitirla y continuar haciendo clic en "Next". **2.-** Por favor, seleccione la ruta donde prefiera guardar los archivos de configuración de Git y luego pulse en el botón "Next". **3.-** En la ventana siguiente se pueden visualizar diversas configuraciones personalizables, tales como la creación de accesos directos en el escritorio o la activación de Git LFS para manejar archivos de mayor tamaño. Depende de usted si desea dejar estas configuraciones predefinidas o si desea modificarlas, para luego proceder a hacer clic en el botón "Next". **4.-** Por favor, ingrese el nombre de la carpeta en la que desea guardar los proyectos en su dispositivo o simplemente mantenga el nombre predeterminado y seleccione "Next". **5.-** Por favor, elija el editor que prefiera para modificar los archivos desde la consola y presione el botón "Next". **6.-** La ventana siguiente tiene la opción predeterminada de utilizar Git como la interfaz de línea de comandos y posibilitar la utilización de git bash para ejecutar comandos propios de Git. Puede dejar esta configuración por defecto y continuar haciendo clic en "Next". **7.-** Es momento de elegir el puente de seguridad para utilizar con Git. Actualmente, el protocolo SSL se encuentra preseleccionado como opción por defecto. Si lo considera adecuado, puede dejarlo así y proceder haciendo clic en "Next". **8.-** En este momento se mostrará la configuración de conversión de línea final. Deje los ajustes tal como están y pulse en "Next". **9.-** Para utilizar Git, es necesario tener acceso a un emulador de línea de comandos de Linux, y para hacerlo más sencillo, se puede utilizar git bash. Simplemente seleccione la opción por defecto y haga clic en "Next". **10.-** En la pantalla final del asistente de configuración, encontrará algunas opciones adicionales, como la posibilidad de activar la modificación del sistema de archivos y el administrador de credenciales de Git. Le recomendamos que deje estas opciones tal como están y haga clic en "Next". **11.-** Después de finalizar la configuración, seleccione el botón "Instalar" y, posteriormente, elija la opción "Iniciar Git Bash" para concluir el proceso. **12.-** Para concluir, elija la alternativa "Iniciar Git Bash". ```linux= $ git --version ``` ### Instalacion de Git en OS Se accede a la línea de comandos del sistema operativo. ```linux= user:~$ ``` Puede verificar la versión del gestor de paquetes instalado en su computadora a través de la consulta del número de versión del software de gestión de paquetes en uso. ```linux= $ brew -v ``` ```linux= user:~$brew -v Homebrew 2.2.12 Homebrew/homebrew-core (git revision deb5; last commit 2023-04-23) user:~$ ``` #### Instalar Homebrew Si no tiene instalado **Homebrew** siga lo siguiente: [Haga click aqui para instalar Homebrew y siga los pasos correspondientes](https://brew.sh/index_es) #### Comandos para instalar git OS Instale Git con el siguiente comando: ```linux= $ brew install git ``` Para verificar que la instalación de Git se haya completado con éxito, puede introducir en la terminal el siguiente comando que mostrará la versión instalada. ```linux= $ git --version ``` ## Espacio de Labor Cuando se trabaja con GIT, se deben tener en cuenta tres áreas clave. La primera corresponde al espacio de trabajo local, donde el desarrollador realiza sus cambios y ajustes. La segunda es el repositorio central, donde se almacenan todas las versiones del proyecto. Por último, se encuentra el área de preparación, que actúa como un espacio intermedio donde se organizan los cambios antes de que se integren en el repositorio central. Es importante tener en cuenta estas tres áreas para llevar un control adecuado del proyecto y evitar errores o conflictos en el trabajo colaborativo. ### Crear un repositorio El proceso para crear un repositorio inicia en la raíz del directorio donde se encuentran los archivos del proyecto, donde se ejecuta el comando **git init** para inicializar el repositorio de Git. Es un proceso sencillo y rápido que permite al usuario empezar a trabajar en su proyecto y versionarlo de forma efectiva. ```shell= > cd <raiz de MyProyect> > git init ``` Al ejecutar este comando se establece el repositorio y se habilita el área de preparación. Al configurar el repositorio, se genera una carpeta .git oculta en el directorio principal del proyecto, la cual será la encargada de almacenar todas las versiones y datos del repositorio. ```shell= > cd <raiz de MyProyect> > git init Initialized empty Git repository in ./MiProyecto/.git/ ``` ### Guardar un Repositorio Para guardar un archivo en el repositorio, es necesario que se pase previamente al área de preparación. En este espacio, se registran los archivos que se desean enviar al repositorio, y para hacerlo, se utiliza el comando "add" que permite mover los archivos desde el espacio local al área de preparación. Observando esta situación, se puede apreciar que se ha utilizado para añadir el archivo readme.txt al área de preparación. ```shell= > git add readme.txt ``` ### Observar las actualizaciones en nuestro repositorio. Al ejecutar el comando **git status**, es posible revisar el estado actual del repositorio, lo que nos permitirá conocer si existen archivos nuevos o modificados. En este caso en particular, el archivo readme.txt es detectado como un archivo nuevo ya que esta es la primera vez que se está agregando al repositorio. ```shell= > git status On branch master Changes to be comitted: (use "git rm --cached <file>..." to unstage) new file: readme.txt Untracked files: (use "git add <file>..." to include in what will be commited) file1/ ``` Además, se puede notar la presencia de archivos en mi sistema local que aún no han sido agregados al área de preparación. En particular, el archivo llamado File1 es una carpeta que, por ahora, no deseamos trasladar al repositorio. ### Transferir los archivos de la zona de preparación al repositorio. El comando **commit** es utilizado para enviar los cambios realizados en el área de preparación al repositorio. Este comando requiere la inclusión de un mensaje que describa los cambios realizados. Al ejecutar este comando, se guarda una copia de los archivos en la versión actual y se asocia el mensaje a la versión. Cada versión es identificada mediante un HASH único que corresponde a los archivos contenidos en ella. De esta manera, se mantiene un registro histórico de los cambios realizados en el código. ```shell= > git commit -m "Archivo readme del proyecto" [master (root-commit) dc9fb48] Project readme file 1 file changed, 1 insertion(+) create mode 100644 readme.txt ``` Al ejecutar el comando, se nos brinda información sobre la cantidad de archivos que se han añadido y los que han sido modificados. Además, podemos verificar el estado actual del repositorio para conocer cualquier cambio que se haya producido. En este caso, se muestra que no hay cambios pendientes en el área de preparación y que la carpeta1 aún no ha sido incluida en dicha área. También se registra la presencia de un archivo en el repositorio. ### Realizar modificaciones a un archivo que ya se encuentra en el repositorio. Al modificar el archivo readme.txt, el estado actual del repositorio nos indica la presencia de un archivo modificado en el espacio local. Sin embargo, la carpeta1 aún no ha sido agregada al área de preparación. Para actualizar el repositorio con los cambios, debemos volver a repetir los pasos previos de agregar la carpeta al área de preparación y luego al repositorio. El comando **add** permite agregar archivos nuevos o modificados al área de preparación. Posteriormente, al revisar el estado del archivo, se puede notar que se encuentra en el área de preparación listo para ser enviado al repositorio mediante el comando **commit** y su correspondiente mensaje. De esta forma, se crea una nueva versión del repositorio con un identificador distinto. Al realizar estos pasos, se pueden tener múltiples versiones en el repositorio. ```shell= > git add readme.txt > git commit -m "Project readme file" ``` ### Revisar el registro de modificaciones anteriores. ```linux= $ git log ``` Además de la información elemental del registro de cambios, es factible reconocer la rama en la cual se efectuaron las modificaciones y el identificador individualizado del mismo. Este código exclusivo le proporciona la capacidad de buscarlo en el futuro o revertir el ***commit** si fuera necesario. ### Lograr la sincronización entre los repositorios. #### Emplear la función "pull" Para mantener sincronizados los repositorios, es esencial utilizar el comando **push**. Esto nos permitirá descargar las últimas modificaciones realizadas en el repositorio original o en el clon del mismo, asegurando que trabajamos con la versión más actualizada del código. ```shell= > git pull ``` Git es una herramienta esencial para la gestión de versiones de proyectos colaborativos. Entre sus funciones, destaca la posibilidad de descargar contenido desde un repositorio remoto y actualizar de forma inmediata el repositorio local para reflejar dichos cambios. De esta forma, se pueden fusionar los cambios remotos con el nivel de tu repositorio local en una tarea común en flujos de trabajo colaborativos basados en Git. #### El Fork En Git, una tarea común es la creación de una copia de un repositorio existente en la cuenta personal del usuario, lo que se conoce como hacer un **fork**. A continuación se detallan los pasos necesarios para realizar esta operación en el repositorio base. Diríjase al repositorio base que creó previamente en la sección anterior a través de su navegador web y seleccione el botón **Fork** situado en la esquina superior derecha de la pantalla para continuar. Cuando se realiza un **fork** en GitHub, se crea una copia exacta del repositorio original en el dominio de GitHub, pero con el nombre de usuario del que realiza el **fork** y el nombre del repositorio original. Es decir, el usuario tendrá una copia completa y separada del repositorio original en su propia cuenta de GitHub. #### Usando Git Push Esta acción permite transferir datos del repositorio local a un repositorio remoto para asegurar que ambos contengan la misma versión del contenido. ### Usando el Pull Request Un **pull request** es una solicitud que permite la integración de nuevas propuestas o cambios de código a un proyecto ya existente. Esta solicitud puede ser revisada y evaluada por el equipo de desarrollo antes de que se hagan los cambios necesarios. De esta manera, se asegura que el proyecto se mantenga actualizado y se evitan posibles errores en el código. Para llevar a cabo esta tarea, es necesario generar una petición de **pull request** con el fin de fusionar las modificaciones efectuadas al repositorio principal. Una manera alternativa de expresar la misma idea podría ser: "Para incorporar las modificaciones realizadas al repositorio base, se hace necesaria la creación de una solicitud de extracción". Al hacer clic en **Create Pull Request**, se abre una ventana que permite revisar las diferencias entre los commits y visualizar los archivos involucrados. En esta etapa, el usuario puede agregar comentarios relevantes y detallar los cambios realizados antes de crear la solicitud de extracción. Se ha generado y le brinda la opción de continuar añadiendo comentarios o clausurarlo a su discreción. ### Revisar y Rechazar Pull Request Después de crear el comentario, usted tiene la opción de seguir discutiendo o cerrar la conversación. Si en algún momento observa una notificación en su perfil que indica **Pull Request**, simplemente haga clic en ella para abrir el contenido y ver la información detallada, incluyendo el autor del pull request, la fecha y su comentario correspondiente. Para visualizar los archivos afectados o agregados en un **Pull request**, se puede acceder a la pestaña denominada **Files changed**. Una vez allí, se podrán observar todos los archivos modificados y las adiciones realizadas en ellos durante el proceso del **Pull request**. Después de la revisión del **Pull Request**, una notificación será enviada al correo electrónico asociado con la cuenta de **Github**, proporcionando un resumen de las observaciones recibidas durante la revisión. ## Las ramas en Git Es necesario verificar la respuesta del administrador del repositorio base y realizar las correcciones necesarias en base a sus comentarios. La utilización del comando "branch" sin parámetros nos permite visualizar la lista de ramas existentes. Actualmente, sólo disponemos de una rama, denominada "master". Podemos identificar que estamos trabajando en esta rama gracias al asterisco que aparece antes del nombre de la misma. Mediante el uso del comando **Git Branch** es posible generar una nueva rama en el proyecto que se esté trabajando. Para desplazarnos a una nueva rama a partir de nuestra rama principal **(master)**, se debe utilizar el comando **git checkout** seguido del nombre de la nueva rama. Por ejemplo, si deseamos movernos a la rama llamada **New**, debemos ejecutar el comando **git checkout New**. Luego de ejecutar este comando, se mostrará un mensaje indicando que nos encontramos en la rama deseada. ### Fusion de Ramas Imaginemos que deseamos efectuar un cambio en el archivo denominado **HvGC.html** en la rama **New**. Una vez realizado el cambio, se añade con la instrucción **add** y se envía mediante un **commit** al repositorio local. Posteriormente, para fusionar ambas ramas, por ejemplo con la rama **master**, nos situamos en ella con el comando **git checkout master** y, seguidamente, procedemos a integrar las dos ramas utilizando el comando **merge** seguido del nombre de la rama a fusionar, en este caso, la rama **New**. Git es capaz de combinar los cambios realizados en dos ramas diferentes en una sola. Si hubiera algún tipo de conflicto debido a que ambas ramas han sido modificadas, Git notificará al usuario para que pueda resolver el conflicto de manera efectiva y asegurarse de que el proceso de fusión se complete con éxito. De esta forma se pueden visualizar los conflictos y realizar las modificaciones necesarias. Una vez que hayamos terminado de mezclar los cambios en el archivo, podemos realizar un commit en la rama principal **master** y crear una nueva versión del mismo. Mediante el uso del comando **git log**, es posible comprobar que se han realizado modificaciones tanto en la rama **New** como en la rama **master**. En la rama principal llamada **master**, se encuentran la versión inicial, la versión corregida del error y la combinación de la rama **New**. Mientras que en la rama **New** solo se encuentran las versiones relacionadas con el cambio de diseño. La versión más reciente que se encuentra en la rama **master** es la que se ha publicado en el sitio web para actualizar la hoja de vida. ### Las Ramas Remotas En este ejemplo, vamos a mostrar cómo clonar un repositorio de Git y trabajar con ramas remotas y locales. En primer lugar, clonaremos el repositorio que contiene una carpeta de documentos y un archivo **readme.txt** en nuestro espacio local. A continuación, crearemos una nueva rama en el repositorio remoto y haremos cambios en esa rama. Después, actualizaremos nuestro repositorio local para sincronizarlo con el repositorio remoto y comprobaremos cómo se relacionan las ramas remotas con las ramas locales. Finalmente, crearemos una nueva rama en nuestro repositorio local y la publicaremos en el repositorio remoto. Una vez que hemos clonado un repositorio, es posible revisar su registro mediante el uso del comando "log". Observamos que tanto el repositorio **local** como el repositorio **origen** poseen la rama **master**, y en ambos repositorios el puntero **HEAD** apunta a esta rama. Ahora, procederemos a crear una nueva rama llamada **Introducción** en el repositorio remoto de GitHub, y cambiaremos a esa rama. Mediante el uso del comando **git log --oneline**, es posible visualizar que tanto el repositorio local como el remoto se encuentran apuntando a **HEAD** en la rama principal, denominada **master** y su respectiva copia en el servidor, conocida como **origin**. En el repositorio actual, se realiza una modificación al archivo **readme.txt**. Se añade una línea adicional en la sección de introducción con el fin de mejorar la información presentada. Es importante mencionar que la edición se realiza dentro del mismo repositorio para simplificar el proceso y mantener la coherencia en las versiones del archivo. ### Llevar una rama remota llevarla a una rama local. Después de haber realizado la modificación, se procede a realizar el **commit**. Una vez completado este proceso, regresamos a la terminal del repositorio local y llevamos a cabo la ejecución de **pull**. Cuando se realiza la operación de **pull**, se nos notifica que se ha agregado una nueva rama de **introducción** en el repositorio remoto. Esto significa que podemos descargar la última versión de esa rama y fusionarla con nuestra rama actual, lo que nos permite mantener nuestro código actualizado y trabajar en colaboración con otros desarrolladores. Si ejecutamos el comando **banch -a**, podremos obtener una lista de todas las ramas disponibles en el repositorio actual. Podemos observar que la rama llamada **introduccion** se encuentra en el repositorio remoto, pero no en el repositorio local que estamos utilizando actualmente. Podemos listar las ramas locales utilizando el comando **git branch -a** y ver con qué rama cada una está asociada. Actualmente, solo contamos con la rama principal llamada **master**. Si deseamos conectar la rama remota de introducción con una rama local, es necesario realizar un procedimiento llamado **checkout**. Al realizar este procedimiento, se establece una conexión entre la rama local y la rama remota. Revisemos una vez más la lista de ramas. Con la rama local **introducción** ya creada, comprobemos mediante la opción **-vv** que se ha establecido la asociación con la rama remota. De esta forma se puede observar el proceso de creación de ramas en repositorios remotos y la actualización correspondiente de los repositorios locales, manteniendo una asociación entre las ramas del repositorio local y el remoto. ## Empujar una rama local hacia un repositorio remoto. Utilicemos el comando **checkout** para cambiar a la rama de colaboradores que acabamos de crear. Observamos que en nuestro repositorio local existe una rama recién creada que aún no ha sido integrada al repositorio remoto. En este momento procederemos a modificar el archivo **readme.txt** en la versión correspondiente a esta rama, incluyendo nuevos colaboradores al archivo, y seguidamente guardamos los cambios realizados. Cuando se quieren guardar los cambios realizados en nuestro código en el repositorio, es necesario utilizar dos comandos esenciales: "add" y "commit". Estos comandos nos permiten añadir los cambios realizados y hacer una confirmación de los mismos para que queden registrados en el historial de versiones del repositorio. De esta manera, se pueden rastrear los cambios realizados y volver a versiones anteriores del código si es necesario. Para enviar nuestros cambios al repositorio remoto, usaremos el comando **git push --set-upstream origin Colaboradores.** Esto es necesario ya que estaremos creando una nueva rama en el repositorio remoto. Debemos especificar el nombre del repositorio remoto y el nombre que queremos darle a nuestra nueva rama. Al realizar el envío de los cambios, se notifica la creación de una nueva rama de colaboradores en el repositorio remoto, la cual quedó enlazada a la rama del repositorio local para mantener una sincronización constante entre ambas. Vamos a echar un vistazo a nuestra nueva rama en GitHub. En este caso, nos encontramos en la rama de colaboradores, donde podemos encontrar el archivo que contiene los cambios que hemos realizado. Ahora, revisemos la lista de ramas en nuestro repositorio local para asegurarnos de que todo está en orden. Podemos observar que tenemos una rama llamada "colaboradores" en nuestro repositorio local y otra en el repositorio remoto. Para concluir, comprobaremos la forma en que se vinculan las ramas locales y remotas mediante el uso de la opción **-vv**. Ahora podemos verificar que la rama de **colaboradores** ha sido correctamente asociada con la rama del mismo nombre en el repositorio remoto. ## Cheat Sheet Git Un Cheat Sheet que se puede emplear al momento de llevar acabo lo aprendido, y aumentar su habilidad en el uso de los comandos. ```shell $ git init # Crear un nuevo git $ git add # Agregar archivos al area de preparacion $ git status # Estado del repositorio $ git commit -m # pasar archivos del area de preparacion al repositorio local $ git log # ver las versiones de archivos del repositorio $ git clone # clonar un repositorio remoto $ git push # modificar el repositorio remoto, con su nueva actualizacion $ git pull # actualizar tu repositorio local con la ultima version del remoto $ git add # sirve para agregar todos los archivos modificados al area de preparacion ``` ## Referencias > **Coursera, Git en español**, Universidad de los Andes, [Curso de Git en español](https://www.coursera.org/learn/git-espanol/) ## LICENSE ``` Copyright (C) 2023 DECENTRALIZED CLIMATE FOUNDATION A.C. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". ``` ## Autor y Revisor > Work developed in collaboration with the [Decentralized Climate Foundation](https://decentralizedclimate.org). Autor: - [Gustavo Bermudez](mailto:nizaries44@gmail.com) Revisor: - [Omar Octavio Huerta Valdez](mailto:ohuerta@decentralizedclimate.org)

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully