1 (edited by scorpio810 2022-02-05 14:44:02)

Topic: GIT update only one folder

Salut,

on est en train de remettre sur pied le viewer online et convertisseur elmt/SVG avec PHP 7 de Xavier.
Autant c'étais simple avec Subversion de créer un dépôt contenant un seul dossier et le mettre à jour avec svn up, autant avec GIT ça se gâte ...
http://www.setweb.fr/QELEC/showcategory.php?cat=

~/qet/qelectrotech.org-web/htdocs/elements$ git clone --depth 1 --no-checkout --filter=blob:none git://git.tuxfamily.org/gitroot/qet/qet.git  collection_officielle/
Cloning into 'collection_officielle'...
warning: filtering not recognized by server, ignoring
remote: Counting objects: 11455, done.
remote: Compressing objects: 100% (9380/9380), done.
remote: Total 11455 (delta 5343), reused 4051 (delta 2012)
Receiving objects: 100% (11455/11455), 14.92 MiB | 492.00 KiB/s, done.
Resolving deltas: 100% (5343/5343), done.

~/qet/qelectrotech.org-web/htdocs/elements/collection_officielle$ git checkout master -- elements/

Le script cron :

#!/bin/bash
# Config
target_directory="/home/qet/qelectrotech.org-web/htdocs/elements/collection_officielle/"
cd ${target_directory}
# Action
git checkout master --force -- elements/  1> /dev/null
exit $?

Ou:

git clone --depth 1 --no-checkout --filter=blob:none git://git.tuxfamily.org/gitroot/qet/qet.git  collection_officielle/
git config core.sparsecheckout true
echo elements/ > .git/info/sparse-checkout
git read-tree -m -u HEAD
git checkout master 
git pull

Si vous avez de meilleures solutions, je suis preneur. ;)

Re: GIT update only one folder

Hello,

Plusieurs approches :
L'approche de base est effectivement d'utiliser git sparse-checkout, qui a justement été introduit pour ce cas de figure (qui doit bien être la seule régression lors du passage de SVN à Git).

Une deuxième approche consiste à bouger les éléments dans leur propre repo Git, et à déclarer ce nouveau repo comme submodule du repo de l'application.
Inconvénient : impact sur le workflow des développeurs, packageurs et beta-testeurs.
Avantage : approche plus clean / plus pro -- bon, c'est un peu subjectif, j'en conviens.

Une troisième approche consiste à penser "cache" : de mémoire, le dépôt d'éléments a un cache pour ne pas se retaper la conversion QET->SVG à chaque fois. Il serait donc possible d'employer une machine tierce pour générer directement ce cache (SVG+meta) et le pousser régulièrement chez TuxFamily. Il n'y aurait alors que la partie "upload" du dépôt qui convertirait des éléments QET en SVG, le reste serait statique.
Inconvénient : implique d'avoir une machine supplémentaire capable de convertir un QET en SVG.
Avantage : la machine supplémentaire ne serait pas cantonnée à PHP, elle pourrait refiler le rendu SVG à un utilitaire C++/Qt lié à QET.

3 (edited by scorpio810 2022-02-06 13:34:19)

Re: GIT update only one folder

Salut Xavier et merci pour ces différentes approches.

Un submodule pour la collection officielle était déjà en discussion au sein de l'équipe, séparer le code des éléments, afin d'avoir un historique plus clean sur l'essentiel c-a-d la partie code.

Pour l'instant je vais me contenter d'utiliser git sparse-checkout qui semble faire le boulot.

J'ai vu un autre outil https://github.com/HR/github-clone qui aurait pu faire le job, mais vu que déjà on fait un sync du GIT de TF vers Github pour le miroir, cela n'aurai aucun sens de refaire le chemin inverse juste pour un dossier .. Apres l'installer sur la plateforme TF, humm ... pas sur que les admins soient d'accord, donc on revient avec rsync machine locale vers le serveur  ...

4 (edited by scorpio810 2022-02-07 17:38:41)

Re: GIT update only one folder

VHFFS Cron /home/qet/update_official_collection.sh

Exit value: 0


--- Environment ---

HOME=/home
LOGNAME=@dm→øþþ@æ«€¶ŧ←↓@ßðđł»¢“”n´· ̣n
PATH=/usr/bin:/bin
PWD=/home


--- Stdout and stderr output ---

warning: filtering not recognized by server, ignoring
From git://git.tuxfamily.org/gitroot/qet/qet
   72b7bc2..04d4788  master     -> origin/master
Updating 72b7bc2..04d4788
Fast-forward
.../10_engines/dahlander_motor.elmt                | 58 ++++++++++++++++++++++
.../elementscollectionwidget.cpp                   | 11 +++-
.../ElementsCollection/elementscollectionwidget.h  |  5 +-
3 files changed, 72 insertions(+), 2 deletions(-)
create mode 100644 elements/10_electric/10_allpole/391_consumers_actuators/10_engines/dahlander_motor.elmt

Ça fonctionne je rajouterais un petit "1> /dev/null"  plus tard sur la commande. :-p