2013-02-14 30 views

Odpowiedz

-5

nr I, jak sądzę, nigdy nie będzie - gdy łączymy myślimy o treść, nie Autorstwo

+0

zgadzam, ale w niektórych przypadkach może to być przydatne. Na przykład istnieje plik źródłowy, w którym dodaję jakiś kod. Pozwól, aby plik został zmieniony podczas repozytorium podczas wprowadzania zmian. Muszę go scalić, ale potrzebuję tylko dodać tylko moje zmiany. Łatwiej będzie je zlokalizować po podpisaniu. – ASten

+0

@ASten - w tym przypadku widzisz tylko w "moim" pliku w oknie scalania (i narzędzie do scalania musi definiować oddzielne tytuły okien) –

+2

Podczas łączenia konfliktów prawie zawsze dostosowuję mój poziom kontroli w zależności od stażu pracy autora. To nie jest idealne, ale ograniczenia czasowe często tego wymagają. – bartekbrak

1

Więc co naprawdę chcesz to narzędzie, które można łatwo zidentyfikować zmiany względem zmian nawzajem w konflikt scalania, a właściwie zidentyfikowanie autora każdej linii (co byłoby środkiem do osiągnięcia tego), prawda?

Jeśli dobrze cię zrozumiałem, mam dość dobrą wiadomość: można to zrobić za pomocą git + kdiff3. Do połączenia można po prostu użyć git mergetool (które można skonfigurować do korzystania KDiff3). Ale to nie jest obsługiwane natywnie jeśli pojawi się konflikt scalania robiąc interaktywną rebase, więc dla tego wymagany jest jakiś obsługi skryptów.

Zamiast się własnym przykładzie konfliktu proste scalanie, użyję http://www.gitguys.com/topics/merging-with-a-conflict-conflicts-and-resolutions/ jako podstawa. Obserwuj tę stronę pod numerem git merge test. Od po komendzie seryjnej I odbiegają nieco od tego przykład uruchamiając różne polecenia (ale w zasadzie robi to samo zadanie). Zrobię wszystkie pierwsze kroki.

Mamy więc konflikt scalania i git wprowadziła treści z obu źródeł przyczyniających się do pliku w tym formacie <<<<<<<...>>>>>>>, który ja naprawdę nie lubię w ogóle i nigdy nie uznają nawet patrząc na niego. Zamiast tego używam mojego ulubionego narzędzia scalania, kdiff3.

Najpierw musimy dowiedzieć się, jakie wersje, które są zaangażowane.

$ git ls-files -u 
100644 b0ed415d15862ac5582b51e4de65528e86934cd2 1  README 
100644 56300e3ac4e4521c3500618a301bb2ab2d6a52f5 2  README 
100644 9585db7d9c2d9ca05075f67a878f2554886d7b1a 3  README 
$ 

podkrapiany że informacje możemy wykonać trzy sposób scalania:

$ git cat-file blob b0ed415d15862ac5582b51e4de65528e86934cd2 > v1 
$ git cat-file blob 56300e3ac4e4521c3500618a301bb2ab2d6a52f5 > v2 
$ git cat-file blob 9585db7d9c2d9ca05075f67a878f2554886d7b1a > v3 
$ kdiff3 -o merge_result v1 v2 v3 & 
[2] 18394 
$ 

co daje następujący pogląd w którym można wybrać, z którego przodek chcesz połączyć z.

kdiff3 screenshot

Afterwords (jeśli jesteś zadowolony z wyniku scalania) trzeba

$ rm v1 v2 v3 
$ mv merge_result README 
$ git add README 

Wszystkie ręczne powyższe kroki są wykonywane automatycznie z git mergetool. Dlaczego więc pokazuje to wszystko? No, bo jeśli masz odpowiedni konflikt podczas git rebase -i, to musi być zrobione w ten sposób (przed uruchomieniem git rebase --continue).

W tej niewielkiej przykład jest tylko jeden konflikt linia, więc nie pokazać bardziej typowy przypadek, gdzie wiele linii są automatycznie rozwiązane, pozostawiając cię po prostu ręcznie rozwiązać te, które nie odbywa się automatycznie. Bardziej realny przykład życie może wyglądać bardziej jak następuje:

kdiff3 screenshot

zauważyć, że w wyniku scalania teraz wyraźnie widać pochodzenie C wierszy zostały automatycznie rozwiązane. Myślę, że jest to coś, o co prosiłeś, prosząc o uzyskanie autora dla każdej linii, prawda? Ta informacja jest całkowicie nieobecna w tekście <<<<<<<...>>>>>>> (i trudno jest/nie można zauważyć, że powinieneś zaktualizować drukowany napis w funkcji hello).

Nie mogę wystarczająco polecić kdiff3. Korzystanie z takiego narzędzia do scalania graficznego w porównaniu z niektórymi liniami z obu źródeł, które są mieszane w pliku inline, przypomina użycie excavator versus spade.

2

Dołączone narzędzie gitk nie jest narzędziem do scalania, ale pokazuje sprzeczne linie z czerwonymi i niebieskimi znakami "+" z przodu, a Ty możesz kliknąć prawym klawiszem -> "Pokaż początek tej linii" na dowolnym z nich , aby przejść do popełnienia która wprowadziła linię:

Screenshot

można uruchomić mergetool, czy tylko edytor tekstowy z diffmarks równolegle