Friday 1 September 2017

Git Mark File As Binario Options


Git solito indovina se un blob contiene testo o dati binari esaminando l'inizio del contenuto. 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. In sintesi: specificare - diff in. gitattributes. out della scatola, git può facilmente aggiungere i file binari per il suo indice, e li memorizza in modo efficiente a meno che non frequenti aggiornamenti su file di grandi dimensioni uncompressable. I problemi iniziano quando git deve generare diff e si fonde: git non può generare diff significativi, o unire file binari in alcun modo che potrebbe avere un senso. Quindi tutte le unioni, rebases o cherrypicks che coinvolgono una modifica a un file binario vi coinvolgerà facendo una risoluzione dei conflitti manuale su quel file binario. È necessario decidere se i cambiamenti dei file binari sono abbastanza raro che si può vivere con il lavoro manuale in più che provocano nel normale flusso di lavoro che coinvolge git merge, rebases, cherrypicks. Risposi 15 gennaio 11 in 00:21 non so di eventuali strumenti che cercano di memorizzare diff dei file binari per il controllo di versione, ma vale la pena notare che Git pretende molto fare questo anche per i file di testo. Git file come blob, e fa un diff tra di loro quando è necessario. Se siete alla ricerca di fare il controllo di versione su qualcosa come documenti PhotoshopIllustrator, Gridiron flusso potrebbe fare il trucco per voi. Se siete cercando di tenerli in sincronia tra le macchine, Dropbox o Rsync in grado di gestire, ma arent intenzione di fare intelligente diff-ing. ha risposto 15 gennaio 11 in 0: 15DESCRIPTION Questo comando aggiorna l'indice utilizzando il contenuto corrente trovato nella struttura di lavoro, per preparare il contenuto messo in scena per il prossimo commit. Tipicamente aggiunge il contenuto corrente percorsi esistenti nel loro complesso, ma con alcune opzioni può anche essere usato per aggiungere contenuti con solo una parte delle modifiche apportate ai file albero di lavoro applicato, o rimuovere i percorsi che non esistono nel albero di lavoro più. L'indice contiene un'istantanea del contenuto di albero di lavoro, ed è questa istantanea che viene preso come il contenuto del successivo impegnano. Così dopo aver apportato modifiche al albero di lavoro, e prima di eseguire il comando commit, è necessario utilizzare il comando Add per aggiungere tutti i file nuovi o modificati per l'indice. Questo comando può essere eseguito più volte prima di un commit. Si aggiunge solo il contenuto del file specificato (s) al momento il comando add viene eseguito se si desidera che le successive modifiche contenute nella prossima impegnano, quindi è necessario eseguire git aggiungere nuovamente per aggiungere il nuovo contenuto per l'indice. Il comando git status può essere usato per ottenere una sintesi di quali file sono i cambiamenti che sono in scena per il prossimo commit. Il comando git add non aggiungere i file ignorati per impostazione predefinita. Se i file sono stati ignorati esplicitamente specificati sulla riga di comando, git add fallirà con un elenco di file ignorati. file ignorati raggiunti dalla ricorsione directory o file globbing eseguite da Git (citare il vostro gocce prima il guscio) verranno silenziosamente ignorati. Il comando git add può essere utilizzato per aggiungere file ignorati con l'opzione - f (forza). Si prega di consultare git-commit1 di modi alternativi di aggiungere contenuti ad un commit. I file per aggiungere contenuti da. Fileglobs (ad esempio. c) può essere somministrato per aggiungere tutti i file corrispondenti. Anche un nome leader di directory (ad esempio dir aggiungere dirfile1 e dirfile2) può essere dato per aggiornare l'indice in modo che corrisponda allo stato corrente della directory nel suo complesso (ad esempio specificando dir registra non solo un file dirfile1 modificati nella struttura di lavoro, una file di dirfile2 aggiunto alla struttura di lavoro, ma anche un file di dirfile3 rimosso dalla albero di lavoro. si noti che le vecchie versioni di Git utilizzati per ignorare i file rimossi usano --no-tutto se si desidera aggiungere i file modificati o nuovi, ma ignora quelli rimossi . Don8217t effettivamente aggiungere il file (s), solo mostrare se esistono Andor verrà ignorato. consentire l'aggiunta di file altrimenti ignorati. Aggiungere contenuti modificati nella struttura di lavorare in modo interattivo per l'indice. percorsi come argomenti opzionali possono essere forniti per limitare il funzionamento di un sottoinsieme del albero di lavoro. Vedere 8220Interactive mode8221 per i dettagli. interattivo scegliere grossi pezzi di cerotto tra l'indice e l'albero di lavoro e aggiungerli all'indice. Questo offre all'utente la possibilità di verificare la differenza prima di aggiungere contenuti modificati per l'indice. Questo viene eseguito in modo efficace aggiungere --interactive. ma ignora il comando di menu iniziale e direttamente salti al sottocomando patch. Vedere 8220Interactive mode8221 per i dettagli. Aprire il diff contro l'indice in un editor e consentire all'utente di modificarlo. Dopo l'editor è stato chiuso, regolare le intestazioni Hunk e applicare la patch per l'indice. L'intento di questa opzione è di scegliere le linee della patch da applicare, o addirittura di modificare il contenuto di linee che si terrà. Questo può essere più veloce e più flessibile utilizzando il selettore pezzo interattivo. Tuttavia, è facile confondere se stessi e creare una patch che non si applica all'indice. Vedi il montaggio di patch qui sotto. Aggiornare l'indice proprio dove si ha già una ltpathspecgt voce corrispondente. Ciò elimina così come modifica voci di indice per abbinare l'albero di lavoro, ma non aggiunge nuovi file. Se non ltpathspecgt è dato quando si utilizza l'opzione - u, tutti i file monitorati in tutto l'albero di lavoro vengono aggiornati (le vecchie versioni di Git utilizzati per limitare l'aggiornamento alla directory corrente e nelle sue sottodirectory). Aggiornare l'indice non solo dove l'albero di lavoro ha un file corrispondente ltpathspecgt ma anche dove l'indice ha già una voce. Questo aggiunge, modifica e rimuove le voci di indice per abbinare l'albero di lavoro. Se non ltpathspecgt è dato quando si utilizza l'opzione - A, tutti i file in tutto l'albero di lavoro vengono aggiornati (le vecchie versioni di Git utilizzati per limitare l'aggiornamento alla directory corrente e nelle sue sottodirectory). Aggiornare l'indice con l'aggiunta di nuovi file che sono sconosciuti al indice e file modificati nella struttura di lavoro, ma ignorare i file che sono stati rimossi dall'albero di lavoro. Questa opzione è un no-op quando non viene utilizzato alcun ltpathspecgt. Questa opzione è principalmente quello di aiutare gli utenti che sono abituati a vecchie versioni di Git, il cui git add ltpathspecgt82308203 era sinonimo di git add --no-tutto ltpathspecgt82308203, cioè ignorato i file rimossi. Registra solo il fatto che il percorso verrà aggiunto in seguito. Una voce per il percorso viene inserito nell'indice senza contenuti. Questo è utile per, tra le altre cose, che mostra il contenuto Unstaged di tali file con git diff e li impegna con git commit - a. Don8217t aggiungere il file (s), ma aggiornare solo la loro stat () le informazioni nell'indice. Se alcuni file non possono essere aggiunti a causa di errori loro indicizzazione, non annullare l'operazione, ma continuare ad aggiungere gli altri. Il comando deve ancora uscire con stato diverso da zero. I add. ignoreErrors delle variabili di configurazione possono essere impostate su true per rendere questo il comportamento di default. Questa opzione può essere utilizzata solo in combinazione con --dry-run. Utilizzando questa opzione, l'utente può verificare se uno dei file specificati sarebbero ignorati, non importa se sono già presenti nella struttura di lavoro o no. Sovrascrivere il bit di esecuzione dei file aggiunti. Il bit eseguibile viene modificato solo l'indice, i file sul disco restano invariati. Questa opzione può essere utilizzata per separare le opzioni della riga di comando dalla lista di file, (utile quando i nomi dei file potrebbero essere scambiati per le opzioni della riga di comando). Configurazione La variabile di configurazione opzionale core. excludesFile indica un percorso di un file contenente i modelli di nomi di file da escludere dalla git-add, simile a GITDIRinfoexclude. Patterns in file escludere vengono utilizzati in aggiunta a quelli in infoexclude. Vedi gitignore5. Aggiunge il contenuto da tutti i file. txt sotto directory Documentation e nelle sue sottodirectory: Si noti che l'asterisco è citato dal guscio in questo esempio questo consente il comando include i file dalla sottodirectory di directory Documentation. Considera l'aggiunta di contenuti da tutti gli script git-.sh: Perché questo esempio consente la shell di espandere l'asterisco (vale a dire che si sta elencando i file in modo esplicito), non considera subdirgit-foo. sh. La modalità interattiva Quando il comando entra nel modo interattivo, mostra l'output del sottocomando stato, e poi va nel suo ciclo di comando interattivo. Il comando loop mostra l'elenco dei sottocomandi disponibili, e fornisce un prompt Cosa nowgt. In generale, quando la richiesta termina con un singolo gt. è possibile scegliere solo una delle scelte rilasciate e tipo di ritorno, come questo: Si potrebbe dire anche s o STA o stato sopra fino a quando la scelta è unica. Il ciclo di comando principale dispone di 6 subcommands (più aiuto e uscire). Questo dimostra la variazione tra la testa e l'indice (cioè quello che sarà impegnato se dici git commit), e tra l'indice e il file di albero di lavoro (vale a dire quello che si potrebbe mettere in scena ulteriormente prima di git commit con git add) per ogni percorso. Un esempio di output è simile al seguente: Si dimostra che foo. png ha differenze dalla testa (ma che è binario così conteggio linea non può essere mostrato) e non vi è alcuna differenza tra la copia e la versione indicizzata albero di lavoro (se la versione albero di lavoro sono stati anche differente, binario sarebbe stato mostrato al posto del nulla). L'altro file, git-add interactive. perl, ha 403 linee aggiunte e le 35 linee eliminati se si commettono ciò che è nell'indice, ma lavorare file dell'albero ha ulteriori modifiche (una addizione ed una soppressione). Questo mostra le informazioni di stato ed emette un prompt Updategtgt. Quando il prompt termina con doppio gtgt. è possibile effettuare più di una selezione, concatenato con spazi o virgole. Inoltre è possibile dire gamme. Per esempio. 2-5 7,9 per scegliere 2,3,4,5,7,9 dalla lista. Se il secondo numero in un intervallo viene omesso, vengono prese tutte le patch rimanenti. Per esempio. 7- scegliere 7,8,9 dalla lista. Si può dire di scegliere tutto. Che cosa si è scelto vengono poi evidenziati con. in questo modo: per rimuovere la selezione, precedere l'ingresso con - in questo modo: Dopo aver effettuato la selezione, rispondere con una linea vuota per mettere in scena il contenuto dei file di lavoro albero per i percorsi selezionati nell'indice. Questo ha una molto simile UI per aggiornare. e l'informazione rappresentata per percorsi selezionati sono ritornato a quello della versione HEAD. Ripristino nuovi percorsi li rende non tracciata. Questo ha una molto simile UI per aggiornare e ripristinare. e consente di aggiungere percorsi non monitorate all'indice. Questo ti permette di scegliere un percorso di uno stato come la selezione. Dopo aver scelto il percorso, che presenta la diff tra l'indice e il file di albero di lavoro e si chiede se si desidera mettere in scena il cambio di ogni pezzo. È possibile selezionare una delle seguenti opzioni e tipo di ritorno: Dopo aver deciso il destino per tutti i fusti, se c'è qualche pezzo che è stato scelto, l'indice viene aggiornato con gli hunk selezionati. È possibile omettere dover digitare tornare qui, impostando la variabile di configurazione interactive. singleKey su true. Questo consente di rivedere ciò che sarà impegnata (vale a dire tra la testa e l'indice). Il montaggio di patch Invocare git add - e oppure selezionando e dal selettore pezzo interattivo si aprirà una patch nel vostro editor dopo che Vim termini, il risultato viene applicato per l'indice. Siete liberi di apportare modifiche arbitrarie alla patch, ma nota che alcuni cambiamenti possono avere risultati confusi, o addirittura provocare una patch che non può essere applicata. Se si vuole annullare l'operazione del tutto (cioè fase nulla di nuovo nell'indice), è sufficiente eliminare tutte le linee della patch. L'elenco che segue descrive alcune cose comuni che si possono vedere in una patch, e che le operazioni di editing hanno senso su di loro. contenuto aggiunto è rappresentato da linee che iniziano con 43. È possibile evitare in scena tutte le linee di addizione per eliminarli. Rimosso contenuto è rappresentato da linee che iniziano con -. È possibile impedire in scena la loro rimozione dalla conversione del - a un (spazio). contenuto modificato è rappresentata da - linee (rimuovendo il vecchio contenuto) seguita da 43 linee (aggiungendo il contenuto di sostituzione). È possibile impedire in scena la modifica convertendo - linee a, e la rimozione di 43 linee. Attenzione che modifica solo la metà della coppia è probabile di introdurre cambiamenti confusi all'indice. Ci sono anche operazioni più complesse che possono essere eseguite. Ma attenzione perché il cerotto viene applicato solo l'indice e non l'albero di lavoro, viene visualizzato l'albero che lavora per annullare la variazione dell'indice. Ad esempio, l'introduzione di una nuova linea nell'indice che è in né il capo né l'albero di lavoro andrà in scena la nuova linea per commettere, ma apparirà la linea da ritornato nella struttura di lavoro. Evitare l'uso di questi costrutti, o farlo con estrema cautela. rimozione intatta Content contenuti che non differisce tra l'indice e l'albero di lavoro può essere visualizzato su linee di contesto, a cominciare da un (spazio). È possibile organizzare le linee di contesto per la rimozione convertendo lo spazio per un -. Apparirà il file risultante albero lavorando per aggiungere nuovamente il contenuto. modificare i contenuti esistenti Si può anche modificare le linee di contesto da loro messa in scena per la rimozione (convertendo a -) e l'aggiunta di una linea 43 con il nuovo contenuto. Allo stesso modo, si possono modificare le 43 linee per aggiunte o modifiche esistenti. In tutti i casi, la nuova modifica apparirà ripristinato nella albero di lavoro. È inoltre possibile aggiungere nuovi contenuti che non esiste nella patch è sufficiente aggiungere nuove righe, ciascuna a partire da 43. L'aggiunta apparirà ritornato nella struttura di lavoro. Ci sono anche diverse operazioni che dovrebbero essere evitati del tutto, come faranno la patch impossibile da applicare: l'aggiunta di contesto () o la rimozione (-) le linee eliminazione di contesto o di rimozione linee modificare il contenuto di contesto o la rimozione linesGit Risoluzione dei conflitti Il processo di risoluzione dei conflitti in Git è un po 'diverso per ogni comando git. Questo tutorial vi guiderà attraverso le principali variazioni. La pagina man per git-merge (1) da maggior informazioni sul processo di risoluzione dei conflitti. Vedere le due sezioni: come i conflitti sono presentati e come risolvere i conflitti. Tuttavia, rebase, sono, e si applicano anche avere un processo di risoluzione dei conflitti che è diverso, ma non come ben documentato. Si noti, tuttavia, che la documentazione per git migliora continuamente, quindi è una buona idea di leggere attraverso di essa per vedere cosa c'è. Quali comandi potrebbero darci conflitti Quelli Mergy, naturalmente: Git versione Git è in costante miglioramento. Per riferimento, l'output dei comandi in questo documento è stata generata utilizzando la seguente versione git: Setup: diff3 merge. conflictstyle Prima di addentrarci la risoluzione dei conflitti, abbiamo bisogno di dare uno sguardo alla impostazione merge. conflictstyle. Si è documentato in git-config (1) insieme a molti altri unione. impostazioni che potrebbero essere interessanti per indagare. merge. conflictstyle ha due valori possibili. Merge è il default e questo dà a due vie informazioni conflitto in un file in conflitto. diff3 è l'altro valore possibile, e questo dà a tre vie informazioni conflitto che può essere molto più utile. Ecco un esempio. In primo luogo, lascia andare con il valore predefinito di unione: Questo ci dà due vie marcatori di risoluzione dei conflitti che mostrano solo lo stato corrente di ogni ramo: Il passaggio a diff3: E otteniamo marcatori di risoluzione dei conflitti a tre vie che includono lo stato originale con lo stato attuale di ogni ramo. il file originale prima delle variazioni aveva Ciao, originale .. il maestro (HEAD) ramo ha Ciao, cambiamento padrone, e il ramo b1 ha Ciao, cambiamento derivazione B1 .. Questo a tre vie diff possono essere molto utile per determinare ciò che è realmente cambiato, quindi vi consiglio di lavorare con merge. conflictstyle impostato diff3. Ancora più utile è uno strumento grafico di unione come kdiff3. Vedere git mergetool sotto per i dettagli. Ecco lo script che uso per generare una serie di conflitti con cui giocare. merge git è la mergiest di tutti i comandi Mergy git. Anche se si utilizza principalmente rebase o AM, è una buona idea per trascorrere un po 'di tempo a familiarizzare con il modo di risolvere i conflitti con git merge. Molto di ciò che si impara qui vi riporto per gli altri comandi Mergy. Basta tenere a mente che ci sono sottili differenze che possono essere molto fastidioso. Data la configurazione descritta in alcuni conflitti di cui sopra, proviamo a fondersi b1 in master. E 'importante notare che la fusione si traduce in una nuova unione commit che ha due genitori. Quindi, un conflitto in questo processo si ferma la creazione di che commettono. Il nostro obiettivo è quello di risolvere i conflitti, stadio (aggiungere) i file, e completare il commit. Unisci ci fa sapere weve ha ottenuto alcuni conflitti. git status può essere utilizzato in qualsiasi momento per vedere quali percorsi unmerged bisogno di risoluzione dei conflitti: Si noti che git ci dà anche alcune istruzioni di base per affrontare la situazione: risolvere i conflitti ed eseguire git commit. Utilizzare git diff per esaminare i conflitti in un file: risolvere i conflitti A questo punto, siamo in grado di modificare i file in conflitto e risolvere i conflitti manualmente. Se ci sono un gran numero di conflitti git mergetool e uno strumento di unione GUI come kdiff3 rendere le cose più facili. Vedere la sezione mergetool git per i dettagli. Git offre alcune funzioni semplici di risoluzione dei conflitti. Siamo in grado di prendere tutte le modifiche dal ramo che stiamo fusione in master utilizzando --theirs checkout: Possiamo anche andare con tutte le modifiche da master utilizzando --ours checkout: Se la risoluzione dei conflitti sfugge di mano in un file e vogliamo ricominciare, cassa - m sarà annullare le nostre modifiche: non c'è redo, quindi se youve trascorso molto tempo a lavorare sui conflitti in un file, riflettere attentamente prima di fare questo. Lascia andare con loro per ciao. txt. git diff ci permette di conoscere non ci sono più conflitti da risolvere. Quindi, consente di aggiungere ciao. txt all'indice e controllare lo stato di vedere quali file sono lasciati. Consente di andare avanti e risolvere il resto dei conflitti andando sia con la nostra o la loro. Completa lo stato Commit git ci mostra che non ci sono più unmerged percorsi (conflitti irrisolti), in modo che possiamo concludere l'unione commettendo. Interruzione di un Merge Questo ti riporta al punto in cui eravate prima si è tentato l'unione. State molto attenti con questo come perde qualsiasi lavoro potrebbe essere fatto nella tua copia di lavoro e tutto ciò che potrebbe avere messo in scena nell'indice. Se fai parte vie attraverso una fusione, questo potrebbe essere un po 'estrema a meno che realmente desidera solo per perdere tutto. Quando si tratta di un conflitto in git merge: Usare git status e git diff per scoprire cosa è andato storto. Risolvere i conflitti di uno dei seguenti metodi: Modificare ogni file in conflitto con il proprio editor preferito. mergetool git e uno strumento di unione GUI appropriata come kdiff3. git --theirs checkout o git checkout --ours git checkout - m per annullare la risoluzione dei conflitti su alcuni file. (Attenzione) git aggiungere i file risolti. Se le cose si hosed, uso git merge --abort per ricominciare prima della fusione. (Attenzione) git commit alla fine e uscire dalla modalità di unione. mergetool git combinato con KDiff3 fornisce un modo visivo per affrontare difficili conflitti di unione. Finché si è KDiff3 installato, git mergetool dovrebbe trovarlo. In caso contrario, è possibile specificare lo strumento che si desidera come opzione: In alternativa, è possibile effettuare l'impostazione persistente: Nota: KDiff3 isnt l'unica scelta che hai. Ma è uno dei migliori. Provare per primo, quindi provare gli altri e youll vedere quello che voglio dire. Ho provato fondono per questo come questo è ciò che io di solito uso per diff. Meld era incapace di affrontare i conflitti nel mio scenario di test. Essa, inoltre, non ha fatto alcun fusione per me a tutti. KDiff3 si è rivelata di gran lunga superiore a fondersi. Il mergetool. txt di file che viene prodotto dallo script di alcuni conflitti di cui sopra è specificamente progettato per testare le capacità di git mergetool. Dopo aver eseguito lo script, provare una fusione e quindi provare git mergetool. Si noti che ci verrà chiesto di risolvere i conflitti per ogni file. Premere invio e sarà lanciato kdiff3. Fare clic sulla schermata sopra per una versione full-size. Nella parte superiore ci sono tre versioni del file. L'originale (A), il ramo principale (B), e il ramo b1 (C). In fondo è la versione fusa con conflitti marcati. È possibile fare clic destro su conflitti nel riquadro inferiore e scegliere quale versione si desidera. Con un gran numero di conflitti, questo può essere molto più veloce di rimuovere i marcatori di risoluzione dei conflitti con un editor. mergetool git è probabilmente il migliore per i conflitti complicati. Se tutto quello che vogliamo fare è prendere uno o l'altro all'ingrosso versione, è possibile farlo in kdiff3, ma --ours git checkout (o --theirs) è probabilmente più veloce. Si noti inoltre che kdiff3 probabilmente sopraelevazione gestire i file binari. Per completare l'unione, apportare le modifiche desiderate, premere Salva in kdiff3 ed uscire kdiff3. Questo renderà le modifiche e lo stadio (aggiungere) loro per commettere. mergetool git tende a lasciare i file. orig intorno. Utilizzare git status di trovarli. è possibile eliminare in modo sicuro. (. Git pulito può essere utilizzato per questo, ma attenzione con esso) di Windows Per aiutare Git trovare KDiff3 in Windows, è necessario aggiungere C: Programma FilesKDiff3 alla variabile PATH. Ive ha avuto risultati contrastanti con kdiff3 e Windows. Per semplici progetti di test, è sembrato funzionare bene. Per i progetti più complessi con nomi di directory lunghi e lettere di unità sostituiti, non ha funzionato. Essere preparati per problemi. Rebase è simile a fondersi, ma invece di impegnarsi, usiamo rebase --continue (e talvolta --skip) per terminare il rebase. Data la configurazione descritta in alcuni conflitti di cui sopra, proviamo a rebase al ramo b1 sul master. Rebase ci fa sapere weve ha ottenuto alcuni conflitti. git status può essere utilizzato in qualsiasi momento per vedere quali percorsi unmerged bisogno di risoluzione dei conflitti: Si noti che git ci dà alcune istruzioni di base per affrontare la situazione: risolvere i conflitti e quindi eseguire git rebase --continue. (Queste istruzioni mancano la fase (aggiungere) passo in git 1.8.1.) Usare git diff per esaminare i conflitti in un file: risolvere i conflitti Come per unione, siamo in grado di modificare i file in conflitto e risolvere i conflitti manualmente. Se ci sono un gran numero di conflitti git mergetool e uno strumento di unione GUI come kdiff3 rendere le cose più facili. Mentre rebasing, Git offre alcune funzioni semplici di risoluzione dei conflitti. Siamo in grado di prendere tutte le modifiche dal ramo che stiamo rebasing (b1) utilizzando --theirs checkout. Si noti che questo è indietro da quello che ci si potrebbe aspettare, la loro è quello che stiamo attualmente in: Possiamo anche andare con tutte le modifiche della destinazione (a monte) del rebase (master) utilizzando --ours checkout: Il significato di il loro e il nostro è all'indietro quando rebasing. Se abbiamo b1 controllato e abbiamo REBASE sul maestro, la loro è b1, e il nostro è maestro. (La pagina man per git-checkout menziona il fatto che la nostra si riferisce alla fase 2 e la loro si riferisce alla fase 3. Non sono sicuro che cosa significa, ma potrebbe spiegare perché questi sembrano all'indietro. Prova ls-files git - u per vedere il palco s .) Se la risoluzione dei conflitti sfugge di mano in un file e vogliamo ricominciare da capo, cassa - m sarà annullare le nostre modifiche: non c'è redo, quindi se youve trascorso molto tempo a lavorare sui conflitti in un file, riflettere attentamente prima di fare Questo. Andiamo con loro (da B1) per mergetool. txt. git diff ci permette di conoscere non ci sono più conflitti da risolvere. Quindi, siamo in grado di mettere in scena (aggiungere) il file e continuare. C'erano due commit sul ramo B1. Abbiamo risolto il primo e continuato, e ora git sta cercando di applicare il secondo si impegnano a dominare e non ci sono più conflitti da risolvere. In questo caso, lascia andare con la nostra (maestri) che buttare via i cambiamenti in B1. Questa volta, continuare non funziona. Il motivo è perché abbiamo buttato via tutti i cambiamenti in questo particolare commettono dal ramo (B1) che viene calcolato su base. Quindi abbiamo bisogno di far git sapere che abbiamo veramente vogliamo buttare via tutto il commit. Basta usare --skip: E il rebase è completa. Interruzione di un Rebase Uso rebase --abort: Questo ti riporta al punto in cui eravate prima si è tentato il rebase. State molto attenti con questo come perde qualsiasi lavoro potrebbe essere fatto nella tua copia di lavoro e tutto ciò che potrebbe avere messo in scena nell'indice. Se fai parte-strada attraverso un rebase, questo potrebbe essere un po 'estrema a meno che realmente desidera solo per perdere tutto. Quando si tratta di un conflitto in git rebase: Usare git status e git diff per scoprire cosa è andato storto. Risolvere i conflitti di uno dei seguenti metodi: Modificare ogni file in conflitto con il proprio editor preferito. --theirs git checkout o --ours git checkout. Fare attenzione del significato all'indietro di --theirs e --ours quando rebasing. Fare doppio controllare il file per assicurarsi che avete ottenuto quello che volevi. git checkout - m per annullare la risoluzione dei conflitti su alcuni file. (Attenzione) mergetool git e uno strumento di unione GUI appropriata come kdiff3. git aggiungere i file risolti. git rebase --continue per continuare il rebase. git rebase --skip in rare situazioni in cui si decide di buttare via tutte le modifiche per un singolo commettono dal ramo di essere riassegnata. State molto attenti con il salto per assicurarsi che i cambiamenti arent perse. git rebase --abort per tornare a dove eravate prima della rebase. (Attenzione) git am -3 è molto simile a rebase. Data la configurazione descritta in alcuni conflitti di cui sopra, permette di generare file di patch dal ramo b1. Ora lascia applicare le patch sul letto con git am -3. La -3 è importante in quanto richiede una fusione a 3 vie. Senza questa opzione, i conflitti non vengono visualizzati nei file appropriati. diff git mostrerà nulla. A questo punto si può andare avanti e modificare i file in conflitto e risolvere i conflitti manualmente. Se si preferisce una GUI unione, provare git mergetool. Come con la fusione e rebase, è anche possibile utilizzare --theirs Checkout e --ours di prendere una versione o l'altra nella sua interezza. Per git am, il significato di loro e la nostra è logico. la loro è la versione dalla patch: mentre la nostra è quella di maestro: e si può usare checkout - m per annullare qualsiasi risoluzione dei conflitti avete fatto in un file. Fare attenzione in quanto non vi è alcuna redo. Lascia andare con la versione della patch per questo commettere e continuare. Il diff mostra alcun conflitto a sinistra per risolvere, in modo da aggiungere e lasciare git sapere che sono fatte per risolvere i conflitti questa patch: Git passa alla prossima patch e trova alcuni più conflitti. Andiamo avanti e rifiutare tutte le modifiche da questa patch e andare con i cambiamenti di padrone (la nostra). Come con rebase, weve effettivamente chiesto di eliminare un intero patch, quindi dobbiamo dire git prendiamo sul serio saltare questo. E questo è tutto. Come con rebase, fate attenzione la situazione di salto. Interruzione di un git am -3 Basta usare am --abort: Sempre utilizzare -3 con git am a essere sicuri di ottenere marcatori di conflitto. Usare git status e git diff per scoprire cosa è andato storto. Risolvere i conflitti di uno dei seguenti metodi: Modificare ogni file in conflitto con il proprio editor preferito. --theirs git checkout o --ours git checkout. git checkout - m per annullare la risoluzione dei conflitti su alcuni file. (Attenzione) mergetool git e uno strumento di unione GUI appropriata come kdiff3. git aggiungere i file risolti. git am --continue per continuare il mattino. git am --skip in rare situazioni in cui si decide di buttare via tutte le modifiche da una singola patch. State molto attenti con il salto per assicurarsi che i cambiamenti arent perse. git am --abort per tornare a dove eravate prima della fusione. (Attenzione) In sostanza, si vuole evitare git applica se è possibile. Le sue capacità di risoluzione dei conflitti sono molto limitate. git am -3 è significativamente migliore e dovrebbe essere usato quando possibile. Ma, se avete ottenuto una patch che è neanche compatibile con git-, questo è probabilmente l'unica scelta. Data la configurazione descritta in alcuni conflitti di cui sopra, consente di generare un file di patch da b1 contro master. E cercare di applicarlo al padrone. Non dimenticate di usare --reject così bene ottenere i file. rej: proviamo git status di scoprire cosa è successo. git status ci mostra il file. rej che è stato creato. E contiene solo il pezzo che non è riuscita: per recuperare da questo, l'unica opzione è quella di applicare in qualche modo manualmente il pezzo respinto. Tutto il bello - m cassa, --theirs checkout, ecc funzioni non sono disponibili quando si utilizza applicare. Una volta terminato, si può semplicemente aggiungere e impegnarsi se si desidera mantenere le modifiche. applicare non ha una modalità come unione e rebase. Interruzione git applicare Usa git azzerato --hard. Fate molta attenzione in quanto questo perde nulla avete fatto dopo l'ultima impegnarsi per il vostro repo (HEAD). Preferisco git am -3 a git applicare. Usare sempre --reject con git a chiede di essere sicuri di ottenere i file che mostrano cosa essere applicati parti (grossi pezzi) del couldnt cerotto. rej. Utilizzare git status per trovare i file. rej. Risolvere i conflitti esaminando i file. rej e il file di destinazione e di apportare modifiche con un editor. git ripristinare --hard per interrompere la applicano. (Attenzione) aggiungere e confermare le modifiche a seconda dei casi. La sua probabilmente la cosa migliore per evitare conflitti con git scorta pop lavorando in rami. Ma nel caso in cui non esegue in conflitto con scorta pop, ecco come gestirlo. Quando abbiamo pop la scorta con modifiche in conflitto in master e la scorta, otteniamo questo: risolvere i conflitti Come per altre situazioni di conflitto, siamo in grado di modificare i file in conflitto e risolvere i conflitti manualmente. git mergetool funziona anche bene con i conflitti scorta pop. Anche se --ours git checkout e --theirs non lavorare con scorta pop, possiamo ancora usare checkout e specificare quale versione che vogliamo. Se vogliamo andare con tutte le modifiche da padrone: Possiamo anche andare con tutti i cambiamenti nella scorta di un file: E, se si vuole tornare alla versione con conflitti, cassa - m funziona bene. Stash goccia Una volta youve ha ottenuto i conflitti risolti, è possibile rimuovere manualmente i cambiamenti stashed dalla scorta con goccia git scorta. Proseguire i lavori di lavoro spuntato dalla scorta viene in genere lavori in corso, quindi a questo punto si può continuare a lavorare, ma git status sarà un po 'strano con percorsi non uniti. Se questo ti dà fastidio, è possibile git add. Basta fare in modo che si git add il file di nuovo se si apportano ulteriori modifiche. Interruzione di un Stash Pop Per interrompere un pop scorta conflitto e buttare via il lavoro tutti avete fatto dopo l'ultima impegnano a padroneggiare (questo può essere estremamente pericoloso se si tende a fare un sacco di modifiche senza commettere, in modo da essere molto attenti): Questo porta indietro all'ultima impegnarsi in master. Questo può essere molto pericoloso. Soprattutto se avete fatto git goccia scorta. Poi si perdono i cambiamenti stashed. (Non proprio, sono solo orfani e possono essere recuperati fino a quando tu non fare un gc.) Se tu fossi nel mezzo di risoluzione dei conflitti, questo getta via tutto il lavoro. Quando si tratta di un conflitto in git scorta pop: utilizzare git status e git diff per scoprire cosa è andato storto. Risolvere i conflitti di uno dei seguenti metodi: Modificare ogni file in conflitto con il proprio editor preferito. mergetool git e uno strumento di unione GUI appropriata come kdiff3. git checkout maestro - il nome del file per ottenere la versione principale. git checkout scorta - nome del file per ottenere la versione scorta. git checkout - m per annullare la risoluzione dei conflitti su alcuni file. (Attenzione) git aggiungere i file risolti (opzionale). git goccia scorta Al termine, la risoluzione dei conflitti per rimuovere le modifiche dalla scorta. Se le cose si hosed, uso git ripristinare --hard per ricominciare prima della comparsa scorta. (Attenzione) continuare a lavorare come al solito. Conflitti e risoluzioni - Grande articolo di base dalle gitguys. Risoluzione dei conflitti in Git - filmato che mostra come utilizzare git mergetool e la GUI opendiff per risolvere i conflitti. git del file - m cassa - Per saperne di annullare la risoluzione dei conflitti con il file - m git checkout. Questo è un grande post di un dev git. The way he talks about conflict resolution gives you more of a feel for what its all about. Careful examination of the merge section shows some ambiquity WRT whether or not git add is actually required. I think we need to track this down. It might mean that we would need to hand-edit one of the files to see a situation where add is required. Once this is sorted, determine whether this also affects the other sections. Examples for revert and cherry-pick. Or at least a quick summary of which of the big three they are most similar to, and any gotchas to watch out for. Work in git log --merge - p file. It shows the changes from the common point to where you are now. Might be useful in more complex situations. Copyright (C) 2013-2014, Ted Felix Permission is granted to copy, distribute andor modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. See gnu. orglicensesfdl. html for the full text of this license. lt - Back to my software page.

No comments:

Post a Comment