Domanda Unione di file di progetto Xcode


Ci sono spesso conflitti nel file di progetto Xcode (Project.xcodeproj / project.pbxproj) quando si uniscono i rami (sto usando git). A volte è facile, ma a volte finisco con un file di progetto corrotto e devo tornare. Nel peggiore dei casi devo correggere manualmente il file di progetto in un secondo commit (che può essere schiacciato con il precedente) trascinando i file ecc.

Qualcuno ha suggerimenti su come gestire i conflitti di fusione in file grandi e complessi come il file di progetto Xcode?


MODIFICARE-- Alcune domande correlate:

Git e pbxproj

Dovrei unire file .pbxproj con git usando merge = union?

RISORSE:

http://www.alphaworks.ibm.com/tech/xmldiffmerge

http://www2.informatik.hu-berlin.de/~obecker/XSLT/#merge

http://tdm.berlios.de/3dm/doc/thesis.pdf

http://www.cs.hut.fi/~ctl/3dm/

http://el4j.svn.sourceforge.net/viewvc/el4j/trunk/el4j/framework/modules/xml_merge/


30
2017-10-26 09:34


origine


risposte:


1) spezza i tuoi progetti in librerie / pacchetti più piccoli e più logici. i progetti massicci sono regolarmente il segno di un cattivo design, come l'oggetto che fa troppo o è troppo grande.

2) design per una facile ricostruzione - questo aiuta anche se stai scrivendo programmi che devono essere costruiti da più strumenti o IDE. molti dei miei 'progetti' possono essere ricostruiti aggiungendo una directory.

3) rimuovere le fasi di costruzione estranee. esempio: ho rimosso la fase di costruzione "Copia intestazioni" da tutti i progetti. includere esplicitamente i file specifici tramite la direttiva include.

4) usa i file xcconfig laddove possibile. questo riduce anche il numero di modifiche che devi apportare quando aggiorni le tue build. I file xcconfig definiscono una raccolta di impostazioni di build e supporto #include. ovviamente, si cancellano le impostazioni definite dall'utente (maggioranza) da ciascun progetto e destinazione quando si definisce xcconfig da utilizzare.

5) per le dipendenze degli obiettivi: creare obiettivi che eseguono operazioni logiche, piuttosto che operazioni fisiche. questo di solito è un target script di shell o un target aggregato. ad esempio: "crea dipendenze", "esegui tutte le unit test", "crea tutto", "pulisci tutto". quindi non devi mantenere ogni dipendenza cambia in ogni passo - è come usare i riferimenti.

6) definire un comune "Albero delle sorgenti" per il codice e un secondo per le fonti di terze parti.

7) sono disponibili strumenti di build esterni. questa potrebbe essere un'opzione per te (almeno per alcuni dei tuoi obiettivi).

a questo punto, un xcodeproj sarà molto più semplice. richiederà un minor numero di modifiche e sarà molto facile da ricostruire. puoi andare molto oltre con questi concetti per ridurre ulteriormente la complessità dei tuoi progetti e build.


7
2017-11-01 07:21



Potresti provare https://github.com/simonwagner/mergepbx/

È uno script che ti aiuterà a unire correttamente i file di progetto XCode. Si noti che è ancora alfa.

Disclaimer: sono l'autore di mergepbx.


3
2018-02-04 12:38



Il modo migliore che ho trovato è di istruire Git per trattare il file .pbxproj come un file binario. Ciò impedisce l'unione disordinata.

Aggiungi questo al tuo file .gitatributes:

*.pbxproj -crlf -diff -merge

2
2017-12-06 22:58



Per confrontare due progetti Xcode apri FileMerge aperto (apri xcode e seleziona Xcode (dal pannello manu) -> Apri strumenti sviluppatore -> FileMerge). ora fai clic sul pulsante "sinistra" e apri la directory principale del progetto xcode. fare clic sul pulsante "right" e aprire la directory principale del progetto xcode da confrontare.

Ora fai clic sul pulsante "Unisci"!

Questo è tutto!


2
2018-01-06 07:54



Un'altra opzione da considerare che può aiutare a ridurre il numero di volte in cui si verifica il problema. Per spiegare, chiamerò il ramo che i rami dei membri del team provengono dal ramo "sviluppo". Avere una convenzione nel proprio team che quando il file di progetto viene modificato, le modifiche (insieme a qualsiasi altra modifica richiesta per garantire l'integrità della build) vengono eseguite in un commit separato. Quel commit viene quindi selezionato sul ramo di sviluppo. Gli altri membri del team che pianificano di modificare il file di progetto nel loro ramo possono quindi selezionare i caratteri nel loro ramo o rebase il loro ramo nell'ultimo sviluppo. Questo approccio richiede comunicazione attraverso il team e una certa disciplina. Come ho detto, non sarà sempre possibile; su alcuni progetti potrebbe essere di grande aiuto e su alcuni progetti potrebbe non esserlo.


0
2018-03-05 15:22