Differences between revisions 22 and 23
Revision 22 as of 2017-01-30 09:56:22
Size: 7889
Editor: risca
Comment:
Revision 23 as of 2019-05-03 01:33:52
Size: 8459
Editor: risca
Comment:
Deletions are marked like this. Additions are marked like this.
Line 146: Line 146:
=== File not annexed ===
To check that all files are annexed:
{{{
find . -path './.git' -prune -o -type f -print0 | while IFS= read -r -d $'\0' filepath; do git-annex list "${filepath}" | grep -E '^[xX_]{2,}' > /dev/null; if [ $? -ne 0 ]; then echo "${filepath}"; fi; done
}}}

To check also that every file that is not unlocked is annexed:
{{{
find . -path './.git' -prune -o -type f,l -print0 | while IFS= read -r -d $'\0' filepath; do git-annex list "${filepath}" | grep -E '^[xX_]{2,}' > /dev/null; if [ $? -ne 0 ]; then echo "${filepath}"; fi; done
}}}

Configurazione

Tramite git annex vicfg posso sempre modificare manualmente ogni possibile impostazione!

Repository centrale

Documentazione: repo centrale partendo da zero, Repo centrale tramite clone (problemi a seguire le istruzioni di quest'ultimo).

L'idea è di creare un repository centrale accessibile da ogni macchina via ssh, ecco un riassunto delle operazioni da fare:

  1. creare il repository principale sul server in modalità --bare1 (essenziale)

    • mkdir myrepo
      cd myrepo
      git init --bare
      git annex init origin
  2. copio il repo sul client desiderato
    • git clone ssh://myserver//my/remote/path
      cd path
      git annex init "my new annex"

Posso clonare di nuovo su tutte le macchine che voglio!

Comportamento

Esistono dei comportamenti predefiniti2 personalizzabili ulteriormente, ad esempio:

  • backup: tiene una copia di tutto
  • client: tiene tutto, tranne se non è già presente in un backup o archivio
  • transfer: mantiene i dati fino a quando almeno il numero minimo di client non ha una copia
  • manual: fai tutto tu (ad esempio se hai proprio poco spazio o file proprio tanto ingombranti...)

...

Per impostare il gruppo o la policy:

git annex wanted $repo standard
git annex group $repo manual

Per interrogare la policy semplicemente omettere la regola: git annex [wanted|group] $repo

Regole

Ogni repository è etichettabile in un gruppo. Posso quindi usare per i trasferimenti le policy di un gruppo applicando filtri su di esso (ad esempio devo avere almeno x copie del file sul gruppo, etc).

Ogni repository può inoltre avere assegnate delle preferenze. Queste possono essere le regole standard, oppure posso assegnare parametri diversi via groupwanted, oppure regole tutte sue (wanted).

git annex wanted . standard   <= assegna al local le regole base)

Posso inoltre lavorare direttamente sul file di configurazione via git annex vicfg.

Gestione remotes

Analisi situazione

git annex map --fast

Per dettagli.

Eliminare remote

git annex drop . --from cloud
git annex forget --drop-dead

Backups

git annex numcopies 2
echo "*.ogg annex.numcopies=1" >> .gitattributes
echo "*.flac annex.numcopies=3" >> .gitattributes
echo "* annex.numcopies=3" > important_stuff/.gitattributes

Per info: branchable: backups

Affidabilità del repo

Il repositoty può avere i seguenti livelli di affidabilità (questo condiziona il conteggio delle copie di backup minime):

  • semitrusted (default)
  • untrusted: non rientra nel numero minimo di copie
  • trusted: ritiene il file presente anche se non può momentaneamente verificare
  • dead: esclude da tutto

Direct mode

Per accedere a tale modalità: git annex (in)direct

Vi è il rischio di perdere file causa errori (consigliato git annex untrust .) e non è possibile utilizzare alcuni comandi git.

Se possibile si consiglia di usare invece git annex unlock per modificare i file in locale.

N.B.: in direct mode non sono preservare le versioni precedente, ciò avviene invece in modalità indirect.

Utilizzo

Si lavora sempre su due livelli diversi:

  • la logica di archiviazione (git): dove sono i file, come sono organizzati...
  • l'ubicazione dei file (git-annex): dove risiedono fisicamente i file...

Si possono usare quasi tutti i comandi di git, più qualche comando speciale di annex.

Sincronizzazione

  • git annex sync: sincronizza logica

  • git annex sync --content [--(no)pull|--(no)push]]: sincronizza file (vengono copiati tutti!) [solo in un verso]]

Operazioni sui file

  • git annex add .: aggiunge il file al repository

  • git rm myfile: rimuove l'indicizzazione del file, il file rimane però in memoria ed è identificabile tramite git annex unused

Trasferimento file

  • git annex whereis: riporta la posizione dei file

  • git annex get myfile: scarica myfile

  • git annex drop myfile: rimuove myfile facendo attenzione a preservare il numero minimo di copie (--force per ignorare blocchi)

  • git annex get --include='*.mp3' --and -'(' --not --largerthan=100mb -')'

  • Per spostare tra un repo e l'altro:
    • git annex move $myfile --to myrepo

    • git annex move $myfile --from myrepo

  • Per copiare da un repo all'altro:
    • git annex copy $myfile --to myrepo

    • git annex copy $myfile --from myrepo

Trasferimento automagico

Per anticipare quali siano i prossimi file3

  • a essere cancellati: git annex find --want-drop --in .

  • a essere scaricati: git annex find --want-get --not --in .

Quindi posso eseguire con git annex get/drop --auto

Spostare e rinominare

Come si fa con git4:

git mv big_file my_cool_big_file
git commit -m moved

I symlink saranno broken fino al momento del commit.

Se però il repository è in direct mode allora semplicemente spostare il file e risincronizzare.

Ignorare file

https://help.github.com/articles/ignoring-files/

File inutilizzati

Da branchable.com:

git annex unused

E quindi per eliminare:

git annex dropunused 1

Ricerca e analisi

Lista di match.

Esempi:

git annex find --lackingcopies 1
git annex find --lackingcopies 1 --not --in .

File not annexed

To check that all files are annexed:

find . -path './.git' -prune -o -type f -print0 | while IFS= read -r -d $'\0' filepath; do git-annex list "${filepath}" | grep -E '^[xX_]{2,}' > /dev/null; if [ $? -ne 0 ]; then echo "${filepath}"; fi; done

To check also that every file that is not unlocked is annexed:

find . -path './.git' -prune -o -type f,l -print0 | while IFS= read -r -d $'\0' filepath; do git-annex list "${filepath}" | grep -E '^[xX_]{2,}' > /dev/null; if [ $? -ne 0 ]; then echo "${filepath}"; fi; done

Hacks

Rimuovere da git file cancellati manualmente

git ls-files --deleted -z | xargs -0 git rm

Assistant

git annex assistan --autostart    <= for daemon
git annex webapp                  <= webapp and daemon

Debian packaging

Manca ancora il bash completion, seppure già presente su github.

Windows package

Status: beta.

Informazioni:

Sitografia

Note

MyWiki: GitAnnex (last edited 2019-05-03 01:33:52 by risca)