Git clone mirror

Bonjour Debian.
FreeOrion ne veut pas quitter Github (les méchants).
Je veux donc faire un miroir sur Codeberg afin de pouvoir contribuer sans me salir les mains (enfin les octets).
Codeberg n’offre pas à ma connaissance d’outils pour ça.

J’ai donc fait un git clone --mirror https://github.com/freeorion/freeorion.git sur mon PC puis un git remote add bergFO LienRag/freeorion: FreeOrion clone of github code - Codeberg.org
et un git push -u bergFO master

J’ai ensuite été surpris de ne pas trouver les fichiers de code dans mon répertoire git quand j’ai voulu commencer à faire des modifications, mais apparemment c’est normal et un git clone --mirror ne récupère pas le code lui-même, seulement la structure du répertoire (oui, je suis un noob en git).

On m’a expliqué qu’en fait je n’aurais pas dû faire un git clone --mirror, mais juste un git clone
Pourtant quand je fouille un peu sur le net (par exemple ici https://medium.com/@paul.pietzko/mirroring-a-github-repository-keep-your-fork-updated-automatically-3dcc199b647c ) de ce que je comprends c’est bien un git clone --mirror qui est la bonne solution pour ce que je veux faire.

Mais aucun des sites que j’ai trouvé n’explique comment accéder aux fichiers de code une fois qu’on a fait le mirror…

Si j’ai bien compris on ne peut pas travailler sur le mirror (par nature) donc il faut faire un git worktree add bidule pour avoir un arbre de travail où on peut modifier les fichiers, mais comment on récupère les fichiers pour pouvoir travailler dessus ?

Également est-ce que j’aurais dû faire le git push -u bergFO j’aurais dû le faire également avec l’option --mirror ?
C’est trop tard ou bien je peux le faire maintenant ?

Ça semble normal que tu ne voies pas les fichiers, car l’option --mirror crée ton image avec le mode « bare », qui est utilisé pour stocker le repository sur un serveur, là où personne ne développe.

Ceci étant dit, je ne suis pas trop sûr de comprendre ce que tu souhaites faire… En mettant un repository alternatif sur un autre serveur, tu te retrouves un peu comme si tu avais fait un fork amélioré, càd qu’il n’y a aucun lien direct entre le repository Codeberg et celui sur Github. Le seul lien reste indirect, et passe par ton PC, ce qui fait que quand tu voudras envoyer ton travail sur Github, ce sera depuis ton PC, je ne sais pas si c’est ça que tu appelles « te salir les mains », et je ne sais pas ton objectif initial est atteint. Tu récupéreras les changements de Github sur ton PC avant de pouvoir le charger sur Codeberg.

La solution expliquée dans le lien que tu donnes ne permet pas de contribuer au développement sur ton PC, c’est juste pour avoir un genre de sauvegarde du repository initial, qu’on puisse facilement rafraîchir au fur et à mesure que le projet initial évolue.

Pour réparer le tir, voici ce que je pense qu’il faudrait faire :

  • Ajouter un remote dans Codeberg qui pointe vers Github, afin de pouvoir mettre à jour directement de Github vers Codeberg (et inversement) sans passer par ton PC
  • Virer le repository de ton PC, qui aura servi seulement pour la transition
  • Recréer un repository sur ton PC à partir d’un clone (sans --mirror :wink:) de Codeberg.

Ta chaîne sera donc Github (bare) <-> Codeberg (bare) <-> PC local. Je pense qu’il faudrait qu’un expert git confirme que ma solution est faisable, je n’ai jamais fait ça.

1 J'aime

Comment on fait ça ?
Codeberg me dit « Pull mirrors have been disabled by your site administrator. » et quand je regarde la doc de Forgejo ils disent « Once the repository is created, you can’t convert it into a pull mirror anymore. ».
Et pour créer un miroir depuis github, il faut passer par leur procédure de migration, qui échoue régulièrement quand je la tente.
Il faut dire qu’ils demandent un access token du dépôt Github, et que je n’en ai pas (ne gérant pas le dépôt Github).

[quote=« Thierz, post:2, topic:92304 »] Tu récupéreras les changements de Github sur ton PC avant de pouvoir le charger sur Codeberg.
[/quote]

Oui c’est ce que je veux faire, puisque je ne trouve pas de solution directe (un pull mirroring serait plus simple, mais ça marche pas).

Je ne veux pas envoyer mon travail sur Github justement, mais sur Codeberg.
Par contre il faut que le dépôt Codeberg (branche principale, pas ma branche à moi) soit à jour, sinon mon code risque de ne pas être compatible avec la branche en production.

Oui c’est ce que l’on m’a expliqué.
Mais donc comment je fais pour avoir les fichiers ?
On m’a dit d’ajouter un worktree (j’ai à moitié compris ce que ça veut dire), mais une fois ajouté le worktree, comment je fais pour avoir les fichiers ?

Excuse-moi mais ceci est en contradiction avec ce que tu disais plus haut :

Si tu veux contribuer, à un moment il faut tu puisses remonter ton code sur Github. Si l’équipe ne veut pas migrer sur Codeberg, il y a peu de chances qu’ils aillent voir ton repository sur Codeberg pour voir ce qui serait intéressant à fusionner chez eux : en faisant ainsi, tu leur ajoute une complexité qui va probablement à l’encontre de la facilité qu’ils ont sur Github à fusionner le travail contribué par la communauté.

Je vais te dire le fond de ma pensée : si tu veux vraiment contribuer (càd écrire du code qui sera repris par le projet initial), utilise les outils qu’ils ont mis en place pour leur organisation, quitte à te salir les doigts, et ne leur ajoute pas une charge de travail pour aller se sourcer dans tes outils rajoutés à côté. Surtout que, pour mettre en place ce que tu veux faire, je soupçonne que tu vas y passer un certain temps, et ce serait dommage que tu aies investi ce temps pour qu’au final personne ne vienne voir ton code sur Codeberg. Tu ne penses pas ?

Si si, c’est le modus vivendi que l’on a trouvé.
Je pousse mon code sur Codeberg, et une fois qu’il est propre et prêt à être mergé ils s’occupent de le récupérer.
(en tous cas y’a deux personnes dans l’équipe qui sont d’accord pour faire ça, et le lead dev n’y voit pas d’inconvénient)

Ah d’accord… Alors la préco ce serait de garder ton repository mirror sur ton PC, uniquement pour maintenir à jour Codeberg (Github → PC → Codeberg), et un second repository sur ton PC pour développer (PC → Codeberg). Pour ce second repository local, cette fois-ci fais juste un git clone de Codeberg.

1 J'aime

Donc je fais un git worktree add bidule, et après je fais un git clone simple dans l’arbre de travail bidule ?

Et pour le déôt codeberg, je refais un push avec l’option --mirror ou bien c’est pas la peine/ce n’est plus possible ?

Quand tu feras une synchro Github → PC → Codeberg, pour synchroniser Codeberg avec l’avancement du développement de la communauté Github, tu utiliseras l’option --mirror comme expliqué dans ton lien ci-dessus.

Et quand tu feras un push sur Codeberg des développements de ton repository local de travail, un git push simple suffira.

Attention à bien gérer tes branches de dév comme communiqué par le projet Github, pour ne pas te taper des conflits quand tu push vers Codeberg.

1 J'aime

Heu, pour ça, je ne connais pas la commande worktree, je ne peux pas te dire. Tu veux faire cette commande où ?

Bonne question…

Dans le repository mirroré, j’imagine ?

Un simple git clone de ton repository Codeberg dans un nouveau dossier du PC fera l’affaire.

1 J'aime

Tu peux très bien travailler avec deux remote, il te suffit du coup de pull avant chaque travaille et push une fois fini sur Codeberg.

Je comprends pas par contre l’aversion pour Github (ça reste un outil et si c’est pour le côté il pourrait récupérer ton code faut voir la licence du projet surtout) …
Quant au gavage d’une IA c’est déjà le cas une fois le code mergé dans la branche main voir même par crawling sur le net.