Pubblica moduli da un progetto Java su Github e integri in IntelliJ [chiuso]

0

Qual è la migliore pratica per lavorare con diversi moduli Java da diverse fonti GitHub usando IntelliJ?

Potrebbe trattarsi di una strana sensazione, ma non so quale sia il flusso di lavoro standard per ottenere ciò che ho in mente.

La situazione attuale

Sviluppo un progetto Java con IntelliJ e gestisco il mio codice con GitHub. Il progetto è attualmente memorizzato in un repository privato su GitHub e consiste di diversi moduli Maven indipendenti. Questa è una struttura di esempio:

Il piano

Ora ho intenzione di pubblicare solo ModuleB su un repository pubblico su GitHub. Voglio condividere solo questo modulo e consentire ad altri di usarlo. Qual è la migliore pratica in modo che io possa sviluppare ulteriormente il modulo B nel mio progetto e tutte le modifiche vengano pubblicate nel repository pubblico? Non so come farlo in IntelliJ. Sono insicuro sul flusso di lavoro qui o c'è un altro schema che potrei seguire per raggiungere questo obiettivo?

Idea

Penso che potrei esportare ModuleB, importarlo come repository pubblico separato in GitHub e poi inviare richieste pull quando apporto le modifiche. Ma come faccio a farlo con IntelliJ? Come posso inserire l'archivio pubblico nel mio progetto esistente, che è esso stesso condiviso in un repository privato? Posso annidare i progetti GitHub? È una buona idea dopotutto? Per favore fatemi sapere se la mia domanda è chiara.

Ulteriori chiarimenti

So che posso importare diversi "moduli" in IntelliJ, ma questa è una cosa diversa, non è vero? Un modulo IntelliJ è uguale a un progetto Eclipse, che è un'entità indipendente. Penso che potrei risolvere il problema con questo approccio, ma poi dovrei impegnare il progetto complessivo separatamente. Questo potrebbe essere risolto in modo più elegante con i Git submodules forse?

Soluzioni proposte

Ho creato un nuovo repository GitHub per ModuleB e ho caricato il codice sorgente su di esso. Questo modulo è ora impostato come pubblico e indipendente dal progetto principale.

Utilizza il modulo di importazione IntelliJ

Invece di provare a integrare il repository "esterno" direttamente nel mio progetto corrente, ho clonato il repository ModuleB in una directory diversa. Quindi ho importato la suddetta cartella come un nuovo modulo in IntelliJ.

IntelliJchiedequindisecipotrebbeessereunadipendenzatrailModuloBappenaaggiunto.Sfortunatamentequestoaggiungesolounavocenelfile.iml

<orderEntrytype="module" module-name="Submodule" />

e non nel file pom.xml. Quindi questa informazione dove ottenere il codice sorgente per il modulo è disponibile solo in IntelliJ. Come potrebbe essere risolto questo problema? L'ho provato solo con un progetto giocattolo finora, ma se qualcuno vuole importare l'intero progetto in Eclipse, ad esempio, ciò potrebbe causare un problema. Come posso fare riferimento all'altro repository GitHub in un modo utile?

    
posta Stefan 07.01.2015 - 11:54
fonte

1 risposta

0

Soluzione: Git Subtrees

Dopo essermi agitato con i sottomoduli, ho scoperto che i sottotitoli di Git mi permettono di ottenere ciò che volevo. Ho utilizzato principalmente questa pagina per conoscere i sottoalberi e ho seguito la seguente procedura per integrare un submodule (submodule-repo.git) nel repository principale (parent.git)

# Start at the root of the parent repository. Add a new remote repository to the  parent. 
# Add a new remote repository location called Submodule-Subtree
git remote add Submodule-Subtree https://github.com/yourname/submodule-repo.git

# Check that the new remote location is there
git remote -v

# Now add the newly added remote location of the submodule to the parent
# by specifying a folder name where you want the submodule to be stored locally.
git subtree add --prefix=NewSubModule/ Submodule-Subtree master

# Save to the parent master
git push origin master

# make changes in the new module
cd NewSubModule/
touch ThisIsANewFile.txt
git add .

# Commit to the parent
commit -m "we added a new file in the submodule from the parent repository"
git push origin master


# So far the changes the changes are only visible in the parent repository, 
# but not in the original location. To share your changes with the original 
# submodule-repo.git, you need this command:
git subtree push --prefix=NewSubModule/ Submodule-Subtree master

# You also need to update the submodule-repository manually
# git subtree pull —prefix=NewSubModule/ Submodule-Subtree master

Come passo successivo puoi importare questa cartella come modulo tramite File | Modulo di importazione | Sorgenti esistenti.

Lo sfondo onesto è quello proveniente da un mondo SVN ed Eclipse, ho bisogno di imparare la terminologia in modo più preciso e di abituarmi ai nuovi concetti. Ho trovato molto utile il Pro Git Book .

    
risposta data 13.01.2015 - 15:49
fonte

Leggi altre domande sui tag