2013-06-03 12 views
8

Chciałbym połączyć dwa pliki w następujący sposób:ręcznie scalić dwa pliki używając diff

  1. wyjścia diff z dwóch plików do pliku temp i
  2. ręcznie wybrać wiersze Chcę skopiuj/zapisz.

Problem polega na tym, że diff -u daje mi tylko linie wierszy pliku, podczas gdy ja chcę wydrukować cały plik w ujednoliconym formacie.

Czy istnieje sposób, w jaki diff może to zrobić?

+0

Znam wiele osób, jak przy użyciu vim w Tryb diff to zrobić, a jest kilka wtyczek, które sprawiają, że trzy bufory (stary, scalający, "nowy") działają lepiej. – demure

+0

W czym problem? Po prostu usuń części poprawki, których nie chcesz, a następnie załataj plik. Zwróć także uwagę na [git cherry picking] (https://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html). Dokładnie to chcesz zrobić – hek2mgl

Odpowiedz

6

"Chcę wyprowadzić cały plik w ujednoliconym formacie.Czy jest jakiś sposób, aby to zrobić?"

Tak.

diff -U 9999999 file1.txt file2.txt > diff.txt 

To powinno działać, pod warunkiem, że Twoje pliki mają mniej niż 10 milionów linii.

10

Jedną z opcji, które mogą pasowały do ​​ciebie,

sdiff: diff side-by-side z plikami.

sdiff -o merged.file left.file right.file

Raz tam, to poprosi o co linie chcesz zachować z którego pliku. Hit ?, a następnie enter za małą pomoc. Również ze szczegółowymi towarami man sdiff.

(W moim dystrybucji, te są pakowane w opakowania „Diffutils” [Fedora, CentOS])

Jeśli chcesz zautomatyzować ten proces, warto spróbować util merge, który będzie oznaczyć konfliktów pliki. Może to jednak przywrócić cię do punktu wyjścia.

0

Łatwą odpowiedzią jest użycie flagi -D do scalenia plików i otoczenia różnic za pomocą instrukcji #ifdef w stylu C.

Z dokumentacji:

-D NAME --ifdef=NAME 
      Output merged file to show `#ifdef NAME' diffs. 

Można go używać w następujący sposób:

$ diff -D NEWSTUFF file1 file2 > merged_file 

zwykle wtedy wystarczy otworzyć ten plik w edytorze scalony i rozwiązywania konfliktów scalania ręcznie.

Można również użyć opcji do wyjścia skryptu ed itp

0

można połączyć/połączyć dwa pliki z diff użyciu -

diff --line-format %L file1 file2