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:
- Inizia da un'implementazione del codice di base (passaggio 0)
- Compilazione, benchmark, trama
- Modifica il parametro X da 110 a 100 in main.c (Passaggio 1)
- Compilazione, benchmark, trama
- Modifica il parametro Y da 10 a 15 in main.c (Passaggio 2)
- 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?