Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-03-2015, 00:54   #1
Alessio465
Junior Member
 
Iscritto dal: Jul 2014
Messaggi: 7
[Git] Rebase

Ciao!

Non ho ben capito quale sia la differenza tra "rebase" e "merge". Grazie in anticipo!

Ultima modifica di Alessio465 : 22-03-2015 alle 12:13.
Alessio465 è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2015, 13:45   #2
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Merge è un operazione non distruttiva. Ti permette di unire i commit di due branch lasciando gli originali inalterati. Rebase è un operazione simile ma riscrive la storia del progetto modificando tutti i commit del branch sorgente per spostarli in quello di destinazione.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2015, 15:31   #3
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 13043
Discussione interessante, direi di tenerla aperta e ne approfitto per chiedere ai più esperti una questione.

Supponiamo di avere due branch, uno master "stabile" e uno experimental (più sperimentale).

Inizialmente sono uguali, dopodiché man mano vengono aggiunte modifiche all'experimental.

A questo punto però si rende necessario un intervento correttivo sul master.

Qual è il modo migliore di importare le modifiche da master su experimental (che adesso è più avanti), ammesso naturalmente che questo abbia senso?
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2015, 17:40   #4
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Forse non ho capito bene come è la situazione. Però se experimental è l'unico su cui si è lavorato allora ha poco senso fare un merge da master ad experimental. Non ci sarebbe niente di cambiato.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2015, 18:11   #5
Alessio465
Junior Member
 
Iscritto dal: Jul 2014
Messaggi: 7
Attualmente nel master è stato caricato un branch A. Io lavoro in locale su un branch B che ho poi inviato al remoto con vari comandi per tracciare i files e infine "commit" e "push". Se compio delle modifiche a files che ho già caricato devo aggiornare il branch locale con "pull". Ora dovrei unire il mio branch al master, in modo da non sovrascrivere quello del mio amico che è già stato caricato.

Per prova, ho creato un mio repository e due branches. Ma quando faccio le operazioni come quelle precedenti, i files vengono sovrascritti. Quindi mi viene il dubbio di dover usare altri comandi tra cui rebase e merge oppure scaricare l'intero master in locale, aggiungere i file del mio branch e rinviare tutto il pacchetto.

Ultima modifica di Alessio465 : 22-03-2015 alle 18:14.
Alessio465 è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2015, 19:16   #6
OoZic
Senior Member
 
L'Avatar di OoZic
 
Iscritto dal: Nov 2010
Città: Londra
Messaggi: 620
Per progetti complessi vi consiglio di leggere:
http://nvie.com/posts/a-successful-git-branching-model/

Per progetti semplici in genere la strategia che vedo piu' adottata e' tenere branch master che corrisponde al codice che c'e' in produzione, branch develop che corrisponde al codice che c'e' sullo staging e poi ogni qual volta si vuole cambiare qualcosa si ragiona in termine di feature/ticket (agile)/issue e si crea un branch nuovo a partire da develop.

Ad esempio in questa situazione
master <- develop

Codice:
git checkout develop
, e si va nel branch develop.

poi si fa un branch per la nuova feature, ad esempio per un nuovo sistema mail

Codice:
git checkout -b new-mail-system
si lavora, si fa commit, push, pull quel che va fatto e poi quando si e' finito di lavorare a questa feature si torna in develop
Codice:
git checkout develop
si fa il merge, risolvendo eventuali problemi
Codice:
git merge new-mail-system
poi eventualmente push a github e in questo momento develop contiene la feature aggiunta new-mail-system

il passo successivo e' dare un occhiata a continuous integration / deployment
__________________
> This is me <
When you gaze long into an abyss the abyss also gazes into you.
OoZic è offline   Rispondi citando il messaggio o parte di esso
Old 22-03-2015, 23:36   #7
Alessio465
Junior Member
 
Iscritto dal: Jul 2014
Messaggi: 7
Grazie! Ho letto attentamente la guida. I passi descritti sono esattamente gli stessi che ho seguito, eppure non fa quel desidero... Farò altre prove..

Ultima modifica di Alessio465 : 23-03-2015 alle 00:01.
Alessio465 è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2015, 00:15   #8
OoZic
Senior Member
 
L'Avatar di OoZic
 
Iscritto dal: Nov 2010
Città: Londra
Messaggi: 620
Se quel che hai scritto e' corretto, NON stai facendo come ho spiegato

Cerco di risponderti punto per punto

Quote:
Originariamente inviato da Alessio465 Guarda i messaggi
Attualmente nel master è stato caricato un branch A.
Non capisco il senso. Il branch principale dovrebbe chiamarsi "master".
Se lo chiami in un altro modo fai confusione.
Lascia il branch principale "master" e crea altri branch per fare le feature come ti ho detto.

Quote:
Originariamente inviato da Alessio465 Guarda i messaggi
Io lavoro in locale su un branch B che ho poi inviato al remoto con vari comandi per tracciare i files
Se lavori in locale su un branch chiamato per ipotesi "branch-b" e lo invii al remoto non sovrascrivi nulla di master.

Se per te "branch B" significa che tu stai lavorando sul tuo master e il tuo amico sta lavorando sul suo master, allora non state usando branch ma siete di fatto tutti e due su master quindi le vostre modifiche vengono sovrascritte l uno dall'altro.

Quote:
Originariamente inviato da Alessio465 Guarda i messaggi
e infine "commit" e "push".
vedi sopra, se fai commit e push del branch "master" stai probabilmente sovrascrivendo le modifiche del tuo amico.

Quote:
Originariamente inviato da Alessio465 Guarda i messaggi
Se compio delle modifiche a files che ho già caricato devo aggiornare il branch locale con "pull". Ora dovrei unire il mio branch al master, in modo da non sovrascrivere quello del mio amico che è già stato caricato.
per fare questo tu lavori sul tuo "branch-b" locale, fai commit e push a remoto di quel branch.
Una volta che hai finito torni su "master' con "git checkout master" (meglio avere un branch intermedio chiamato develop come ti ho detto cmq)

una volta che sei dentro master ti assicuri di avere l'ultima versione quindi fai "git pull"

una volta che sei a pari col remoto puoi fare il merge delle tue modifiche con "git merge branch-b" e se non ci sono file che sono stati toccati dal tuo amico il merge e' immediato altrimenti dovresti risolvere i conflitti.

e' scontato che se tutti e due avete il permesso di fare push al repository avete lo stesso potere di sovrascrivere i file quindi mettetevi d'accordo nel caso tra di voi se devi sovrascrivergli qualcosa.

lui automaticamente la volta dopo deve fare "git pull" per aggiornare il suo master e poi fare merge delle sue modifiche e cosi via per te lo stesso sara' successivamente.

il modo per "decidere" generalmente a parte mandarsi un messaggio in chat puo' essere una cosa piu' formale come aprire una pull request e discutere li delle modifiche fatte e del possibile merge, che puo' essere poi fatto da entrambi sostanzialmente.

altrimenti uno dei due mantiene la possibilita' di fare push e l'altro fa solo pull request che devono essere approvate e mergiate da chi detiene il potere.
__________________
> This is me <
When you gaze long into an abyss the abyss also gazes into you.
OoZic è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2015, 00:50   #9
Alessio465
Junior Member
 
Iscritto dal: Jul 2014
Messaggi: 7
Sì, quasi sicuramente sbaglio in qualche punto

Mi sono espresso male. Nel mio caso il branch principale (il trunk in SVN) è sempre il master, che inizialmente è vuoto. In un secondo tempo sono stati creati due branch (branchA e branchB). Il branchA è del mio collaboratore, sul branchB lavoro io.

Il branchA (file1 e file2) è in locale sul PC1 , il branchB (file3 e file4) è in locale sul PC2. Infine, tutto il contenuto del branchA è stato inviato al master.

Ora vorrei inviare al master il contenuto del mio ramo branchB, senza sovrascrivere il contenuto del primo, in modo che il master contenga tutti e quattro i file.

Codice:
git checkout -b branchB
git ... (aggiunge files, ecc..)
git checkout master
git pull
git merge branchB
I files contenuti nel master (provenienti dal branchA) vengono persi, mentre al loro posto trovo i miei...

Facendo git pull dal master, non mi viene scaricato tutto il suo contenuto... solo una parte (?)

Ultima modifica di Alessio465 : 23-03-2015 alle 01:14.
Alessio465 è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2015, 08:40   #10
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quello che hai scritto sembra giusto. Ho provato in due minuti a ricreare quello che hai descritto e funziona senza problemi. Alla fine ho ho file1, file2, file3 e file4 nella cartella.

State probabilmente sbagliando qualche comando ma senza la sequenza esatta dei comandi che sono stati dati è difficile capire dove commettete l'errore.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2015, 11:49   #11
Alessio465
Junior Member
 
Iscritto dal: Jul 2014
Messaggi: 7
1) Ho creato il repository Prova (nel master c'è un file README.md)

2) Sul Desktop ho creato una cartella "prova" in cui ho clonato il repository

3) Ho creato un nuovo branch (ramoA), ho cancellato il file README.md in locale e ho inserito una cartella "ramoA" con dentro un file "testoA.txt"

4) Ho aggiunto i file al ramoA, infine li ho inviati al server remoto. Fin qui ok.

5) Ripasso al master, faccio il pull, e unisco il ramoA... invio al remoto e... sul master trovo la cartella ramoA con dentro testoA.txt, ma il README.md è scomparso. (?)

Ultima modifica di Alessio465 : 23-03-2015 alle 16:42.
Alessio465 è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2015, 13:05   #12
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Ma è normale che non ci sia più README.md. Lo hai cancellato quando eri in ramoA ed hai fatto il commit di quella modifica. Se subito dopo fai il merge in master giustamente lo cancella anche li.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2015, 13:28   #13
Alessio465
Junior Member
 
Iscritto dal: Jul 2014
Messaggi: 7
Ok, il punto è questo. Nel mio branch non ho i file del master... voglio solo unirlo a quest'ultimo senza un ulteriore commit con messaggio.

Cosa devo fare, passo per passo?
Alessio465 è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2015, 15:06   #14
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Ok. Allora spostati in master e dai git pull così sei sicuro di avere l'ultima versione disponibile sul server. Torna nel tuo branch con git checkout ramoA. Ora dai git merge master così prendi le modifiche fatte in master che non ci sono nel tuo branch.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2015, 16:41   #15
Alessio465
Junior Member
 
Iscritto dal: Jul 2014
Messaggi: 7
Grazie mille! Risolto
Alessio465 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto i...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:21.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v