2009-10-11 11 views
27

Stavo guardando un'applicazione Mac open source e hanno fornito alcuni valori suggeriti per .gitignore. Erano ciò che mi aspetterei ...Git e pbxproj

Tuttavia, hanno anche suggerito una voce in un file .gitattributes:

*.pbxproj -crlf -diff -merge

io non sono il più informato, in termini di git, quindi ero chiedendo: quali sono esattamente i benefici dell'aggiunta di questa linea? Cosa fa in particolare? Ho visto solo questo suggerimento in questo one project e, se fosse una pratica normale, mi sarei aspettato di vederlo altrove in questo momento. Quindi ero curioso di sapere come si applica specificamente al file pbxproj.

+0

Il post http://stackoverflow.com/questions/2615378/how-to-use-git-properly-with-xcode incoraggia l'unione di file '.pbxproj'. – Besi

risposta

25

Il file pbxproj non è realmente unibile. Mentre è semplice testo ASCII, è una forma di JSON. Essenzialmente si vuole trattarlo come un file binario.

Ecco quello che le singole bandiere fanno:

-crlf: non utilizzare crlf < => conversione cr

-diff: non diff file

-merge: non tentare per unire il file

dal libro Pro Git da Scott Chacon

Alcuni file sembrano file di testo ma a tutti gli effetti devono essere trattati come dati binari . Per esempio, progetti Xcode sul Mac contengono un file che termina in .pbxproj, che è fondamentalmente un JSON (testo normale JavaScript formato di dati) dataset scritto su disco dall'IDE che registra le impostazioni di generazione e così sopra. Anche se è tecnicamente un file di testo, perché è tutto ASCII, non si vuole trattarlo come tale perché è davvero un database leggero - si non si può unire il contenuto se due persone cambiato, e diff generalmente non sono utili. Il file è pensato per essere consumato da una macchina. In sostanza, si si desidera trattarlo come un file binario.

+0

'-crlf' non è" strip crlf characters "ma ** do not ** (l'opzione è negata) usa crlf conversion (crlf <-> cr) su questo file. –

+11

Nella mia esperienza (un po 'limitata), le modifiche molto semplici (come l'aggiunta di un nuovo file) di solito possono essere unite in un file .pbxproj. Se fai qualcosa di più complicato, come avere un ramo aggiungere un file e un altro riorganizzare i tuoi gruppi di origine, di solito otterrai un file .pbxproj corrotto, ma per cose semplici è spesso fattibile. Sono indeciso se sia meglio trattare i file .pbxproj come file binari o meno. –

+1

Sono d'accordo, ho avuto un buon successo nella fusione dei file .pbxproj usando Perforce. Ho avuto grande cura e ho esaminato attentamente ogni cambiamento. Ci vuole tempo ma è certamente fattibile. Finora non ho finito con un file di progetto corrotto. Ma sapevo anche quali cambiamenti ho apportato e mi sto solo integrando in una direzione (semplicemente non integrando tutto). – LearnCocos2D

6

Un diff è spesso utile in fase di commit per verificare cosa è stato modificato. Quindi trovo che sia utile mantenere la capacità di diffusione, ma solo impedire la fusione. Quindi io uso questo nel mio file .gitattributes:

* .pbxproj -crlf -merge

In un'altra nota, qualcuno ha provato ad utilizzare merge = unione per i file pbxproj? Vedere: Should I merge .pbxproj files with git using merge=union?

3

Ho scritto uno script python denominato xUnique per risolvere questo problema di conflitti di unione.

Questo script fanno seguenti cose:

  • sostituire tutti i 24 caratteri UUID di proiettare a livello unici digest 32 caratteri MD5, e rimuovere eventuali UUID non utilizzati (di solito causate da merge negligente prima). Questo eviterebbe UUID duplicati perché diverse macchine/Xcode generano UUID diversi in questo file. Xcode lo riconosce e il progetto potrebbe essere aperto. Durante questo processo, rimuovere tutte le righe non valide nel file di progetto
  • ordinare il file di progetto. Ho scritto un python version di sort-Xcode-project-file from Webkit team con più nuove caratteristiche:
    • supporto per ordinare PBXFileReference e PBXBuildFile sezioni
    • file di rimuovere i duplicati/arbitri
    • evitare di creare nuovi file anche se non le modifiche apportate, questo rende meno commit dopo l'uso questo script

Maggiori dettagli e aggiornamenti di xUnique, si prega di fare riferimento al README