Regenerar el archivo de configuración .git/config de un repositorio git

index | about | archive | charlas | docs | links

dot | git | img | plt | tty | uml

git-bash-utils-git-repos-config-git-repos-sync.png

ouch!

Estas trabajando en una migración de mas de 200 repositorios git y en las pruebas de clonar los 200 repos, y agregar la nueva URL de la nueva instancia de GitLab 1 por error gracias a un bonito oneliner de bash terminás eliminando los .git/config de todos los repos! :(

regenerar .git-config

Una posible solución sería volver a clonar los 200 repos, pero en busca de una alternativa, decidí regenerar los 200 archivos de configuración de cada repo para volver al estado previo usando bash! :)

un repo a la vez

Para comenzar, hay algunas preferencias básicas que debe tener un .git/config:


[core]
	bare = 0
	filemode = true
	logallrefupdates = 0
	repositoryformatversion = 0

Y luego es necesario agregar el remote origin con la URL al repo, por ejemplo:


[remote "origin"]
  url = https://gitlab.com/osiux/git-bash-utils
	fetch = +refs/heads/*:refs/remotes/origin/*

Entonces, realizar esto manualmente sería muy tedioso, por ello escribí el script git-config-set que se ocupa de la recrear configuración básica y establecer la URL del remote origin.

todos los repos todos!

Y para no tener que realizar esta operación de a un repositorio manualmente, escribí git-repos-config que lee el listado de los 200 repos desde el archivo .git-repos y se ocupa de regenerar todos los archivos de configuración de manera automatizada.

sincronizar branches

Dependiendo del repo es necesario especificar la configuración de cada branch, por ejemplo:


[branch "master"]
	remote = origin
	rebase = true
	merge = refs/heads/master
[branch "develop"]
	remote = origin
	rebase = true
	merge = refs/heads/develop
[gitflow "branch.release/0.1.0"]
	base = develop
[branch "release/0.1.0"]
	remote = origin
	rebase = true
	merge = refs/heads/release/0.1.0

Para esto, es necesario obtener todos los branchs remotos, crear las copias locales y sincronizarlos, para esto a nivel repo lo resolví con git-branch-sync y para realizarlo en todos los repositorios de manera automatizada generé el script git-repos-sync

git-bash-utils

Todos los scripts utilizados están disponibles en el repo git-bash-utils 2

git-repos-config

Copio ejemplo de configuración de 39 repos para que no sea tan extenso:


GIT_HOST=git.g.coop.ar GIT_PROTO=https GIT_GROUP=osiux git-repos-config

GENERATE .git/config IN /home/osiris/git/osiux/ansible_role_apt_pin
GENERATE .git/config IN /home/osiris/git/osiux/ansible_role_freeipa_sssd_tools
GENERATE .git/config IN /home/osiris/git/osiux/ansible_role_hp_linux_tools
GENERATE .git/config IN /home/osiris/git/osiux/ansible_role_tower_cli
GENERATE .git/config IN /home/osiris/git/osiux/ansible_tools
GENERATE .git/config IN /home/osiris/git/osiux/aps2dot
GENERATE .git/config IN /home/osiris/git/osiux/charlas
GENERATE .git/config IN /home/osiris/git/osiux/direplos
GENERATE .git/config IN /home/osiris/git/osiux/freeipa-sssd-tools
GENERATE .git/config IN /home/osiris/git/osiux/frontweb
GENERATE .git/config IN /home/osiris/git/osiux/gilabash
GENERATE .git/config IN /home/osiris/git/osiux/git-bash-utils
GENERATE .git/config IN /home/osiris/git/osiux/gitlab
GENERATE .git/config IN /home/osiris/git/osiux/gitlab-bash-utils
GENERATE .git/config IN /home/osiris/git/osiux/hacktoon-floss-vinyl
GENERATE .git/config IN /home/osiris/git/osiux/libretA7
GENERATE .git/config IN /home/osiris/git/osiux/links-bash-utils
GENERATE .git/config IN /home/osiris/git/osiux/log-bash-utils
GENERATE .git/config IN /home/osiris/git/osiux/mails2dot
GENERATE .git/config IN /home/osiris/git/osiux/media-bash-utils
GENERATE .git/config IN /home/osiris/git/osiux/minimal-bash-prompt
GENERATE .git/config IN /home/osiris/git/osiux/multiboot
GENERATE .git/config IN /home/osiris/git/osiux/multi-ssh-config
GENERATE .git/config IN /home/osiris/git/osiux/openscad-reprap
GENERATE .git/config IN /home/osiris/git/osiux/org-bash-utils
GENERATE .git/config IN /home/osiris/git/osiux/org-mode-doc-es
GENERATE .git/config IN /home/osiris/git/osiux/osiux.com
GENERATE .git/config IN /home/osiris/git/osiux/osiux.gitlab.io
GENERATE .git/config IN /home/osiris/git/osiux/pass-utils
GENERATE .git/config IN /home/osiris/git/osiux/pcap2dot
GENERATE .git/config IN /home/osiris/git/osiux/pcap2uml
GENERATE .git/config IN /home/osiris/git/osiux/plan-b
GENERATE .git/config IN /home/osiris/git/osiux/redmine-bash-utils
GENERATE .git/config IN /home/osiris/git/osiux/sugar-graphviz
GENERATE .git/config IN /home/osiris/git/osiux/test
GENERATE .git/config IN /home/osiris/git/osiux/timeline2dot
GENERATE .git/config IN /home/osiris/git/osiux/traducciones
GENERATE .git/config IN /home/osiris/git/osiux/txt-bash-jrnl
GENERATE .git/config IN /home/osiris/git/osiux/unavi

git-repos-sync

Copio ejemplo de sincronizar todos los branchs de 2 repos diferentes:


git-repos-sync

SYNCHRONIZE ALL BRANCHS IN /home/osiris/git/osiux/ansible_role_apt_pin
Cambiado a rama 'develop'
Tu rama está actualizada con 'origin/develop'.
rama 'develop' configurada para rastrear 'origin/develop' por rebase.
Ya está actualizado.
Cambiado a rama 'master'
Tu rama está actualizada con 'origin/master'.
rama 'master' configurada para rastrear 'origin/master' por rebase.
Ya está actualizado.
SYNCHRONIZE ALL BRANCHS IN /home/osiris/git/osiux/ansible_role_freeipa_sssd_tools
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 2), reused 0 (delta 0), pack-reused 0
Desempaquetando objetos: 100% (4/4), 528 bytes | 66.00 KiB/s, listo.
Desde gitlab.com:osiux/ansible_role_freeipa_sssd_tools
   cfd3fcd..5c9a7e9  feature/ipa-sss-log-day -> origin/feature/ipa-sss-log-day
Cambiado a rama 'develop'
Tu rama está actualizada con 'origin/develop'.
rama 'develop' configurada para rastrear 'origin/develop' por rebase.
Ya está actualizado.
Cambiado a rama 'feature/cron-syn-to-html'
Tu rama está actualizada con 'origin/feature/cron-syn-to-html'.
rama 'feature/cron-syn-to-html' configurada para rastrear 'origin/feature/cron-syn-to-html' por rebase.
Ya está actualizado.
Cambiado a rama 'feature/ipa-api-syn'
Tu rama está actualizada con 'origin/feature/ipa-api-syn'.
rama 'feature/ipa-api-syn' configurada para rastrear 'origin/feature/ipa-api-syn' por rebase.
Ya está actualizado.
Cambiado a rama 'feature/ipa-sss-log-day'
Tu rama está detrás de 'origin/feature/ipa-sss-log-day' por 1 commit, y puede ser avanzada rápido.
  (usa "git pull" para actualizar tu rama local)
rama 'feature/ipa-sss-log-day' configurada para rastrear 'origin/feature/ipa-sss-log-day' por rebase.
Actualizando cfd3fcd..5c9a7e9
Fast-forward
 tests/cron.yml | 13 +++++++++++++
 1 file changed, 13 insertions(+)
 create mode 100644 tests/cron.yml
Cambiado a rama 'feature/ipa-sssd-tools-backup'
Tu rama está actualizada con 'origin/feature/ipa-sssd-tools-backup'.
rama 'feature/ipa-sssd-tools-backup' configurada para rastrear 'origin/feature/ipa-sssd-tools-backup' por rebase.
Ya está actualizado.
Cambiado a rama 'feature/persistent-ramdisk'
Tu rama está actualizada con 'origin/feature/persistent-ramdisk'.
rama 'feature/persistent-ramdisk' configurada para rastrear 'origin/feature/persistent-ramdisk' por rebase.
Ya está actualizado.
Cambiado a rama 'feature/ramdisk-fstab-sssd-db'
Tu rama está actualizada con 'origin/feature/ramdisk-fstab-sssd-db'.
rama 'feature/ramdisk-fstab-sssd-db' configurada para rastrear 'origin/feature/ramdisk-fstab-sssd-db' por rebase.
Ya está actualizado.
Cambiado a rama 'feature/yum-http-proxy'
Tu rama está actualizada con 'origin/feature/yum-http-proxy'.
rama 'feature/yum-http-proxy' configurada para rastrear 'origin/feature/yum-http-proxy' por rebase.
Ya está actualizado.
Cambiado a rama 'hotfix/switch-mirrorlist2baseurl'
Tu rama está actualizada con 'origin/hotfix/switch-mirrorlist2baseurl'.
rama 'hotfix/switch-mirrorlist2baseurl' configurada para rastrear 'origin/hotfix/switch-mirrorlist2baseurl' por rebase.
Ya está actualizado.
Cambiado a rama 'master'
Tu rama está actualizada con 'origin/master'.
rama 'master' configurada para rastrear 'origin/master' por rebase.
Ya está actualizado.
Cambiado a rama 'release/0.1.0'
Tu rama está actualizada con 'origin/release/0.1.0'.
rama 'release/0.1.0' configurada para rastrear 'origin/release/0.1.0' por rebase.
Ya está actualizado.
Cambiado a rama 'release/0.5.0'
Tu rama está actualizada con 'origin/release/0.5.0'.
rama 'release/0.5.0' configurada para rastrear 'origin/release/0.5.0' por rebase.
Ya está actualizado.
...

Tal vez te interese leer

ChangeLog

  • 2023-05-18 12:30 corregir formato ejemplo git-repos-sync en Regenerar el archivo de configuración .git/config de un repositorio git
  • 2023-05-18 12:22 corregir formato ejemplo git-repos-sync en Regenerar el archivo de configuración .git/config de un repositorio git
  • 2023-05-18 09:38 agregar Regenerar el archivo de configuración .git/config de un repositorio git

Notas al pie de página: