#+LINK_HOME: index.html
#+INCLUDE: header.org
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 #
- Cómo configurar tokens de acceso personal a los repositorios de Git usando HTTPS
- generar sección
git
mediantegit-repos2org
- Sincronizar Repositorios git con git-repos
ChangeLog #
2023-05-18 12:30
corregir formato ejemplo git-repos-sync en Regenerar el archivo de configuración.git/config
de un repositorio git2023-05-18 12:22
corregir formato ejemplo git-repos-sync en Regenerar el archivo de configuración.git/config
de un repositorio git2023-05-18 09:38
agregar Regenerar el archivo de configuración.git/config
de un repositorio git