[workaround] git - fare un merge con esclusioni

Configurazione e uso di IDE, editor, compilatori, in fase di programmazione.
korda
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1804
Iscrizione: giovedì 24 dicembre 2020, 15:58

[workaround] git - fare un merge con esclusioni

Messaggio da korda »

Ho due branch A e B.

Sul branch B ho una cartella C, con dei file, che non è presente sul branch A.

Vorrei fare un merge di B su A per unire tutte le modifiche/aggiunte/eliminazioni ad esclusione della cartella C e del suo contenuto (che voglio rimanga esclusivamente sul branch B).

Come potrei fare?
Ultima modifica di korda il giovedì 13 giugno 2024, 8:56, modificato 3 volte in totale.
Io non sono Bagheera né Akela, io non frequento la Rupe.
Io sono Kaa: faccio ballare le scimmie alle Tane Fredde.
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2924
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: git - fare un merge con esclusioni

Messaggio da DoctorStrange »

Imposti l'"head" del repository sul branch B, quello dove si trova la cartella che deve rimanere locale. Imposti correttamente il file "gitignore" specificando la corretta sintassi sia della directory che di tutto il suo contenuto annidato. A questo punto potrai fare il merge, e la cartella rimarrà sul branch B, il locale, mentre tutte le altre modifiche verranno mergiate. Non so dirti quale politica tu abbia impostato in caso di conflitti. Di solito i files in conflitto vengono messi in stash, e devono essere risolti manualmente. Finche non risolvi i conflitti e chiudi lo stash, il repository potrebbe rimanere in posizione "inconsistente". A questo punto avrai il codice mergiato correttamente, lo stash chiuso e l'head dovrebbe essere tornato sul branch A.
korda
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1804
Iscrizione: giovedì 24 dicembre 2020, 15:58

Re: git - fare un merge con esclusioni

Messaggio da korda »

DoctorStrange ha scritto:
mercoledì 5 giugno 2024, 16:11
Imposti l'"head" del repository sul branch B, quello dove si trova la cartella che deve rimanere locale. Imposti correttamente il file "gitignore" specificando la corretta sintassi sia della directory che di tutto il suo contenuto annidato. A questo punto potrai fare il merge, e la cartella rimarrà sul branch B, il locale, mentre tutte le altre modifiche verranno mergiate. Non so dirti quale politica tu abbia impostato in caso di conflitti. Di solito i files in conflitto vengono messi in stash, e devono essere risolti manualmente. Finche non risolvi i conflitti e chiudi lo stash, il repository potrebbe rimanere in posizione "inconsistente". A questo punto avrai il codice mergiato correttamente, lo stash chiuso e l'head dovrebbe essere tornato sul branch A.
Per ciò che riguarda l'head vado di checkout senza colpo ferire...

La questione è che poi, sui file della cartella C, vorrei fare commit esclusivamente per il branch B. Quindi dovrei ri-editare il gitignore ogni volta che dovrò fare un merge su A?

Lo scenario sarebbe che sul branch B vorrei fare script in sviluppo e testing da non portare sugli altri branch fintanto che non siano stabili e/o utili (a volte scrivo proof of concept, che poi alla fine non rilascerei ma che vorrei tenere come appunti). Talvolta necessito degli aggiornamenti dal branch A per proseguire lo sviluppo (magari dei bugfix minori che committo su A quando li trovo e risolvo in poche righe di codice).

Nota Bene: vorrei evitare di forkare qualcosa in divenire, ma mantenere tutto sotto lo stesso repo dedicando un branch a scopo "temporaneo/didattico/archivio". Non so se ho spiegato bene le mie intenzioni.
Io non sono Bagheera né Akela, io non frequento la Rupe.
Io sono Kaa: faccio ballare le scimmie alle Tane Fredde.
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2924
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: git - fare un merge con esclusioni

Messaggio da DoctorStrange »

Non mi è molto chiaro in che modo è configurata questa directory. Sembra che parte del suo contenuto debba rimanere locale, e parte tu lo vooglia committare sul solo branch B. Se avrai fatto il checkout del branch B, ogni commit di nuovo codice, rimarrà confinato al solo branch B. Fintanto che non farai, intenzionalmente, il merge su A, allora i due branch vivravnno vite indipendenti.
Per quanto riguarda la cartella C, ogni volta che aggiungerai un nuovo file annidato, dovrai di conseguenza, aggiornare anche il gitignore, in modo che da indicare se i nuovi contenuti debbano essere inclusi o meno nel commit sul branch B.
L'ideale sarebbe che tutto ciò che è taggato con "in divenire" o, per meglio dire, in testing, sia chiaramente annotato nel gitignore, in modo che non venga pubblicato su alcun branch, almeno fino al momento in cui non avrai completato almeno i collaudi di base. A quel punto, rimuoverai il record associato alla nuova feature dal gitignore, e questa verrà pubblicata sul branch B al commit seguente.
Considera comunque che i test, gli appunti, le note ed affini, in teoria, non dovrebbero entrare in alcun modo sul branch.
Dovrebbero rimanere confinati sull'host locale. Al limite compilerai, se proprio necessario un documento associato al progetto, e questo lo potrai poi allegare al pacchetto, ma non ha senso che la documentazione sia parte del repository del codice sorgente.
korda
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1804
Iscrizione: giovedì 24 dicembre 2020, 15:58

Re: git - fare un merge con esclusioni

Messaggio da korda »

Mettiamola così: si tratta del mio GitHub personale, in cui vorrei tenere un branch di codice stabile e pronto all'uso e un branch di sviluppo con dentro appunti e test da riciclare all'occorrenza (o se fossero utili come spunti di partenza per altre persone). Quindi, alla fine, da locale caricherei entrambi i branch (aventi scopi differenti)
Io non sono Bagheera né Akela, io non frequento la Rupe.
Io sono Kaa: faccio ballare le scimmie alle Tane Fredde.
Avatar utente
Rafbor
Prode Principiante
Messaggi: 145
Iscrizione: domenica 13 febbraio 2022, 18:22
Desktop: Xubuntu
Distribuzione: 22.04.3 LTS
Località: Francia

Re: git - fare un merge con esclusioni

Messaggio da Rafbor »

Questo è ciò che facevo in passato:
innanzitutto i rami A e B devono essere salvati localmente in 2 cartelle diverse. La sottocartella C è presente solo nella cartella B.
Tutti i file di B che si vogliono unire ad A, si copiano manualmente da B ad A, quindi si esegue il push nel ramo A.
Non è necessario modificare il gitignore, poiché il ramo A non conosce la cartella C.
korda
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1804
Iscrizione: giovedì 24 dicembre 2020, 15:58

Re: git - fare un merge con esclusioni

Messaggio da korda »

Rafbor ha scritto:
mercoledì 5 giugno 2024, 18:25
Questo è ciò che facevo in passato:
innanzitutto i rami A e B devono essere salvati localmente in 2 cartelle diverse. La sottocartella C è presente solo nella cartella B.
Tutti i file di B che si vogliono unire ad A, si copiano manualmente da B ad A, quindi si esegue il push nel ramo A.
Non è necessario modificare il gitignore, poiché il ramo A non conosce la cartella C.
Questo è quello che faccio esattamente io, quando decido di "eleggere" uno script del branch B e "promuoverlo" sul branch A.

Esempio pratico così ci intendiamo: questo è il mio repository su cui devo fare ciò.

Sul branch tempus c'è una cartella miscellaneous.
Lì ci sono script che, per un motivo o per l'altro, non vorrei portare dentro master ma vorrei che permanessero lì, fino a mia decisione diversa.

Ad esempio, alcuni script sono customizzazioni fatte su richiesta che non hanno a che vedere con lo scopo più di uso generico che vorrebbe avere il branch master.
Talvolta alcune di queste customizzazioni richiamano risorse generiche su cui, nel frattempo, sono stati apportati dei bugfix testati più estesamente sul branch unstable, che riverso periodicamente sul master una volta che i bugfix sono ben rodati su vari possibili scenari (aka immaginare tutte le possibili eccezioni un utente qualunque possa sollevare, causa un utilizzo da "pensiero laterale" dei miei script :D ).

Ecco qui il motivo reale del mio post iniziale, eliminando tutte le perifrasi ;)
Io non sono Bagheera né Akela, io non frequento la Rupe.
Io sono Kaa: faccio ballare le scimmie alle Tane Fredde.
korda
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1804
Iscrizione: giovedì 24 dicembre 2020, 15:58

Re: git - fare un merge con esclusioni

Messaggio da korda »

Aggiornamento: l'AI suggerisce un

Codice: Seleziona tutto

git merge -s ours --no-commit branch-with-folder-to-ignore
Mi documento (prima) e vediamo come va (poi, fidarsi è bene...)
Io non sono Bagheera né Akela, io non frequento la Rupe.
Io sono Kaa: faccio ballare le scimmie alle Tane Fredde.
korda
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1804
Iscrizione: giovedì 24 dicembre 2020, 15:58

Re: git - fare un merge con esclusioni

Messaggio da korda »

korda ha scritto:
giovedì 6 giugno 2024, 14:45
Aggiornamento: l'AI suggerisce un

Codice: Seleziona tutto

git merge -s ours --no-commit branch-with-folder-to-ignore
Mi documento (prima) e vediamo come va (poi, fidarsi è bene...)
...difatti non dovevo fidarmi: non è la soluzione per il mio caso questa proposta

Ho risolto facendo così:
  1. dal branch A mi faccio una copia locale di tutto
  2. mi sposto sul branch B e cancello tutto ad esclusione della cartella C
  3. riverso la copia locale nella working dir
  4. committo
E' una soluzione molto grezza e non ottimale: metto quindi [workaround] invece di [Risolto] :ciao:
Io non sono Bagheera né Akela, io non frequento la Rupe.
Io sono Kaa: faccio ballare le scimmie alle Tane Fredde.
Scrivi risposta

Ritorna a “Strumenti per la programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti