2 votes

Utilisation de git bundle pour synchroniser les dépôts airgapped

Je rencontre un problème où je veux synchroniser 2 dépôts qui ne sont pas connectés via le réseau. J'ai utilisé git bundle pour synchroniser les deux, mais j'ai rencontré un problème.

Je crée le bundle git via :

git bundle create --since=<timestamp of lastBundle> --all <my_bundle_path>

<timestamp of lastBundle> a été choisi à partir du temps de livraison associé à la lastBundle étiquette. Cela me permet de ne regrouper que le delta et de récupérer tous les nouveaux commits dans toutes les branches.

Le cas limite est celui où ce scénario particulier se produit

master               2017-12-4 <dev who committed c2 finally gets around to pushing it to origin>
|\
| \
|  c3 <lastBundle>   2017-12-3 <commit that was synched>
|   |
c2  |                2017-12-2 <commit from dev, timestamped to when s/he committed it to their local repo>
 \  |
  \ |
   c1                2017-12-1 <base commit>

lastBundle a été synchronisé, et correspond à la référence la plus courante du repo airgapped, mais quelqu'un avait commis c2 plus tôt dans le temps que c3 dans leur propre copie locale du dépôt et n'ont pas poussé la référence vers l'origine immédiatement. Ainsi, la prochaine fois que je regrouperai chaque commit de lastBundle et le mettre sur un disque, le charger sur l'autre machine, il échoue à valider car c2 n'est pas dans le paquet, seulement sa fusion vers master.

J'ai regardé git merge-base pour voir si je peux trouver un ancêtre commun, et l'utiliser à la place. Bien que cela puisse faire l'affaire, je pense que j'aurais besoin d'un fichier lastBundle pour chaque branche pour que cela fonctionne, puisque cette situation peut se produire sur 0, 1 ou plusieurs branches en même temps. Cela semble non optimal.

Idéalement, je pense que je voudrais pouvoir faire un git bundle verify <mybundle> par rapport à un emplacement donné dans l'historique git, plutôt que par rapport à l'ensemble du dépôt. De cette façon, je pourrais vérifier qu'il échouera avant de le mettre sur le disque, et simplement changer la distance à laquelle je remonte pour les commits lors du regroupement. A moins qu'il n'y ait un autre moyen de faire ce que j'essaie de faire.

Des idées ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X