Git che estende più versioni del progetto

0

Diciamo che c'è un progetto A, e mi sono imbattuto in un progetto EA che estende il progetto. Il problema è che il progetto A non è disponibile sotto controllo di versione, è disponibile solo come versioni di tarball.

Il progetto EA estende A creando un nuovo repository github e aggiungendo nuove funzionalità, la maggior parte delle modifiche sono concentrate in una nuova sottocartella, ma nel codice originale di A esistono anche alcune rare modifiche.

Ora c'è una versione di tarball versione 2 per il progetto A e voglio implementare la stessa estensione di EA per la nuova versione.

Qual è il miglior gitflow per farlo? Se lo sviluppatore di EA avesse utilizzato i sottomoduli avrei potuto aggiungere quello, ma come è, sta apportando alcune modifiche (anche se raramente) nel codice originale (dal progetto A).

Sono nuovo a vcs ma ho letto le basi di git e submodules, ma l'unico modo in cui posso vederlo è creare un repository separato, unire le modifiche da EA e gestire manualmente le modifiche ogni volta che EA viene modificato dal suo sviluppatore .

    
posta Vikash B 22.12.2016 - 15:43
fonte

1 risposta

2

Per prima cosa, crea un nuovo repository git per tracciare A come viene pubblicato dagli sviluppatori di A.

Inizia con il più recente tarball pertinente per EA, decomprimilo e aggiungi tutto al tuo repository.

Quindi, per ogni tarball successivo fino al momento attuale, decomprimilo e aggiungilo come nuovo commit al tuo repository. Ora avrai un ramo che tiene traccia delle versioni "ufficiali" di A.

Quando hai finito, aggiungi il repository di EA come remoto al tuo repository:

git remote add EA <EA github URL>

Recupera da questo telecomando:

git fetch EA

Ora avremo un singolo repository con due "branch roots"; uno per A e uno per EA; avrai un ramo locale "master" che tiene traccia di A e un ramo remoto EA / master

Crea un nuovo ramo "mybranch" dal tuo A master al commit corrispondente alla versione di A usata come base di EA:

git checkout -b mybranch some_commit_id

Il passo successivo è quello importante: creerai un merge commit su mybranch che unisce la punta di EA alla versione base di A.

git merge --strategy=theirs EA/master

Dopo questo, mybranch sarà identico al suggerimento di EA ma git saprà che proviene dall'applicare un insieme di modifiche a quella versione di A.

A questo punto, puoi aggiornare all'ultima versione di A nel tuo repository unendo master in mybranch.

Puoi rintracciare le modifiche successive a EA con fetch e commettere successivi tarball di A nel tuo ramo principale. Puoi quindi unirli nuovamente in mybranch e git dovrebbe fare la cosa giusta.

    
risposta data 22.12.2016 - 22:09
fonte

Leggi altre domande sui tag