Ho letto in varie domande frequenti che git
non tiene traccia in modo esplicito di nomi/movimenti, preferendo cercare file identici (o in alcuni casi simili?). È grandioso, ma riuscirà a far fronte a questa situazione: il repository remoto di un amico ha una nuova funzione (i18n) che riguarda alcuni nuovi file allo debian/po/*.po
. Ho il mio fork di questo progetto, e voglio unire questa funzione, ma mettere i file a solo po/*.po
(posso farlo come due commit, o qualunque cosa sia necessaria). Mi aspetto che il repository remoto continui a ricevere gli aggiornamenti della funzione e voglio semplicemente unire/selezionare questi commit e applicarli ai file nella mia nuova posizione. Può fare git
, magari con una sorta di mappatura di "questi file sono stati spostati qui ora"? O è più doloroso di quanto valga la pena e dovrei semplicemente accettare il percorso leggermente dispari debian
nel mio repository?Spostare un file/directory, ma ancora unire facilmente le modifiche?
risposta
utilizzare git mv
e tutto sarà AOK.
Perché non provarlo invece di chiedere? Puoi sempre resettare facilmente in git. :)
In alternativa, rinominare i file utilizzando mv
e richiamare git add --all
per mettere in scena tutte le operazioni di eliminazione e aggiungere i file non tracciati (i nuovi nomi di file). Senza --all
, è necessario eseguire separatamente le operazioni di eliminazione e i nuovi nomi di file in modo esplicito. Non utilizzare neanche git add --update
, poiché ciò consentirà di eseguire tutte le operazioni di eliminazione, ma non aggiungerà i nuovi nomi di file.
Si noti che è probabile che si desideri eseguire queste operazioni in un ramo locale in modo tale da non inavvertitamente lo push
al ramo principale del proprio amico o il proprio amico non lo pull
nel suo ramo principale.
Git manca un meccanismo per indicare che ci si aspetta che ci sia percorso rinomina e aggiornamenti quando si fa la diff tra due progetti/rami ecc
Ci sono i vari file di opzioni rinominare disponibili (come ad esempio -M e --pazienza) ma può essere lento.
Come già detto, le rinominazioni dei percorsi non influiscono sul repository stesso perché è semplicemente un'istantanea del contenuto (blob) e della struttura (nodi dell'albero). Se tutto ciò che hai fatto è stato aggiunto ad una directory di livello superiore, tutti gli alberi e i blob sottostanti sono invariati e richiedono zero storage aggiuntivo. Tutto ciò di cui hai bisogno è il nodo ad albero per il tuo commit e un nodo ad albero per il nuovo tld. Morto facile. Git gestisce quella parte senza problemi.
È solo quando si desidera eseguire un confronto (e qualsiasi patch) che è importante. Sarebbe bello dire un'opzione -P
che indica che ci si aspetta qualche rinominazione del percorso e che lo diff
sia così facilmente gestibile. Non è bello vedere 200 file eliminati e 200 nuovi file ;-)
Scoprire come aggiungere un'opzione -P è un'altra delle mie voci di lista 'da fare' (spero di avere un po 'di tempo per farlo).
- 1. Come rendere Beyond Compare ignora gli spazi, ma mostra ancora le modifiche nei commenti
- 2. Unisci sottostruttura di Git, ma mantenere le modifiche locali?
- 3. SVN: unire le modifiche locali in un'altra copia di lavoro
- 4. Git Merge - Non unire tutte le modifiche dal ramo remoto
- 5. SVN: Annulla le modifiche di una revisione casuale, ma conserva le modifiche di tutte le seguenti
- 6. Git: fusione ma sovrascrittura delle modifiche
- 7. Come smettere di riaprire il browser Firefox ancora e ancora per vedere le modifiche?
- 8. Come devo spostare le modifiche da un commit a un altro?
- 9. come spostare le modifiche in commit-but-unpushed in un altro ramo?
- 10. Git: Come spostare le modifiche dall'ultimo commit a un nuovo ramo
- 11. Come faccio a unire le modifiche locali con una scorta git senza un commit extra?
- 12. Jersey ... come registrare tutte le eccezioni, ma invocare ancora ExceptionMappers
- 13. Spostare le modifiche apportate nel ramo di sviluppo in un nuovo ramo di funzionalità git-flow?
- 14. Mercuriale - È possibile unire le modifiche dal trunk a un ramo, all'interno dello stesso repository?
- 15. Bitbucket: aggiorna un fork per unire le modifiche del master repo?
- 16. Perché Git non può unire le modifiche ai file con un genitore/master modificato?
- 17. Usando GIT, come posso tirare/unire selettivamente le modifiche dalla "forcella" di un altro?
- 18. setlocale (LC_ALL, 'it_IT'); set, ma le date ancora in inglese
- 19. Git: spostare un commit "in primo piano"
- 20. Unisci le modifiche utilizzando vimdiff
- 21. come unire le matrici dimensionali
- 22. Unire le rovine selezionare
- 23. Git: come unire un ramo piccolo, ma molto vecchio?
- 24. è attivata, ma è ancora in grigio.
- 25. Dire di non unire file binari ma di scegliere
- 26. Come unire le modifiche da un contesto di oggetti gestito da bambino a un altro tramite un MOC principale?
- 27. , ma ho ancora bisogno di intestazioni?
- 28. SQL unire le tabelle
- 29. No RTTI ma metodi ancora virtuali
- 30. Monitorare le modifiche su un oggetto array
Beh, volevo solo vedere se qualcuno ha rilevato dei trucchi che potrebbero emergere in seguito se qualcosa di strano che non ho provato si verifica nel repository remoto e non ho controllato il pollo magico corretto quando ho fatto il movimento o che si fondono. Ho usato git solo da poche settimane, e ho ancora una dose (non) salutare di paranoia rimasta da VCS minori. :-) –
Se i file sono divergenti, allora avrà problemi a rintracciare la modifica, ma avrà il problema se lo si rinomina o meno;) – Pod
Grazie, sembra davvero tutto OK finora. –