{"id":22416377,"url":"https://github.com/cilindrox/workshop","last_synced_at":"2025-03-27T04:19:56.660Z","repository":{"id":12932621,"uuid":"15610361","full_name":"cilindrox/workshop","owner":"cilindrox","description":"Repo for the git workshop talk","archived":false,"fork":false,"pushed_at":"2014-03-03T13:37:16.000Z","size":272,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-01T09:29:31.155Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"flowjs/ng-flow","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cilindrox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-01-03T13:44:13.000Z","updated_at":"2022-06-13T17:51:10.000Z","dependencies_parsed_at":"2022-07-10T04:46:30.296Z","dependency_job_id":null,"html_url":"https://github.com/cilindrox/workshop","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cilindrox%2Fworkshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cilindrox%2Fworkshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cilindrox%2Fworkshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cilindrox%2Fworkshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cilindrox","download_url":"https://codeload.github.com/cilindrox/workshop/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245779485,"owners_count":20670688,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-05T15:16:05.125Z","updated_at":"2025-03-27T04:19:56.629Z","avatar_url":"https://github.com/cilindrox.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Git Workshop\n\nRepo para la charla de git workshop.\n\n## Git Setup\n\nInstrucciones para instalar y configurar la última versión estable de git.\n\n### Instalación\n\nPara instalar la última versión de git es necesario tener [homebrew][1] primero. Luego, basta con abrir un terminal y ejecutar lo siguiente:\n\n    brew update \u0026\u0026 brew install git\n\nPodemos verificar que contamos con la última versión ejecutando lo siguiente:\n\n    git --version\n    git version 1.8.5.2\n\nCualquier cosa por encima de `1.8.5` quiere decir que no estamos utilizando el binario provisto por defecto en OS X.\n\n### Configuración\n\nPara setear el username y password de forma global:\n\n    git config --global user.name gfestari\n\n    git config --global user.email gf@email.com\n\nReemplazar con las credenciales apropiadas ;)\n\n## gitconfig\n\nConfiguración con algunos tweaks prácticos para mejorar el gitflow.\n\n### Howto\n\n**Este repo** cuenta con un archivo [gitconfig][2] de configuración con unos settings por defecto y aliases útiles para git.\n\nLa idea es que tomen prestado algunas de las configuraciones y aliases para hacer que el trabajo desde el terminal sea más sencillo.\n\n### Utilizar el script\n\nEl repo cuenta con un script que automatiza la copia del archivo de configuración de git. Para utilizarlo, basta con clonar el repo:\n\n    git clone https://github.com/gfestari/workshop.git\n    cd workshop\n\nY ejecutar el script `install.sh`, teniendo la precaución de haber actualizado previamente las las variables `username` e `email` con nuestras respectivas  credenciales de GitHub:\n\n    username=gfestari\n    email=gaston.festari@email.com\n\nGuardar los cambios al script, y ejecutarlo de la siguiente manera:\n\n    sh install.sh\n\nY listo.\n\n### Aliases\n\nAlgunos atajos prácticos que van a poder utilizar después de ésto:\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003ecomando\u003c/th\u003e\u003cth\u003eefecto\u003c/th\u003e\n  \u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e`git l`\u003c/td\u003e\u003ctd\u003elog con grafo\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e`git cm \"Mensaje de commit\"`\u003c/td\u003e\u003ctd\u003eidem a realizar `git commit -m \"Mensaje de commit\"`\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e`git news`\u003c/td\u003e\u003ctd\u003erevisa qué cambios hay de nuevo en el repo\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e`git d viejo nuevo`\u003c/td\u003e\u003ctd\u003ediff para comparar archivos, commits, etc.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e`git pl`\u003c/td\u003e\u003ctd\u003e`git pull --ff-only` una de las maneras indicada en el gitflow para hacer los `pull`\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e`git s`\u003c/td\u003e\u003ctd\u003egit status\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e`git sb`\u003c/td\u003e\u003ctd\u003eversión compacta de lo anterior\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e`git stache`\u003c/td\u003e\u003ctd\u003eversión hipster de `stash`\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e`git alias`\u003c/td\u003e\u003ctd\u003eimprime esta lista por extensión :P \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## Gitflow\n\nFlujo de trabajo sujerido para utilizar git.\n\nRemember:\n\n* **NO REESCRIBIR EL HISTORIAL PÚBLICO**\n* **NO HACER `amend` DE COMMITS PUSHEADOS**\n* **NO HACER `rebase` DE COMMITS PUSHEADOS**\n\n### Crear un topic branch\n\nCrea y cambia nuestra ref a un branch llamado `topic-branch`:\n\n    git checkout -b topic-branch\n\n### Actualizar HEAD con cambios upstream\n\nUna vez hechos los cambios en `topic-branch`, podemos actualizar `develop` con los cambios de upstream:\n\n    # [opcional] git checkout develop\n    git pull --rebase origin develop\n\nAlternativamente, podemos hacer un *forward-merge*:\n\n    git pull --ff-only\n\nE incorporar los cambios en upstream sin reescribir el histórico.\n\n### Merge vs Rebase\n\nCuándo conviene hacer un `rebase`?\n\n- Necesitamos re-aplicar nuestros cambios sobre los cambios entrantes (upstream)\n- El historial se mantiene más limpio\n- Muchas veces es más sencillo no hacer `merge` de los cambios en upstream\n- Los changesets más pequeños son más sencillos de visualizar\n\nConviene hacer un `merge --ff-only` cuando estamos lidiando con cambios permanentes que aplican a largo plazo.\n\n\n### Replicar cambios upstream en branches locales\n\nCon la ref al día de lo que sucede upstream, cambiamos a nuestro `topic-branch` para actualizarlo con los cambios que sucedieron en `develop`:\n\n    git checkout feature-a\n    git rebase -i develop\n\nCon los cambios de `develop` replicados en nuestro `topic-branch` podemos continuar trabajando.\n\n### Merge de branches locales\n\nUna vez completa la funcionalidad, volvemos a develop\n\n    git checkout develop\n    git merge feature-a\n\nComo alternativa al rebase de develop (punto anterior), podemos hacer directamente un rebase de `feature-a` en `develop`:\n\n    git checkout develop\n    git rebase -i feature-a\n\nY subimos los cambios al branch `develop` en upstream de la siguiente manera:\n\n    git push origin develop\n\n### Eliminar branches locales\n\nFinalmente, eliminamos el `topic-branch` que generamos localmente:\n\n    git checkout -d topic-branch\n\nAlternativamente, podemos utilizar el flag `-D` para eliminar un branch que no fue mergeado íntegramente:\n\n    git checkout -D topic-branch\n\n\n### Eliminar branches remotos\n\nPara eliminar un branch remoto compartido en el repo upstream, basta con ejecutar lo siguiente:\n\n    git push origin :nombre_del_branch_eliminar\n\n**CUIDADO** con los branches públicos compartidos que aún no han sido mergeados en `develop`.\n\n\n### Crear nuevos branches remotos\n\nMuchas veces, interesa crear y compartir nuevos branches con el resto del equipo.\n\nDe la siguiente manera, empujamos nuestro branch llamado `local-branch` a un remoto, bajo el nombre `remote-branch`:\n\n    git push -u origin local_branch:remote_branch\n\n### Conectar branches upstream\n\nPara crear y conectar un branch local con uno existente upstream, basta con ejecutar la siguiente línea:\n\n    git checkout -b test origin/test\n\nEsto crea y conecta el branch `test` con el remoto existente en `origin/test`\n\n### Hotfixes\n\nAplicamos el hotfix a partir de un branch `hotfix` que deriva de `master`:\n\n    git checkout -b hotfix\n    # implementar hotfix\n    git checkout master\n    git merge hotfix\n\nUna vez implementado y probado el cambio en producción,  necesitamos replicar los cambios en `develop`.\n\nPara ello, revisamos el histórico para obtener el id del commit que vamos a replicar:\n\n    git checkout master\n    git pull --ff-only\n    git log --color --graph --pretty --abbrev-commit\n\nEsto nos proporciona el siguiente tree:\n\n    * 7a9b386 gfestari: Add ST git packages - (2 days ago)\n    * 592198d gfestari: Add warnings - (2 days ago)\n\nNos interesa realizar un backport de `592198d` en `develop`. Para esto vamos a ejecutar un `cherry-pick`\nsobre el commit:\n\n    git checkout develop\n    git cherry-pick 592198d\n\nDe esta manera, git re-aplica los mismos cambios sobre `develop`, sin forzar merges o integraciones innecesarias.\n\n## SublimeText\n\nConfiguración de SublimeText 3 para utilizar desde la línea de comando y como `$EDITOR` por defecto del sistema.\n\n### Command-line tools\n\nEsto permite utilizar el comando `subl` desde el terminal para invocar a SublimeText.\n\nGenerar el siguiente enlace simbólico desde un terminal:\n\n    ln -s \"/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl\"\n\n\n### SublimeText como editor por defecto\n\nEditar `~/.bashrc` - o `~/.zshrc` si utilizan zsh - y agregar la siguiente línea:\n\n    export EDITOR='subl -w'\n\nAlternativamente, pueden ejecutar la línea en el terminal para contar con una solución *temporal*.\n\n### Plugins\n\nSi están utilizando [**Package Control**][3] con ST, se recomiendan los siguientes plugins:\n\n* [GitGutter][4]\n* [Git][5]\n\n## Homework\n\n![branches](homework.png)\n\nGenerar un histórico lineal en el [repo de ejemplo][6] de @vierja para ello, deberían:\n\n* Hacer un **[fork del repo][7]**\n* Corregir el histórico para lograr un grafo lineal (utilizar `rebase`, `merge` y `commit` según sea necesario)\n* Una vez que cuenten con el grafo lineal, **[hacer un pull request][8]** para proponer una respuesta al problema\n\n## Resources\n\n* [Pro-git][9] (libro)\n* [Git blog][10]\n* [Git cheatsheet][11]\n* [Git - the simple guide][12]\n* [Merge or Rebase][13]\n\n[1]: http://brew.sh\n[2]: https://github.com/gfestari/dotfiles/blob/master/prefs/gitconfig\n[3]: https://sublime.wbond.net/installation#st3\n[4]: https://sublime.wbond.net/packages/GitGutter\n[5]: https://sublime.wbond.net/packages/Git\n[6]: https://github.com/vierja/workshop.git\n[7]: https://help.github.com/articles/fork-a-repo\n[8]: https://help.github.com/articles/using-pull-requests#initiating-the-pull-request\n[9]: http://git-scm.com/book\n[10]: http://git-scm.com/blog\n[11]: http://www.ndpsoftware.com/git-cheatsheet.html\n[12]: http://rogerdudler.github.io/git-guide/\n[13]: http://blog.sourcetreeapp.com/2012/08/21/merge-or-rebase/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcilindrox%2Fworkshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcilindrox%2Fworkshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcilindrox%2Fworkshop/lists"}