Tuesday, August 21, 2012

One git to rule them all ...

Noticed how apparently simple things tend to turn into giant mess if left unattended ? That seems to be the case with game art as well. Revision, recoveries, distributed development and project shifts have turned my 4 sprite files into a nightmare of name-collisioning fellows. Giiiit tooo the Rescuuue!

Petit rangement d'été grâce à Cyril qui maitrise mieux git que moi. A partir de tous les répertoires DATA (et des cartes-mémoire de mes DS), je voudrais avoir un endroit unique où il fait bon vivre pour les sprites et autres maps, où les duplicatas ne seraient plus un problème, pas plus que les redondances dans les noms.
Première chose: activer la syncrhonisation "git" sur un des répertoires 'DATA' d'une de mes machines.

cd DATA
git init
git add *.spr *.SPR
git commit -a
Bien. Maintenant, créer l'espace unique ... le paradis des sprites.
mkdir ../DATA.git ; cd ../DATA.git
git --bare init
cd - # goes back to DATA
git remote add origin /path/to/DATA.git/
git push origin master

Il sera désormais dénommé "master", hébergé sur la machine host. Depuis mon portable, je pourrai donc faire un "clone" de mon jeu de données pour y ajouter les fichiers détenus localement:
git clone host:/path/to/DATA.git/
cp ~/DS/*.spr
git add *.spr
git commit -a

Une fois le "git local" préparé, je synchronise la copie-maître avec git push, tout simplement. Le répertoire DATA d'origine peut aussi accepter les nouveaux-venus via git pull à condition d'avoir copié la section [branch "master"] du fichier .git/config

Reste à faire le ménage et à structurer ça par projet plutôt que par provenance ... sur une branche parallèle, sans aucun doute.

(à relire: https://www.jesuisundev.com/comprendre-git-en-7-minutes/ )
git log --pretty=oneline --graph --decorate --all --abbrev-committree view of "where am I"
git branch -ashow known branches

3 comments:

PypeBros said...

one http://techblog.zabuchy.net/2011/transfer-only-selected-file-types-with-rsync/ to find them and in the repository RsYNc them

PypeBros said...

rsync -av --include='*/' --include='*.png' --exclude='*' source/ destination/ --prune-empty-dirs

do not forget '*/' or it won't recurse into directories

PypeBros said...

okay ... I have git fetched the new stuff a colleague had pushed
then I git checkout remotes/origin/his-branch -b my-branch to get it without the "detached head state"

now he makes new changes and I git fetch again.
trying to redo the checkout tells me the branch is already there...

time to read more StackOverflow, I guess ...