Domanda

Quindi penso che potrebbe avere a che fare con textmate, ma lavoriamo in un piccolo team e stiamo riscontrando alcuni problemi con conflitti di file completi di file quasi identici in git perché ogni riga di un ramo ha un ^ M aggiunto ad esso .

Cosa dovrebbe fare questo misterioso personaggio ^ M e da dove potrebbe provenire?

I nostri sviluppatori usano emacs su Windows / Mac, TextMate su Mac, coda su Mac e occasionalmente l'editor di testo wp-admin.

Qualcuno ha mai questo problema derivante da uno di quelli?

È stato utile?

Soluzione

Qualcuno non sta convertendo correttamente i propri caratteri di fine riga .

Suppongo che sia la gente di Windows che ama il loro CRLF. Unix ama LF e Mac ha amato il CR fino a quando non è stato mostrato alla maniera Unix.

Altri suggerimenti

In git-config , imposta core.autocrlf in true per fare in modo che git converta automaticamente le terminazioni di linea correttamente per la tua piattaforma, ad es eseguire questo comando per un'impostazione globale:

git config --global core.autocrlf true

^ M è 0x0d , ovvero il carattere di ritorno a capo. Se il tuo display appare come

line 1^M
line 2^M

quindi il file deve provenire da Windows perché la sequenza di newline standard su Windows è CR LF ( 0x0d 0x0a ) mentre la newline standard la sequenza consiste esclusivamente in LF su Unices.

Se il file provenisse da un sistema operativo Mac OS 9 o precedente, lo vedresti come

line 1^Mline 2^M

perché non ci sarebbero avanzamenti di riga dopo i ritorni a capo.

Per far scomparire ^ M in git, digitare:

git config --global core.whitespace cr-at-eol

Credits: https: // lostechies. com / keithdahlby / 2011/04/06 / windows-git-punta-nascondere-ritorno a capo-in-diff /

Hanno a che fare con la differenza tra i finali di linea in stile DOS e lo stile Unix. Consulta articolo di Wikipedia . Potresti essere in grado di trovare uno strumento dos2unix per aiutarti, o semplicemente scrivere un piccolo script per risolverli da soli.

Modifica : ho trovato il seguente codice di esempio Python qui :

string.replace( str, '\r', '' )

invece di sostituire la query puoi anche usare M-x delete-trailing-whitespace

Inserisci quanto segue nel tuo ~ / .emacs (o eqiuvalent)

(defun dos2unix ()
  "Replace DOS eolns CR LF with Unix eolns CR"
  (interactive)
    (goto-char (point-min))
      (while (search-forward "\r" nil t) (replace-match "")))

e quindi potresti semplicemente usare M-x dos2unix .

^ M alla fine della riga in Emacs indica un ritorno a capo (\ r) seguito da un avanzamento riga (\ n). Lo vedrai spesso se una persona modifica i file su Windows (dove end of line è la combinazione di ritorno a capo e caratteri di nuova riga) e si modifica in Unix o Linux (dove end of line è solo un carattere di nuova riga).

La combinazione di personaggi di solito non è dannosa. Se stai usando il controllo del codice sorgente, potresti essere in grado di configurare il formato di checkin dei file di testo in modo che le linee siano magicamente adattate per te. In alternativa, potresti essere in grado di utilizzare i trigger di check-in e check-out che automaticamente "risolveranno" i file per te. Oppure, potresti semplicemente usare uno strumento come dos2unix per regolare manualmente le cose.

Sto utilizzando Android Studio (JetBrains IntelliJ IDEA ) su Mac OS e il mio problema era che ^ M ha iniziato a comparire in alcuni file nella mia richiesta pull su GitHub . Quello che ha funzionato per me è stato cambiare il separatore di riga per un file.

Apri il file desiderato nell'editor vai a File vai a Separatori di riga quindi scegli l'opzione migliore per te (per me era LF - Unix e OS X (\ n) )

Secondo il prossimo articolo questo problema è il risultato di terminazioni di linea confuse tra i sistemi operativi: http://jonathonstaff.com/blog/issues-with-line-endings/

E maggiori informazioni puoi trovare qui: https://www.jetbrains.com/help/idea/ la configurazione line-separators.html # d84378e48

 inserisci qui la descrizione dell'immagine

Come tutti hanno già detto. È diverso stile di fine linea. MacOSX utilizza i finali di linea Unix, ovvero LF (avanzamento di riga).

Windows utilizza sia CR (ritorno a capo) che amp; LF (avanzamento riga) come fine riga. Dal momento che stai usando sia Windows che Mac, ecco da dove deriva il problema.

Se crei un file in Windows e poi lo porti sul Mac, potresti vedere questi ^ M caratteri alla fine delle righe.

Se vuoi rimuoverli puoi farlo molto facilmente in emacs. Basta evidenziare e copiare il carattere ^ M e fare una query-sostituire ^ M con e il gioco è fatto.

EDIT: Alcuni altri link che potrebbero essere di aiuto. http://xahlee.org/emacs/emacs_adv_tips.html

Questo ti aiuta a configurare emacs per usare un particolare tipo di stile di fine linea. http://www.emacswiki.org/emacs/EndOfLineTips

Ho riscontrato questo problema qualche tempo fa. La ^ M rappresenta un ritorno a capo, e la ricerca su Ctrl-Q Ctrl-M (Questo crea un ^ M letterale) ti permetterà di ottenere una maniglia su questo personaggio all'interno di Emacs. Ho fatto qualcosa del genere:

M-x replace-string [ENTER] C-q C-m [ENTER] \n [ENTER]

Vedi anche:

Hiding ^ M in emacs

Fai attenzione se scegli di rimuovere i ^ M personaggi e inviare nuovamente alla tua squadra. In seguito potrebbero vedere un file senza ritorno a capo.

Se non hai installato l'utilità dos2unix sul tuo sistema, puoi crearne uno tuo per sbarazzarti dei caratteri di fine linea di Windows:

vi ~/dos2unix.bash:

con il seguente contenuto

#!/bin/bash
tr -d '\r' < $1 > repl.tmp
mv -f repl.tmp $1

Nel tuo ~ / .bashrc, aggiungi la riga:

alias 'dos2unix=~/dos2unix.bash'

Applicazione

dos2unix file_from_PC.txt

rimuoverà ^ M caratteri alle estremità delle righe in file_from_PC.txt. Puoi controllare se ne hai o meno usando cat:

cat -v file_from_PC.txt

La soluzione per me era usare la seguente funzione elisp trovata in questo Emacs Wiki Article .

 (defun dos2unix ()
      "Not exactly but it's easier to remember"
      (interactive)
      (set-buffer-file-coding-system 'unix 't) )

Esegui la funzione M-x dos2unix sul buffer e salva il file, tutti i ^ M scompariranno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top