Filosofia Git: file pubblici o personali: c'è il versioning ibrido?

7

Spesso mi trovo perplesso di fronte a una domanda del genere. Devo eseguire la versione dei miei progetti per due motivi:

  • pubblica il codice sorgente con tutta la sua cronologia in modo che persone possano entrarci, esplorarlo e farne uso.
  • archivia il mio progetto con tutta la sua cronologia in modo che I sia in grado di ripristinare, fork di nuovo ecc.

Ci sono essenzialmente due tipi di file nei miei progetti:

  • file essenziali, raw-source-core, src/* , README.md , configure.ac , etc. ho bisogno che siano versionnati per persone .
  • file per aiutarmi a lavorare con il raw-source-core, come customCheckNBuildScripts/* , favoriteIDEConfiguration/* , absolutePaths/* , shortcuts/* , hooksILike/* ecc. ho bisogno che siano versionned per me .

Quale flusso di lavoro mi avrebbe aiutato ad affrontare un simile conflitto?

.gitignore offre un modo meraviglioso di filtrare tra i file di origine e i file di build. Ma vorrei che ci fossero due versioni di esso. Nel mio mondo ideale, conterrebbe:

# RAW-SOURCE-CORE versionning part
# Dedicated to remote github [email protected]:user/myPublicRepo.git
*
!src/
!README.md
!configure.ac

# PERSONAL-USE-OF-THIS-SOURCE versionning part
# Dedicated to remote personal /media/user/flashdrive/myPrivateRepo
*
!src/
!README.md
!configure.ac
!customCheckNBuildScripts/
!favoriteIDEConfiguration/
!absolutePaths/
!shortcuts/
!hooksILike/

Quando spingerei su github , verrebbe usata solo la prima parte e lì.

Quando estraggo da github , otterrei solo la prima categoria di file e la prima parte di .gitignore .

Quando spingerei su personal , verrebbe usata la seconda parte.

Quando estraggo da personal , otterrei tutti i miei file.

Esiste questo tipo di versione ibrida?

    
posta iago-lito 11.09.2016 - 15:36
fonte

3 risposte

4

Potresti considerare un repository "root" contenente i tuoi strumenti / hook / script privati e un sottomodulo per le tue fonti pubbliche. Il sottomodulo non saprebbe nulla del progetto padre e avrebbe una cronologia "pulita".

Devo dire che non sono un vero fan dei sottomoduli, sono piuttosto contorti per lavorare con IMO, ma in questo caso offrirebbero la separazione che stai cercando.

    
risposta data 12.09.2016 - 02:29
fonte
0

.gitignore ti aiuta solo a essere selettivo sul commit. Se desideri inviare file diversi a repository diversi, hai bisogno di commit diversi, quindi probabilmente rami separati.

Potresti conservare solo le tue fonti sul ramo master e inserire un altro ramo master.personal da esso, aggiungendo i tuoi file di supporto su di esso. .gitignore su master esclude i tuoi file di supporto, ma non su master.personal .

Configura le fonti a master , unisci master a master.personal e impegna i file di supporto lì, quindi invia ogni ramo al suo repository.

Prima di cambiare diramazione dovrai stash save dei tuoi file di supporto (non supportati), quindi aggiungere un alias per la sequenza di comandi sarebbe probabilmente una buona idea.

    
risposta data 11.09.2016 - 19:27
fonte
0

Se si utilizza GitHub o GitHub Enterprise, è possibile mantenere il codice pubblico in un progetto / repo, quindi assegnare tale repository a una copia personale. Nella tua copia personale, aggiungi tutte le tue versioni personali, ma cerca di mantenere i commit come pubblici o personali. Questo ti consente di tenere traccia della cronologia delle tue cose personali in git. Quando si desidera condividere materiale pubblico, è possibile creare una richiesta pull per i commit pubblici dal repository personale a quello pubblico. Pertanto, il limite della richiesta di pull è un filtro per i tuoi file personali. Probabilmente potresti ottenere ciò senza GitHub (usando solo git), ma probabilmente coinvolgere un sacco di sequenze complesse di git remote , git fetch , git apply e git push . Alla fine, dovresti scrivere script per duplicare ciò che fa GitHub per i repository biforcati con richieste pull. Mantenersi aggiornati con il repository principale / pubblico non è automatico come git pull .

    
risposta data 02.10.2016 - 17:02
fonte

Leggi altre domande sui tag