Gitattributes Binario Options


Se state usando Git per collaborare con altri utenti su GitHub, in modo che Git è correttamente configurato per gestire la fine della riga. Ogni volta che si preme Invio sulla tastiera sei in realtà l'inserimento di un personaggio invisibile chiamato un fine riga. Storicamente, i diversi sistemi operativi hanno gestito la fine della riga in modo diverso. Quando si visualizza le modifiche in un file, Git gestisce fine riga a modo suo. Dato che sei collaborando a progetti con Git e GitHub, Git potrebbe produrre risultati imprevisti se, per esempio, sei lavorando su una macchina Windows, e il vostro collaboratore ha fatto un cambiamento nelle impostazioni OS X. globali per la linea terminazioni Il comando core. autocrlf git config è usato per cambiare il modo in Git gestisce fine riga. Si prende un singolo argomento. Su OS X, è sufficiente passare in ingresso alla configurazione. Per esempio: In Windows, è sufficiente passare fedele alla configurazione. Per esempio: Su Linux, è sufficiente passare in ingresso alla configurazione. Per esempio: Su OS X e Linux, di solito si desidera passare input per questa impostazione. Su Windows, di solito si desidera utilizzare vero. Per esempio: Per-repository impostazioni Opzionalmente, è possibile configurare il modo in cui gestisce Git fine riga su una base per-repository configurando un file. gitattributes speciale. Questo file è impegnata nel repository e sovrascrive l'impostazione di un individui core. autocrlf, assicurando un comportamento coerente per tutti gli utenti, indipendentemente dalle loro impostazioni Git. Il vantaggio di un file. gitattributes è che le configurazioni di linea sono associati con il repository. Non avete bisogno di preoccuparsi per se o non i collaboratori hanno la stessa linea che termina le impostazioni che si fa. Il file. gitattributes deve essere creato nella radice del repository e impegnato come qualsiasi altro file. Ecco un esempio del file nella Guida GitHub sviluppatori. Un file. gitattributes assomiglia ad una tabella con due colonne: a sinistra è il nome del file per Git da abbinare. Sulla destra è la linea che termina configurazione che Git deve usare per quei file. Ecco un esempio. gitattributes file. Si può usare come modello per i repository: Youll notare che i file sono. c matched--..sln..png -, separati da uno spazio, quindi in un testo setting--. eolcrlf testo. binario. Bene andare oltre alcune impostazioni possibili di seguito. textauto Git gestirà i file in qualunque modo si pensa sia meglio. Questa è una buona opzione di default. testo eolcrlf Git sarà sempre convertire i fine riga di CRLF sulla cassa. Si dovrebbe usare questo per i file che devono tenere le terminazioni CRLF, anche su OSX o Linux. Ad esempio, ecco un progetto Windows che impone fine riga CRLF. testo eollf Git sarà sempre convertire i fine riga a LF sulla cassa. Si dovrebbe usare questo per i file che devono tenere le terminazioni LF, anche su Windows. Ad esempio, ecco un progetto che impone la fine della riga LF. binario Git capirà che i file specificati non sono il testo, e non dovrebbe cercare di cambiarli. L'impostazione binaria è anche un alias per - diff - text. Aggiornamento di un repository dopo aver cambiato fine riga dopo che avrete impostare l'opzione core. autocrlf e commesso un file. gitattributes, è possibile che Git vuole impegnarsi file che non è stato modificato. A questo punto, Git è desideroso di cambiare la fine riga di ogni file per voi. Il modo migliore per configurare automaticamente le terminazioni di linea repositorys è quello di prima backup dei file con Git, eliminare tutti i file nel repository (ad eccezione della directory. git), e quindi ripristinare i file in una sola volta. Salvare i file correnti in Git, in modo che nessuno del vostro lavoro è perduto. Rimuovere tutti i file dall'indice Gits. Riscrivere l'indice Git per raccogliere tutti i nuovi fine riga. Aggiungere tutti i file modificati di nuovo, e li prepara per un commit. Questa è la tua occasione di ispezionare i file che, se del caso, sono rimasti invariati. Impegnare le modifiche ai repository. I hanno osservato problemi CRLF dopo la fusione fasci dal mio collega. A volte le linee con LF sono stati mescolati nelle fonti, probabilmente quelli che sono stati fusi in. Pertanto, abbiamo deciso di aggiungere il file. gitattributes con il seguente contenuto (commenti rimossi): Ora osservo lo strano comportamento. Vedo un sacco di modificata. file (cioè non è stato classificato), che non dovrebbero essere lì. Ho provato a resettare git --hard. ma i file hanno ancora lo stesso status. Ho cercato di clonare il repository di nuovo - lo stesso risultato. Ho installato dal Git-1.7.11-preview20120620.exe scaricato come versione attuale per Windows git versione 1.7.11.msysgit.0. Che altro dovrei provare E 'textauto impostazione. gitattributes che causa questo problema. È possibile rimuovere e vivere felici e contenti, ma si possono avere i file con codifiche di linea non-repo-default, o anche file con diversi codifica linea finale diverso (cioè sia LF e CRLF, e anche CR) in pronti contro termine. Perché questo accade (Dettagli) Quando git estrae un file così come sono, su cui si modificherà fine riga su addcommit. Il file è in realtà non modificati ancora, ma git considera già come modificato, perché sarà. a causa delle impostazioni del pronti contro termine. In qualche modo funziona un po 'strano con git. Ad esempio, git ripristinare --hard volte funziona ea volte no, forse a seconda delle impostazioni. Oppure, se si entra nella tua. gitattributes e segnare l'estensione come binario, il file modificato scompare magicamente: L'effetto rimane anche dopo aver rimosso il binario marcatura, anche dopo aver eseguito il ripristino git --hard di nuovo, in modo che possa essere un git bug o problema git caching. Facendo git - rm sul file e poi fare git resettare --hard ripristina la marcatura modificato. Come risolvere il problema Si assume qui che si desidera mantenere l'impostazione textauto, in modo che git si avverte di fine riga incoerenti nei vari file testuali ora e in futuro. In tal caso, scegliere il metodo: Opzione 0. Temporaneamente ingannare git dalla marcatura file come Modifica. gitattributes modificati. commentare textauto. salvare git status (è necessario questo passaggio per avere cambiamenti registrare git in. gitattributes) git ripristinare --hard (questo ripristinerà textauto e anche bombardare eventuali cambiamenti nella vostra directory di lavoro, se di aver preso alcuna). Questo di solito funziona (se non in forse la maggior parte stubbornest dei casi). Si rimanda anche il problema, che molto probabilmente apparirà in seguito ad un certo punto, perché fine riga ancora non sono state normalizzate. Questa opzione è grande quando si deve riavvolgere un precedente commit che non è stata normalizzata, come durante un rebase, o di qualche altro lavoro git, dove sai seguenti commit esistenti normalizzare i fine riga, ma git lamenta file modificati ora impedendo voi di continuare. Quindi, in pratica utilizzare questo metodo quando è necessario git di tacere e ignorare i file modificati che in realtà non sono stati modificati per il particolare contesto. Opzione 1 . Facile fix utente finale Se si dispone di pochi file, assicurarsi che il. gitattributes e core. autocrlf sono impostati a proprio piacimento, e poi basta fare una addcommit git e non si dovrebbe vedere di nuovo la questione. I file saranno convertiti in terminazioni linea desiderata e memorizzati nel repository, come indicato nella configurazione. Questo commettere verrà memorizzato nel tuo repo come intero file era cambiata, perché ogni linea avrà le sue terminazioni riga modificata. Per alcuni file in un repo più grande o open-source che va bene. Assicurarsi di unire o cherry-pick che commettono in tutti i rami, come il problema esisterà in tutti i rami che avevano quei file, fino a risolvere il problema. Tra l'altro qui è dove è possibile utilizzare l'opzione 0. cioè se si passa ad un ramo non fissata, e si lamenta, eseguire l'opzione 0, quindi effettuare la correzione (unire o cherry-pick). IMPORTANTE: se si sta andando questa via di opzione 1, assicurarsi di convertire i file modificati in modo corretto. Git non può essere fatto per te tutto come ci si aspetta, in modo da fare da soli prima della commettere, cioè utilizzare questo: nuova linea Conversione formattazione da Mac a Windows La ragione git può essere confusa è che ho visto i file che hanno tutti e tre CR, LF, e CRLF linea che termina la formattazione in loro. Nuke quelli nel vostro formato preferito se stessi prima di commettere. Opzione 2. meccanica avanzata git storia riscrivere correzione: Se si dispone di un pronti contro termine più privato e non hanno paura di riscrivere la storia, andare a vedere questo: git vede intero file come una linea a causa della linea Mac terminazioni Ciò riscrivere tutto il pronti contro termine e sbarazzarsi di qualsiasi linea che termina problemi in qualsiasi punto tutti gli alberi, i rami, sempre essere sicuri di includere tutti i potenziali estensioni di file di testo fastidiose che si consiglia di normalizzare, oppure si possono mostrare in un secondo momento. Nel mio caso ho fatto Opzione 2 come avevo a che fare con in un sacco di problemi di file che termina con un sacco di rami. Ma poi ho avuto alcune estensioni inaspettate rivelano che non ho normalizzare, e appena fatto l'opzione 1, come ho solo perso 5-6 files. Git: Trattare con fine riga 8211 soluzione Se si sviluppa su una piattaforma e non condividono il codice , non si avrà un problema con la fine riga. Ma il progetto sviluppato multipiattaforma si può avere un problema con finali diversi di linea 8211 di Windows, Linux e Mac. Come soluzione Git ha l'opzione per rendere i fine riga coerente. Per configurare il proprio ambiente, è possibile impostare le impostazioni globali Git prima: Ogni repo può avere requisiti diversi per le terminazioni di linea, quindi per ogni repo è possibile specificare la fine riga. Nel periodo cartella di repository: Per essere più coerenti e in grado di specificare la linea di fine per diversi file dall'estensione, è possibile utilizzare. gitattributes file. Il file è impegnata nella repository e avrà la precedenza l'impostazione sviluppatori. Il file. gitattributes dovrebbe essere creato nella radice del repository e impegnato nella repo come qualsiasi altro file. Dopo you8217ve impostare l'opzione core. autocrlf e ha creato un file. gitattributes, è possibile che git vuole impegnarsi file che non you8217ve modificati. Questo perché git vuole normalizzare i fine riga per voi. Assicurarsi you8217ve commesso alcun lavoro prima di fare questo, o si sarà perso. Lascia un Commento Annulla risposta Categoriesgitattributes (5) Manuale pagina Se core. safecrlf è impostato su vero o avvertire, Git verifica se la conversione è reversibile per l'impostazione corrente di core. autocrlf. Per vero, Git rifiuta conversioni irreversibili per mettere in guardia, Git stampa solo un avvertimento, ma accetta una conversione irreversibile. La sicurezza attiva per evitare che una tale conversione fatto per i file nella struttura di lavoro, ma ci sono alcune eccezioni. Anche though8230 git stesso aggiungere non tocca i file nella struttura di lavoro, la prossima cassa sarebbe, quindi scattare la sicurezza git applicare per aggiornare un file di testo con una patch non toccare i file nella struttura di lavoro, ma l'operazione è di circa i file di testo e la conversione CRLF è circa fissa la linea che termina incongruenze, quindi la sicurezza non fa scattare git diff stessa non tocca il file nella struttura di lavoro, è spesso eseguito per esaminare le modifiche che si intende prossimo git add. Per catturare potenziali problemi in anticipo, la sicurezza attiva. Quando l'ident attributo è impostato per un percorso, Git sostituisce Id nell'oggetto blob con Id:. seguito dal 40 caratteri esadecimali nome di oggetto blob, seguita dal simbolo del dollaro al momento del checkout. Ogni sequenza di byte che inizia con Id: e finisce con nel file worktree viene sostituito con Id al momento del check-in. Un attributo di filtro può essere impostato su un valore stringa che indica un driver di filtro specificata nella configurazione. Un driver filtro è costituito da un comando pulita e un comando macchia, ciascuno dei quali può essere lasciato non specificato. Al check-out, quando viene specificato il comando di sbavature, il comando viene alimentato l'oggetto blob dal suo standard input, e la sua uscita standard è utilizzato per aggiornare il file worktree. Allo stesso modo, il comando pulita viene utilizzato per convertire il contenuto del file di worktree al momento della registrazione. Un uso del filtraggio contenuto è per massaggiare il contenuto in una forma che è più conveniente per la piattaforma, file system, e l'utente ad utilizzare. Per questa modalità di funzionamento, la frase chiave è più conveniente e non trasformare qualcosa inutilizzabile in utilizzabile. In altre parole, l'intento è che se qualcuno disinserisce la definizione driver di filtro, o non avere il programma filtro appropriato, il progetto dovrebbe essere ancora utilizzabile. Un altro uso del filtraggio dei contenuti è quella di memorizzare il contenuto che non può essere utilizzato direttamente nel repository (ad esempio, un UUID che si riferisce al vero contenuto memorizzato al di fuori Git, o un contenuto crittografato) e di trasformarlo in una forma utilizzabile al momento del checkout (ad esempio scaricare il contenuto esterno, o decifrare il contenuto criptato). Questi due filtri comportano in modo diverso, e per impostazione predefinita, un filtro è preso come il primo, massaggiando il contenuto in forma più conveniente. Una definizione driver di filtro mancante nella configurazione, o un driver di filtro che esce con un non-zero di stato, non è un errore, ma rende il filtro di una no-op passante. Si può dichiarare che un filtro trasforma un contenuto che di per sé è inutilizzabile in un contenuto utilizzabile impostando la variabile di configurazione filter. ltdrivergt. required su true. Per esempio, in. gitattributes, si dovrebbe assegnare l'attributo di filtro per i percorsi. Poi si sarebbe definire una configurazione filter. indent. clean e filter. indent. smudge nel vostro. gitconfig per specificare un paio di comandi per modificare il contenuto di programmi C, quando i file di origine vengono controllati in (pulita viene eseguito) e controllato ( nessun cambiamento è fatto perché il comando è cat). Per ottenere i migliori risultati, pulito non dovrebbe alterare la sua uscita ulteriormente se viene eseguito due volte (clean8594clean dovrebbe essere equivalente per la pulizia), e più comandi sbavature non dovrebbe alterare l'uscita pulita s (smudge8594smudge8594clean dovrebbe essere equivalente per la pulizia). Vedere la sezione sulla fusione di seguito. Il filtro trattino è ben comportata in questo senso: non modificherà di ingresso che è già rientrato in modo corretto. In questo caso, la mancanza di un filtro macchia significa che il filtro pulito deve accettare la propria uscita senza modificarla. Se un filtro deve riuscire per rendere i contenuti memorizzati utilizzabili, si può constatare che è richiesto il filtro. nella configurazione: f sequenza sulla linea di comando del filtro viene sostituito con il nome del file filtro sta lavorando. Un filtro potrebbe utilizzare questo in sostituzione di parole chiave. Ad esempio: Notare che f è il nome del percorso che si sta lavorando. A seconda della versione che viene filtrata, il file corrispondente sul disco non può esistere, o possono avere contenuti differenti. Così, i comandi sbavature e puliti non dovrebbero cercare di accedere al file su disco, ma solo agire come filtri sul contenuto fornito loro sullo standard input. L'interazione tra checkincheckout attributi nel check-in percorsi di codice, il file worktree viene prima convertito con driver di filtro (se specificato e corrispondenti conducente definito), poi il risultato viene elaborato con ident (se specificato), e infine con il testo (di nuovo, se specificato e applicabili). Nel percorsi di codice check-out, il contenuto blob viene prima convertito con il testo. e poi ident e nutriti da filtrare. La fusione rami con checkincheckout differenti attributi Se sono stati aggiunti gli attributi a un file che causano il formato repository canonica per quel file per cambiare, come l'aggiunta di un filtro cleansmudge o texteolident attributi, fondendo nulla in cui l'attributo non è a posto normalmente causare unire conflitti . Per evitare questi conflitti di unione inutili, Git può essere detto di eseguire un check-out virtuale e il check-in di tutte le tre fasi di un file quando si risolve una fusione a tre vie impostando la variabile di configurazione merge. renormalize. Questo impedisce cambiamenti causati dalla conversione del check-in da causare conflitti di unione spurie quando un file convertito viene fusa con un file non convertito. Finché un risultato smudge8594clean nella stessa uscita come una pulita anche su file che sono già macchiato, questa strategia risolverà automaticamente tutti i conflitti di filtro-related. I filtri che non agiscono in questo modo possono causare conflitti di unione aggiuntive che devono essere risolti manualmente. Generazione di testo diff Il diff attributo influisce sul modo in Git genera diff per file particolari. Si può dire Git se generare una patch di testo per il percorso o per trattare il percorso come un file binario. Si può anche interessare quale linea viene visualizzato sul - k intestazione pezzo, l n, m linea, dire a Git di utilizzare un comando esterno per generare il diff, o chiedere Git per convertire i file binari in un formato di testo prima di generare il diff. Un percorso a cui è impostato l'attributo diff viene trattato come testo, anche quando contengono valori di byte che normalmente non compaiono nel file di testo, come ad esempio NUL. Un percorso in cui l'attributo diff è disinserito genererà file binari differiscono (o di una patch binario, se patch binarie sono abilitati). Un percorso in cui l'attributo diff è specificato prima ottiene i suoi contenuti controllati, e se sembra che il testo ed è più piccolo di core. bigFileThreshold, viene trattato come testo. Altrimenti sarebbe generare file binari differiscono. Diff è mostrato utilizzando il driver diff specificato. Ogni conducente può specificare una o più opzioni, come descritto nella sezione seguente. Le opzioni per il driver foo diff sono definiti dalle variabili di configurazione nella sezione diff. foo del file di configurazione Git. Definizione di un driver esterno diff La definizione di un driver diff è fatto in gitconfig. Non gitattributes file, in modo strettamente parlando questa pagina di manuale è un posto sbagliato per parlarne. However8230 Per definire un driver diff jcdiff esterno. aggiungere una sezione al file GITDIRconfig (o file HOME. gitconfig) in questo modo: quando Git ha bisogno di visualizzare la diff per il percorso con l'attributo diff impostato jcdiff. chiama il comando specificato con la configurazione di cui sopra, cioè j-c-diff. con 7 parametri, proprio come il programma GITEXTERNALDIFF si chiama. Vedere git (1) per i dettagli. Definizione di un pezzo-header personalizzato Ogni gruppo di modifiche (chiamato un pezzo) in output testuale diff è preceduto da una linea di forma: Questo si chiama un colpo di testa fusto. La porzione di testo è di default una linea che inizia con un alfabeto, una sottolineatura o il simbolo del dollaro questo corrisponde quali GNU diff usi - p uscita. Questa selezione di default, tuttavia, non è adatto per alcuni contenuti, ed è possibile utilizzare un modello personalizzato per effettuare una selezione. In primo luogo, in. gitattributes, si assegna l'attributo diff per i percorsi. Quindi, si potrebbe definire una configurazione diff. tex. xfuncname per specificare una espressione regolare che corrisponde a una linea che si vuole apparire come il testo dell'intestazione fusto. Aggiungere una sezione al file GITDIRconfig (o file HOME. gitconfig) come questo: Nota. Un unico livello di backslash vengono mangiati dal file di configurazione parser, per cui si avrebbe bisogno di raddoppiare le barre inverse il modello di cui sopra preleva una linea che inizia con una barra rovesciata, e zero o più occorrenze di sub seguita dalla sezione seguito da parentesi aperta, per la fine della riga. Ci sono alcuni modelli built-in per rendere questo più facile, e Tex è uno di loro, in modo da non dover scrivere quanto sopra nel file di configurazione (è ancora necessario per attivare questo con il meccanismo di attributo, via. gitattributes). Di seguito costruiti in modelli sono disponibili: ada adatto per il codice sorgente nel linguaggio Ada. BibTEX adatto per i file con riferimenti BibTeX codificati. cpp adatto per il codice sorgente nei linguaggi C e C. csharp adatto per il codice sorgente nel linguaggio C. Fortran adatto per il codice sorgente nel linguaggio Fortran. fontana adatto per i documenti fontana. html adatto per i documenti HTMLXHTML. java adatto per il codice sorgente in linguaggio Java. MATLAB adatto per il codice sorgente nel linguaggio MATLAB. objc adatto per il codice sorgente nel linguaggio Objective-C. pascal adatto per il codice sorgente nella lingua PascalDelphi. perl adatto per il codice sorgente in linguaggio Perl. php adatto per il codice sorgente in linguaggio PHP. pitone adatto per il codice sorgente nel linguaggio Python. rubino adatto per il codice sorgente nel linguaggio Ruby. tex adatto per il codice sorgente per i documenti LaTeX. Personalizzazione parola diff È possibile personalizzare le regole che git diff --word-diff usa per separare le parole in una linea, specificando una espressione regolare appropriata nella variabile di configurazione diff..wordRegex. Ad esempio, in TeX backslash seguito da una sequenza di lettere forma un comando, ma molti di questi comandi può essere eseguito insieme senza intervenire spazi. Per separarli, usare una espressione regolare nel file GITDIRconfig (o file HOME. gitconfig) in questo modo: Un modello integrato è previsto per tutte le lingue elencate nella sezione precedente. Esecuzione di diff di testo di file binari A volte è desiderabile per vedere il diff di una versione di testo convertito di alcuni file binari. Ad esempio, un documento di word processor può essere convertito in una rappresentazione di testo ASCII, e il diff del testo visualizzato. Anche se questa conversione perde alcune informazioni, il diff risultante è utile per la visione umana (ma non può essere applicato direttamente). L'opzione Textconv configurazione viene utilizzata per definire un programma per effettuare una tale conversione. Il programma dovrebbe prendere un singolo argomento, il nome di un file da convertire, e produrre il testo risultante su stdout. Ad esempio, per mostrare il diff dei dati exif di un file al posto del informazioni binarie (ammesso che abbiate lo strumento Exif installato), aggiungere la seguente sezione al file GITDIRconfig (o file HOME. gitconfig): La conversione di testo è in genere una conversione a senso unico in questo esempio, si perde il contenuto dell'immagine reale e concentrarsi solo sui dati di testo. Ciò significa che diff generati da Textconv non sono adatti per l'applicazione. Per questo motivo, solo diff git e il registro famiglia git di comandi (cioè log, WhatChanged, spettacolo) eseguirà la conversione di testo. git format-patch non potrà mai generare questa uscita. Se si desidera inviare a qualcuno un diff testo convertito di un file binario (per esempio perché trasmette rapidamente le modifiche apportate), si dovrebbe generare separatamente e inviarlo come un commento in aggiunta alla solita diff binario che si potrebbe inviare . Poiché la conversione di testo può essere lento, soprattutto quando si fa un gran numero di loro con git log - p. Git fornisce un meccanismo per memorizzare nella cache l'output e utilizzarlo in diff futuri. Per abilitare la cache, impostare la variabile cachetextconv in diff driver8217s config. Per esempio: Questo cache il risultato dell'esecuzione di exif su ogni blob a tempo indeterminato. Se si modifica la variabile Textconv di configurazione per un pilota diff, Git invalida automaticamente le voci di cache e rieseguire il filtro Textconv. Se si vuole invalidare la cache manualmente (ad esempio perché la versione di Exif è stato aggiornato e ora produce un output migliore), è possibile rimuovere la cache manualmente con refsnotestextconvjpg - d git update-ref (dove jpg è il nome del driver diff, come nell'esempio di cui sopra). La scelta Textconv contro diff esterno Se si desidera mostrare le differenze tra blob binari o appositamente formattata nella repository, è possibile scegliere di utilizzare un comando esterno diff, o per usare Textconv per convertirli in un formato di testo diff-grado. Quale metodo si sceglie dipende dalla vostra situazione esatta. Il vantaggio di utilizzare un comando esterno diff è la flessibilità. Non sono tenuti a trovare cambi di line-oriented, né è necessario per l'uscita di assomigliare diff unificato. Siete liberi di individuare e comunicare le variazioni nel modo più appropriato per il formato dei dati. Un Textconv, in confronto, è molto più limitante. Si fornisce una trasformazione dei dati in un formato di testo line-oriented, e Git utilizza i suoi strumenti diff regolari per generare l'output. Ci sono molti vantaggi a scegliere questo metodo: Facilità d'uso. Spesso è molto più semplice da scrivere un binario al testo trasformazione di quello che è di svolgere il proprio diff. In molti casi, i programmi esistenti possono essere utilizzati come Textconv filtri (ad esempio Exif, odt2txt). Git caratteristiche diff. Eseguendo solo la trasformazione passo da soli, si può ancora utilizzare molte delle caratteristiche Git8217s diff, tra cui la colorazione, la parola-diff, e diff combinati per unioni. Caching. Textconv caching può accelerare diff ripetuti, come quelli che si potrebbe innescare eseguendo git log - p. Marcatura file in formato binario Git di solito indovina se un blob contiene testo o dati binari esaminando l'inizio dei contenuti. Tuttavia, a volte si può decidere di ignorare la sua decisione, sia perché un blob contiene dati binari più avanti nel file, o perché il contenuto, mentre tecnicamente composta da caratteri di testo, è opaco per un lettore umano. Per esempio, molti file PostScript contengono solo caratteri ASCII, ma producono diff rumorosi e senza senso. Il modo più semplice per contrassegnare un file come binario è quello di disinserire l'attributo diff nel file. gitattributes: Questo farà sì che Git per generare file binari differiscono (o di una patch binario, se patch binarie sono abilitati) al posto di un diff regolare. Tuttavia, si può anche voler specificare altri attributi del driver diff. Ad esempio, si potrebbe desiderare di utilizzare Textconv per convertire i file PostScript in una rappresentazione ASCII per la visualizzazione umana, ma per il resto trattarli come file binari. Non è possibile specificare sia - diff e diffps attributi. La soluzione è quella di utilizzare l'opzione di configurazione diff..binary: Esecuzione di un tre vie di unione La fusione attributo influisce sul modo in tre versioni di un file vengono uniti quando una fusione a livello di file è necessario durante git merge. e di altri comandi come git revert e git cherry-pick. Incasso 3 vie driver di unione viene utilizzato per unire il contenuto in un modo simile a fondere comando RCS interno. Questo è adatto per i file di testo ordinari. Prendere la versione dal ramo corrente come il risultato di fusione sperimentale, e dichiarare che l'unione ha conflitti. Questo è adatto per i file binari che non dispongono di una semantica di unione ben definiti. Per impostazione predefinita, utilizza lo stesso built-in 3-way driver di merge come è il caso quando l'attributo merge è impostato. Tuttavia, la variabile di configurazione merge. default può nome del driver di unione diversa da utilizzare con percorsi per i quali l'attributo di fusione non è specificato. 3-way merge viene eseguita utilizzando il driver di fusione personalizzato specificato. Il driver merge built-in a 3 vie può essere specificato in modo esplicito, chiedendo per il driver di testo incorporato nel prendere il conducente ramo corrente può essere richiesto con binario. Built-in si fondono driver Ci sono alcuni driver built-in di basso livello si fondono definiti che può essere chiesto tramite l'attributo di unione. Solita livello di file a 3 vie di unione per i file di testo. regioni in conflitto sono contrassegnate con marcatori di conflitto ltltltltltltlt. e gtgtgtgtgtgtgt. La versione dal ramo compare prima del marcatore, e la versione dal ramo unito appare dopo il marcatore. Mantenere la versione dal ramo nell'albero lavoro, ma lasciare il percorso nello stato di conflitto per l'utente di risolvere. Eseguire 3 vie livello di file di unione per i file di testo, ma prendere le linee da entrambe le versioni, invece di lasciare marcatori di conflitto. Questo tende a lasciare le linee aggiunte nel file risultante in ordine casuale e l'utente deve verificare il risultato. Non utilizzare questo se non si capisce le implicazioni. Definizione di un driver di fusione personalizzato La definizione di un driver di unione viene eseguita nel file. gitconfig, non nel file gitattributes, quindi a rigor di termini Questa pagina di manuale è un posto sbagliato per parlarne. However8230 Per definire un driver di fusione personalizzato filfre. aggiungere una sezione al file GITDIRconfig (o file HOME. gitconfig) in questo modo: la variabile merge..name offre al conducente un nome leggibile. Il 8216merge..driver variable8217s valore viene utilizzato per costruire un comando da eseguire per unire versione ancestor8217s (O), la versione corrente (A) e l'altra versione branches8217 (B). Questi tre gettoni vengono sostituiti con i nomi dei file temporanei che contengono il contenuto di queste versioni quando la linea di comando è costruito. Inoltre, L sarà sostituito con la dimensione marcatore conflitto (vedi sotto). Il driver di fusione si prevede di lasciare il risultato della fusione nel file chiamato con A sovrascrivendo, e uscire con stato zero se è riuscita a unirle in modo pulito, o non-zero se non ci fossero conflitti. La variabile merge..recursive specifica quale altro driver di fusione da utilizzare quando il conducente di fusione viene chiamata per una fusione interna tra antenati comuni, quando ci sono più di uno. Se lasciato non specificato, il driver stesso viene utilizzato sia per la fusione interna e la fusione finale. Il conducente merge può imparare il percorso in cui verrà memorizzato il risultato unito tramite segnaposto P. conflitto marcatore-size Questo attributo controlla la lunghezza dei marcatori di conflitto hanno lasciato nel file di albero di lavoro durante una fusione in conflitto. Solo impostando il valore di un numero intero positivo ha un effetto significativo. Ad esempio, questa linea in. gitattributes può essere utilizzato per dire al meccanismo di unione di lasciare molto più tempo (invece dei soliti 7 caratteri a lungo) marcatori di conflitto quando si unisce il file dei risultati Documentationgit-merge. txt in un conflitto. Controllo errori di spaziatura la spaziatura allo variabile di configurazione core. whitespace consente di definire ciò che diff e applicare dovrebbe prendere in considerazione gli errori di spazio bianco per tutti i percorsi del progetto (vedi git-config (1)). Questo attributo offre un controllo più fine per percorso. Si noti tutti i tipi di errori di spaziatura potenziali noti a Git. La larghezza scheda viene preso dal valore della variabile di configurazione core. whitespace. Non accorgersi di nulla come errore. Utilizzare il valore della variabile di configurazione core. whitespace decidere cosa notare come errore. Specificare una virgola elenco separato di problemi comuni spazio bianco a notare nello stesso formato come la variabile di configurazione core. whitespace. Creazione di un archivio di file e directory di esportazione-ignorare con l'attributo di esportazione-ignorare won8217t essere aggiunto per archiviare i file. export-subst Se l'attributo di esportazione-sost è impostato per un file, allora Git si espanderà diversi segnaposti quando si aggiunge questo file in un archivio. L'espansione dipende dalla disponibilità di un ID commit, cioè se git-archivio (1) è stato dato un albero invece di un commit o un tag, allora nessuna sostituzione sarà fatto. I segnaposto sono gli stessi per l'opzione --prettyformat: di git-log (1). solo che hanno bisogno di essere avvolto in questo modo: Formato: segnaposto nel file. Per esempio. La stringa di formato: H sarà sostituito dal hash commettere. Oggetti d'imballaggio compressione Delta non sarà tentato di blob per i percorsi con il delta attributo impostato su false. Visualizzazione dei file in strumenti grafici Il valore di questo attributo specifica la codifica dei caratteri che deve essere utilizzato da strumenti grafici (ad esempio gitk (1) e git-gui (1)) per visualizzare il contenuto del file in questione. Si noti che a causa di prestazioni considerazioni gitk (1) non utilizza questo attributo a meno che non si attiva manualmente codifiche per file nelle sue opzioni. Se questo attributo non è impostato o ha un valore non valido, il valore della variabile di configurazione gui. encoding è usato al posto (vedere git-config (1)). UTILIZZO MACRO attributi che non si desidera alcuna conversione di fine linea applicati a, né diff testuali prodotti per, qualsiasi file binario che si traccia. Si avrebbe bisogno di specificare ad esempio ma che possono diventare ingombrante, quando si hanno molti attributi. Utilizzando attributi macro, è possibile definire un attributo che, se impostato, imposta anche o disinserisce un certo numero di altri attributi allo stesso tempo. Il sistema conosce un attributo built-in macro, binario: Impostare l'attributo binario disinserisce anche il testo e gli attributi diff come sopra. Si noti che gli attributi macro può essere impostato solo, anche se l'impostazione si potrebbe avere l'effetto di inserimento o il disinserimento altri attributi o anche il ritorno di altri attributi allo stato specificato. DEFINING MACRO ATTRIBUTES Custom macro attributes can be defined only in top-level gitattributes files ( GITDIRinfoattributes . the. gitattributes file at the top level of the working tree, or the global or system-wide gitattributes files), not in. gitattributes files in working tree subdirectories. The built-in macro attribute binary is equivalent to: If you have these three gitattributes file: the attributes given to path tabc are computed as follows: By examining t. gitattributes (which is in the same directory as the path in question), Git finds that the first line matches. merge attribute is set. It also finds that the second line matches, and attributes foo and bar are unset. Then it examines. gitattributes (which is in the parent directory), and finds that the first line matches, but t. gitattributes file already decided how merge . foo and bar attributes should be given to this path, so it leaves foo and bar unset. Attribute baz is set. Finally it examines GITDIRinfoattributes . This file is used to override the in-tree settings. The first line is a match, and foo is set, bar is reverted to unspecified state, and baz is unset. As the result, the attributes assignment to tabc becomes:

Comments

Popular Posts