2012-03-29 12 views
6

Un mio amico e io stiamo lavorando separatamente su un progetto. All'inizio, ho spinto una cartella denominata old-name e l'ha tirata fuori. Nel frattempo ho deciso di rinominare la cartella old-name in new-name per distinguerla meglio da altri progetti (diciamo che lo old-name è troppo generico e new-name è più specifico). Così ho detto al mio amico di rinominare la sua cartella del progetto allo new-name. E poi stiamo lavorando separatamente.Problemi di ridenominazione Git

Ora, ha spinto quello che ha fatto al server remoto (sotto la cartella new-name), quando provo a prelevare dal server, si verificano tutti questi conflitti (rinominare/aggiungere) e apparentemente c'è una copia in più di ogni singolo file in il progetto new-name adesso.

new-name/index.php (MINE) 
new-name/index.php~98789491981agsagasga98a914a98wt (his commit ID I believe) 

La mia domanda è, come possiamo risolvere questo senza questo problema di ridenominazione conflitto git? Ovviamente posso risolvere il conflitto manualmente, ma ci sono troppi file da controllare ed eliminare a causa di questa nuova copia extra che git ha tirato al mio repository.

Grazie

risposta

0

Si dovrebbe tirare giù una nuova copia di lavoro in una nuova cartella locale, proprio accanto al codice che ha lavorato al primo. Quindi utilizza un valore Diff style tool per confrontare e unire il tuo lavoro nella nuova copia locale. Quindi commetti le modifiche sul nuovo pull down e bam, hai commesso le modifiche. So che questo non salva tutto il registro delle modifiche su ciò che hai fatto, ma se farlo manualmente non è un'opzione, questa è la prossima cosa migliore.

1

Basta aggiungere tutti i file. Tutto ciò che è un semplice rinominare verrà identificato come privo di differenze e rimosso dall'indice. Quindi, anche se uno 'stato git' mostra carichi e carichi di problemi, dopo 'git add -A' ce ne saranno pochi (e tutto ciò che rimarrà avrà differenze reali). Dovresti effettuare subito il checkout di una nuova filiale (prima di 'git add -A') in modo da poter facilmente tornare indietro se va verso sud.

1

Solo un'ipotesi, ma mi sembra che il rilevamento del nome di Git non abbia rilevato i nomi durante l'unione. Ci sono molti file in questa directory? Tutti i file sono stati pesantemente modificati?

Provare a ripetere l'unione/pull dopo aver aumentato il valore delle impostazioni di configurazione merge.renameLimit o diff.renameLimit. Da git help config:

diff.renameLimit 
    The number of files to consider when performing the copy/rename 
    detection; equivalent to the git diff option -l. 

merge.renameLimit 
    The number of files to consider when performing rename detection 
    during a merge; if not specified, defaults to the value of 
    diff.renameLimit. 

Potete anche provare il -Xrename-threshold=70 di abbassare la soglia di rilevamento Rinomina somiglianza. Da git help merge (anche in git help pull):

rename-threshold=<n> 
    Controls the similarity threshold used for rename detection. 
    See also git-diff(1) -M. 

Da git help diff:

-M[<n>], --find-renames[=<n>] 
    Detect renames. If n is specified, it is a threshold on the 
    similarity index (i.e. amount of addition/deletions compared to the 
    file’s size). For example, -M90% means git should consider a 
    delete/add pair to be a rename if more than 90% of the file hasn’t 
    changed. 

Si noti che non sono sicuro di ciò che accade quando la fine della riga vengono convertiti tra stile Unix e lo stile di Windows. Git potrebbe pensare che i file siano al 100% diversi anche se l'unica differenza è la fine della linea, quindi assicurati di utilizzare entrambi gli stessi finali di linea.

+0

Si può dire a git di ignorare le modifiche degli spazi bianchi, che risolvono il problema delle terminazioni di linea. Vedi anche http://stackoverflow.com/questions/861995/is-it-possible-for-git-merge-to-ignore-line-ending-differences –

Problemi correlati