git difftool, otwórz wszystkie pliki diff natychmiast, a nie szeregowo

Domyślnym zachowaniem Git diff jest otwieranie KAŻDEGO pliku diff w trybie szeregowym(poczekaj, aż poprzedni plik zostanie zamknięty przed otwarciem następnego pliku).

Szukam sposobu na otwarcie wszystkich plików naraz-w innym przypadku np. otworzyłoby to wszystkie pliki w zakładkach w tym samym oknie BC.

Ułatwiłoby to przeglądanie złożonego zestawu zmian; przewijanie do tyłu i do przodu między plikami diff i ignorowanie nieistotnych plików.

 204
Author: S.L. Barth, 2009-08-03

12 answers

Począwszy od git v1. 7. 11, możesz użyć git difftool --dir-diff aby wykonać diff katalogu.

Następująca odpowiedź dotyczy git instalacji starszych niż wersja 1.7.11.


To samo pytanie zostało zadane na git mail list.

UĹ 'oĹźyĹ' em skrypt powĺ ' ok oparty na tym wątku e-mail, ktĂłry wykonuje răłĺźnicowanie katalogăłw pomiÄ ™ dzy dowolnymi zatwierdzeniami.

Począwszy od git v1. 7. 10, skrypt git-diffall jest zawarty w contrib standardowego Gita instalacja.

Dla wersji przed v1. 7. 10, można zainstalować z git-diffall projekt na GitHub .

Oto opis projektu:

Skrypt git-diffall dostarcza mechanizm diff oparty na katalogach dla git. Skrypt opiera się na diff.możliwość konfiguracji narzędzia do określ, która przeglądarka diff jest używana.

Ten skrypt jest kompatybilny ze wszystkimi formularze używane do określenia zakresu zmiany w diff:

1) git diffall: pokazuje różnice między drzewo robocze i zmiany etapowe
2) git diffall --cached [<commit>]: pokazuje różnica między etapami zmian i HEAD (lub inny o nazwie commit)
3) git diffall <commit>: pokazuje różnice pomiędzy drzewo robocze i nazwane commit
4) git diffall <commit> <commit>: show diff pomiędzy dwoma nazwanymi commitami
5) git diffall <commit>..<commit>: to samo co above
6) git diffall <commit>...<commit>: Pokaż zmiany na gałęzi zawierającej i do po drugie, zaczynając od wspólnego przodek obu <commit>

Uwaga: Wszystkie formularze przyjmują opcjonalną ścieżkę ogranicznik [--] [<path>]

Ten skrypt jest oparty na przykładzie dodane przez Tomasz Rast w Git lista .

 169
Author: Tim Henigan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-19 15:43:33

Oto, co ustaliłem...

Skopiuj poniższy kod do pliku o nazwie git-diffall (bez rozszerzenia):

#!/bin/sh
git diff --name-only "$@" | while read filename; do
    git difftool "$@" --no-prompt "$filename" &
done

Umieść plik w cmd folderze Twojego katalogu Git install (np C:\Program Files (x86)\Git\cmd)

I używaj tak jak ty git diff:

git diffall
git diffall HEAD
git diffall --cached 
git diffall rev1..rev2
etc...

Uwagi: kluczem do tego jest & param, który mówi zewnętrznemu poleceniu diff, aby uruchomić w zadaniu w tle, więc pliki są przetwarzane natychmiast. W przypadku BeyondCompare otwiera to jeden ekran z każdym plikiem w swojej karcie.

 56
Author: Seba Illingworth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-18 04:42:40

meld ma fajną funkcję, że jeśli dasz mu katalog pod kontrolą źródła (Git, Mercurial, Subversion, Bazaar i prawdopodobnie inne) to automatycznie wyświetli wszystkie zmienione pliki i możesz dwukrotnie kliknąć, aby zobaczyć poszczególne różnice.

IMO o wiele łatwiej jest wpisać meld . i zorientować się w VCS, niż skonfigurować VCS do uruchomienia meld. Dodatkowo możesz użyć tego samego polecenia bez względu na to, jakich VC używa twój projekt, co jest świetne, jeśli przełączysz między nimi dużo.

Jedynym minusem jest to, że meld wolniej skanuje zmiany niż przekazuje zmiany z git / hg / svn, chociaż to, czy jest wystarczająco wolne, aby być problemem, zależy od tego, jak go używasz, jestem pewien.

 18
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-16 07:01:41

Znalazłem tę metodę (GitDiff.bat i GitDiff.RB) kopiuje pliki do starych / nowych temp dirs, a następnie porównuje na nich folder.

Ale wolałbym oglądać pliki robocze bezpośrednio (z katalogu roboczego), ponieważ BeyondCompare ma przydatną funkcję edycji pliku z poziomu okna diff, co jest Świetne do szybkiego czyszczenia.

Edit: a podobna metoda tutaj w odpowiedzi na moje pytanie na liście dyskusyjnej Gita.

 3
Author: Seba Illingworth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-18 00:39:02

git meld => https://github.com/wmanley/git-meld jest niesamowitym skryptem, który otworzy schludny diff wszystkich plików w jednym oknie.

 3
Author: Khaja Minhajuddin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-18 05:26:03

Diffuse ma również integrację VCS. Współpracuje z wieloma innymi VC, w tym SVN, Mercurial, Bazaar, ... W przypadku Gita, wyświetli nawet trzy okienka, jeśli niektóre, ale nie wszystkie zmiany są wystawione. W przypadku konfliktów będą nawet cztery szyby.

Zrzut ekranu diffuse z edycjami staged i unstaged

Wywołaj to za pomocą

diffuse -m

W Twojej kopii roboczej Git.

Według mnie najlepsza różnica wizualna, jaką widziałem od dekady. (A ja też próbowałem meld.)
 2
Author: krlmlr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-24 21:18:56

Zauwazylem tutaj , ze Araxis Merge ma opcje polecenia '- nowait':

- teraz uniemożliwia compare czekanie na zamknięcie porównania

Może to zwróci natychmiastowy kod wyjścia i zadziała, ktoś tego doświadczył? Nie można znaleźć podobnej opcji dla BeyondCompare...

 1
Author: Seba Illingworth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:25

Jeśli chcesz tylko otworzyć wszystkie pliki, które są aktualnie modyfikowane, spróbuj czegoś takiego:

vi $(git status | sed -n '/.*modified: */s///p')

Jeśli tworzysz commity "złożonych zestawów zmian", możesz ponownie rozważyć swój przepływ pracy. Jedną z naprawdę fajnych cech Gita jest to, że ułatwia on programistom redukcję złożonych zestawów zmian do serii prostych łatek. Zamiast edytować wszystkie aktualnie zmodyfikowane pliki, warto zajrzeć do

git add --patch
które pozwolą Ci do selektywnej scenografii.
 1
Author: William Pursell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-11 11:30:06

Napisałem skrypt powershell, który powieli dwa działające drzewa i porównał je z DiffMerge. Więc możesz zrobić:

GitNdiff master~3 .

Aby porównać gałąź master sprzed trzech checkIn ' ów z bieżącym drzewem roboczym, na przykład.

Lśniące, nowe i prawdopodobnie pełne robaków. Wadą jest to, że pliki w drzewie roboczym, które nie zostały jeszcze dodane, są kopiowane do obu drzew roboczych. Może być również powolny.

Http://github.com/fschwiet/GitNdiff

 1
Author: Frank Schwieterman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-01 16:09:14

Dla zainteresowanych użyciem Git-diffall na Mac OS X Z Araxis, rozwidliłem projekt git-diffall na github i dodałem AppleScript, który zawija polecenie Araxis Merge. Uwaga: jest to nieco zmodyfikowany klon pliku araxisgitdiff, który jest dostarczany z Araxis Merge dla Mac OS X.

Https://github.com/sorens/git-diffall

 1
Author: sorens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-17 10:54:37

Poniższe działa z meld i kdiff3

git difftool --dir-diff origin/branch1..origin/branch2

Otwiera wszystkie pliki w oknie, które można łatwo przeglądać. Może być używany z zestawami zmian w miejscu pochodzenia / branch-name

Eg: git difftool --dir-diff origin/master..24604fb72f7e16ed44115fbd88b447779cc74bb1

 1
Author: feltspar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-29 19:26:50

Możesz użyć gitk i zobaczyć wszystkie różnice w tym samym czasie

 -1
Author: Aragorn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-11 02:50:41