Come gestire gli esperimenti di codice destinati a rimanere permanentemente con git?

1

Ho un codice asm / C che implementa alcuni filtri immagine. L'obiettivo di questo progetto è la sperimentazione di diverse implementazioni, analisi comparativa, tracciamento e reporting dei dati per scrivere un articolo con approfondimenti rilevanti.

Quindi per esempio un flusso di lavoro di cui ho bisogno sarebbe:

  1. Inizia da un'implementazione del codice di base (passaggio 0)
  2. Compilazione, benchmark, trama
  3. Modifica il parametro X da 110 a 100 in main.c (Passaggio 1)
  4. Compilazione, benchmark, trama
  5. Modifica il parametro Y da 10 a 15 in main.c (Passaggio 2)
  6. Compilazione, benchmark, trama

Ma devo essere in grado di accedere ad ogni fase con un tag git / ramo / commit / qualcosa. In modo che io possa rieseguire il test su un PC diverso o apportare modifiche ad ogni passaggio. Per esempio, potrei decidere che cambiare X da 110 a 100 non fosse abbastanza, quindi cambio il passo 1 per cambiare X da 110 a 80 per il passo 1.

Ho pensato di utilizzare 1 ramo per ciascun esperimento con un tag per ogni passaggio, ad esempio con i tag step0-2 e branch in experiment1:

git checkout experiment1 #step0
compile, benchmark, plot
git checkout -b test step1
compile, benchmark, plot
git checkout -b test step2 #overwriting test?
compile, benchmark, plot
git branch -d test

Ma con questa soluzione non posso cambiare facilmente il passaggio 1, dovrei ricominciare dalla base e rifare tutto da capo, creando un nuovo ramo di esperimento (perché non dovrei commettere tra commit, giusto?).

Ho anche sentito che i rami di git non dovrebbero essere usati per cose che non si intende fondere. Sto complicando troppo le cose? C'è un modo più ovvio / semplice per gestirlo? La risposta non è git e dovrei usare qualche altro sistema?

    
posta Damian Pereira 02.10.2016 - 00:31
fonte

1 risposta

4

Non dovresti usare git per gestire questa complessità. Sarebbe un incubo, i rami divergerebbero fino a distanziarsi nel tempo. Saresti lasciato con frammenti di codice che avrebbero tutti bisogno di essere gestiti separatamente.

Una soluzione molto più flessibile sarebbe quella di rendere flessibili le diverse parti della base di codice. Ad esempio, se è necessario modificare i parametri di input, rendere i parametri configurabili sulla riga di comando. Ciò richiede un binario, ma puoi eseguire più test.

Se è necessario implementare algoritmi / funzioni separati, è possibile renderli configurabili. I puntatori di funzione in C sono un ottimo modo per farlo e questo può essere configurato anche dalla riga di comando.

    
risposta data 02.10.2016 - 00:50
fonte

Leggi altre domande sui tag