{"id":1808,"date":"2024-02-12T00:04:00","date_gmt":"2024-02-12T00:04:00","guid":{"rendered":"https:\/\/carlosfx.com\/?p=1808"},"modified":"2024-02-08T10:58:41","modified_gmt":"2024-02-08T10:58:41","slug":"how-to-manage-dotfiles-in-windows-yes-you-read-that-right-windows","status":"publish","type":"post","link":"https:\/\/carlosfx.com\/es\/2024\/02\/how-to-manage-dotfiles-in-windows-yes-you-read-that-right-windows\/","title":{"rendered":"C\u00f3mo gestionar dotfiles en Windows, s\u00ed, has le\u00eddo bien, Windows."},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Algunos antecedentes.<\/h2>\n\n\n\n<p>Si quieres saltarte esta secci\u00f3n, <a href=\"#tutorial-part\">haz clic aqu\u00ed<\/a>.<\/p>\n\n\n\n<p>Llevo usando VSCode en Windows unos dos a\u00f1os, soy nuevo en la programaci\u00f3n y vengo del sector de la construcci\u00f3n como puedes ver en esta p\u00e1gina web, estoy algo atado a Windows o como algunos lo llaman Telemetr\u00eda de William G., tambi\u00e9n conocido como Telemetr\u00eda  MS, <strong>as\u00ed que cambiarme a Linux no es una opci\u00f3n<\/strong>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u00bfVim en el futuro?<\/h4>\n\n\n\n<p>He estado mirando twitter \u00faltimamente y se habla mucho de NeoVim y he decidido probarlo, aprender un poco m\u00e1s sobre \u00e9l y, por supuesto, sobre su parte de configuraci\u00f3n, y quiz\u00e1s alg\u00fan d\u00eda pueda sustituir a VSCode.<\/p>\n\n\n\n<p>He utilizado Vim para editar peque\u00f1os archivos de texto, pero nada m\u00e1s, ya dominaba hjkl y :wq! y nunca he necesitado nada m\u00e1s, as\u00ed que mi camino de aprendizaje empez\u00f3 leyendo los documentos de Vim y los documentos de NeoVim, luego empec\u00e9 a ver un v\u00eddeo de TypeCraft y hasta ahora estoy contento con los resultados.<\/p>\n\n\n\n<p>Pero despu\u00e9s de ver el primer v\u00eddeo mencion\u00f3 algo sobre la carpeta dotfiles, y leyendo m\u00e1s sobre ello pens\u00e9 que ser\u00eda una buena idea guardar mi configuraci\u00f3n para utilizarla en otra computadora. As\u00ed que decid\u00ed buscar una soluci\u00f3n.<\/p>\n\n\n\n<p>Hay algunas soluciones como crear enlaces simb\u00f3licos, que son similares en Linux, pero por suerte buscando en YouTube encontr\u00e9 un v\u00eddeo de DistroTube, un canal que veo de vez en cuando por sus v\u00eddeos de aspecto profesional, (<a href=\"https:\/\/youtu.be\/tBoLDpTWVOM\">https:\/\/youtu.be\/tBoLDpTWVOM<\/a>), en el v\u00eddeo muestra una soluci\u00f3n para gestionar los dotfiles usando un repositorio git bare, as\u00ed que vi el v\u00eddeo, le\u00ed el art\u00edculo que inspir\u00f3 su v\u00eddeo y comenc\u00e9 mi camino para crear mi informe dotfiles.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tutorial-part\">Tutorial<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">Esta es actualmente la mejor soluci\u00f3n que he encontrado, as\u00ed que si encuentras algo mejor o conoces otra soluci\u00f3n, por favor comp\u00e1rtela, me encantar\u00eda escuchar algunas ideas.<\/h4>\n\n\n\n<h3 class=\"wp-block-heading\">Mi configuraci\u00f3n<\/h3>\n\n\n\n<p>Estoy utilizando<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cmder (<a href=\"https:\/\/cmder.app\/\">https:\/\/cmder.app\/<\/a>), un emulador de consola port\u00e1til, con cmd de Windows<\/li>\n\n\n\n<li>Git<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Carpetas, Directorios<\/h3>\n\n\n\n<p>Tengo dos directorios para este tutorial, el directorio <strong>dotfiles<\/strong> con mis archivos y un directorio <strong>dotrepo<\/strong>.<\/p>\n\n\n\n<p>El directorio <strong>dotfiles<\/strong> es mi directorio de trabajo, normalmente en Windows los archivos de configuraci\u00f3n se almacenan en el directorio C:\\Users\\.<\/p>\n\n\n\n<p>Ten cuidado, hay un directorio AppData que puede contener otros archivos de configuraci\u00f3n, en los subdirectorios Local y Roaming, as\u00ed que comprueba d\u00f3nde almacena tu programa los archivos de configuraci\u00f3n, y tienes que ocuparte de las subcarpetas utilizando un archivo .gitignore, o puedes a\u00f1adir tus dotfiles manualmente.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Ejecuta cmd, cmd o power shell como admin.<\/h4>\n\n\n\n<p>Dentro del directorio <strong>dotrepo<\/strong> ejecuta <code>git init --bare<\/code>, esto crear\u00e1 un repositorio bare sin \u00e1rbol de trabajo, no es un directorio git normal porque no le a\u00f1adir\u00e1s archivos.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/carlosfx.com\/wp-content\/uploads\/2024\/02\/cmd01.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Ahora puedes ir al directorio <strong>dotfiles<\/strong> y a\u00f1adir un archivo, en mi caso a\u00f1ad\u00ed un <strong>*README.md<\/strong>.<\/p>\n\n\n\n<p>A continuaci\u00f3n, ejecuta el siguiente comando<br>git -git-dir=D:_ejemplo_dotrepo_ -work-tree=D:\\_ejemplo_dotfiles\\_estado_.<\/p>\n\n\n\n<p>Puedes ver que el archivo que acabamos de crear aparece como no rastreado.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/carlosfx.com\/wp-content\/uploads\/2024\/02\/cmd02.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>El comando <code>--git-dir=<\/code> indica a git d\u00f3nde est\u00e1 el directorio bare git, y el comando <code>--work-tree=<\/code> indica a git d\u00f3nde est\u00e1 el \u00e1rbol de trabajo.<\/p>\n\n\n\n<p>Los comandos <strong>\u00ab-git-dir=D:_ejemplo_dotrepo_\u00bb y \u00ab-work-tree=D:_ejemplo_dotfiles_\u00bb<\/strong> son toda la magia de este proceso.<\/p>\n\n\n\n<p>Por ejemplo, podemos a\u00f1adir, confirmar y enviar el README<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>git add README.md<\/li>\n\n\n\n<li><code>git commit -m \"Primer archivo a\u00f1adido\"'<\/code>.<\/li>\n\n\n\n<li><code>git push<\/code>.<\/li>\n\n\n\n<li><code>git status<\/code>.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/carlosfx.com\/wp-content\/uploads\/2024\/02\/cmd03.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Por ejemplo, puedes configurar tu nombre de usuario, contrase\u00f1a y URL en tu carpeta <strong>git bare<\/strong> utilizando el mismo m\u00e9todo<\/p>\n\n\n\n<p>git config -local usuario.email \u00ab\u00bb<br>git config -local usuario.nombre \u00ab\u00bb<br>git config -local remoto.origen.url \u00ab\u00bb<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Importante<\/h3>\n\n\n\n<p>Cuando uses <code>git status<\/code> te dar\u00e1s cuenta de que todo lo que haya en la carpeta aparecer\u00e1 como sin seguimiento, <strong>tienes que a\u00f1adir los archivos y carpetas manualmente<\/strong>, no a\u00f1adas todo a wsing git.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Alias de Cmder<\/h3>\n\n\n\n<p>Si no quieres escribir los comandos largos cada vez puedes usar <a href=\"https:\/\/github.com\/cmderdev\/cmder\/wiki\/Cmder-Aliases\">cmder aliases<\/a>, y por supuesto si est\u00e1s en el s\u00edmbolo del sistema o usando powershell tambi\u00e9n puedes a\u00f1adir aliases, yo simplemente prefiero cmder porque es f\u00e1cil de configurar.<\/p>\n\n\n\n<p>El archivo con los alias se encuentra dentro del directorio cmder en \u2026cmder\\config\\user\\aliases.cmd<\/p>\n\n\n\n<p>Veamos el alias en Cmder para nuestro caso.<br><code>dgit=git --git-dir=D:\\ejemplo\\dotrepo\\ --work-tree=D:\\ejemplo\\dotfiles\\ $*<\/code>.<\/p>\n\n\n\n<p>Donde <code>dgit=<\/code> es el nombre del alias.<\/p>\n\n\n\n<p><br><strong>La magia es <code>git --git-dir=D:\\ejemplo\\dotrepo\\ --work-tree=D:\\ejemplo\\dotfiles\\ y<\/code>$*` indica a cmder que se pueden a\u00f1adir banderas al final del comando.<\/strong><\/p>\n\n\n\n<p>Despu\u00e9s de editar y recargar los alias en cmder, puedes ejecutar<br>`dgit status&#8217; y obtendr\u00e1s el estado del repositorio bare git.<\/p>\n\n\n\n<p>Ten en cuenta que si no a\u00f1ades <code>$*<\/code> al final del alias, Cmder ignorar\u00e1 las banderas que vienen despu\u00e9s del comando, es decir, s\u00f3lo ejecutar\u00e1s el comando <code>git<\/code> que muestra el uso de git.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Advertencias<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Archivos a\u00f1adidos manualmente<\/h3>\n\n\n\n<p>Toma tiempo buscar con archivos de configuraci\u00f3n o carpetas, y despu\u00e9s se tienen que a\u00f1adir uno por uno al repo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Carpetas vac\u00edas<\/h3>\n\n\n\n<p>Ya lo he mencionado pero tiene que quedar claro, <strong>tienes que a\u00f1adir los archivos y directorios manualmente<\/strong>.<\/p>\n\n\n\n<p>Por ejemplo <code>**git add AppData\\Local\\nvim**<\/code>.<\/p>\n\n\n\n<p>A\u00f1ade los archivos al repositorio con la ruta completa con los directorios vac\u00edos, en mi caso algunos archivos est\u00e1n en <strong>C:\\Users\\AppData\\Local\\nvim<\/strong>, los archivos de configuraci\u00f3n para neovim se a\u00f1aden al repositorio como <em><strong>AppData\\Local\\nvim<\/strong><\/em>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Otros archivos<\/h3>\n\n\n\n<p>Los archivos de configuraci\u00f3n fuera de C:\\Users no se pueden rastrear con git, todo tiene que estar en el \u00e1rbol de trabajo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Repositorio<\/h2>\n\n\n\n<p>Extracto de Wikipedia<\/p>\n\n\n\n<p>El origen de la palabra espa\u00f1ola \u00abrepositorio\u00bb deriva del lat\u00edn <em>\u00abrepositorium\u00bb<\/em>, que significa armario o alacena. Este t\u00e9rmino est\u00e1 recogido en el <a href=\"https:\/\/es.wikipedia.org\/wiki\/DRAE\">Diccionario de la Real Academia<\/a> donde se define como el \u00ablugar donde se guarda algo\u00bb.<\/p>\n\n\n\n<p><a href=\"https:\/\/es.wikipedia.org\/wiki\/Repositorio_(contenido_digital)\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/es.wikipedia.org\/wiki\/Repositorio_(contenido_digital)<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Algunos antecedentes. Si quieres saltarte esta secci\u00f3n, haz clic aqu\u00ed. Llevo usando VSCode en Windows unos dos a\u00f1os, soy nuevo en la programaci\u00f3n y vengo del sector de la construcci\u00f3n como puedes ver en esta p\u00e1gina web, estoy algo atado a Windows o como algunos lo llaman Telemetr\u00eda de William G., tambi\u00e9n conocido como Telemetr\u00eda [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1810,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[239],"tags":[249,247,235],"class_list":["post-1808","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming","tag-config","tag-dotfiles","tag-terminal"],"_links":{"self":[{"href":"https:\/\/carlosfx.com\/es\/wp-json\/wp\/v2\/posts\/1808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/carlosfx.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/carlosfx.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/carlosfx.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/carlosfx.com\/es\/wp-json\/wp\/v2\/comments?post=1808"}],"version-history":[{"count":11,"href":"https:\/\/carlosfx.com\/es\/wp-json\/wp\/v2\/posts\/1808\/revisions"}],"predecessor-version":[{"id":1828,"href":"https:\/\/carlosfx.com\/es\/wp-json\/wp\/v2\/posts\/1808\/revisions\/1828"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/carlosfx.com\/es\/wp-json\/wp\/v2\/media\/1810"}],"wp:attachment":[{"href":"https:\/\/carlosfx.com\/es\/wp-json\/wp\/v2\/media?parent=1808"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/carlosfx.com\/es\/wp-json\/wp\/v2\/categories?post=1808"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/carlosfx.com\/es\/wp-json\/wp\/v2\/tags?post=1808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}