Domyślnym zachowaniem git diff jest otwieranie każdego pliku diff szeregowo (poczekaj na zamknięcie poprzedniego pliku przed otwarciem następnego pliku).
Szukam sposobu na otwarcie wszystkich plików naraz - na przykład w BeyondCompare otworzy to wszystkie pliki na kartach w tym samym oknie BC.
Ułatwiłoby to przeglądanie złożonego zestawu zmian; przewijaj do tyłu i do przodu między plikami diff i ignoruj nieistotne pliki.
Odpowiedzi:
Począwszy od wersji
git
1.7.11, można użyćgit difftool --dir-diff
do wykonania różnic katalogu.Ta funkcja działa dobrze na przykład w Meld 3.14.2 i umożliwia przeglądanie wszystkich zmodyfikowanych plików:
Jest to przydatna funkcja Bash:
Poniższa odpowiedź dotyczy
git
instalacji starszych niż 1.7.7.To samo pytanie zostało zadane na liście mailowej git .
Złożyłem skrypt powłoki oparty na tym wątku e-mail, który wykonuje różnicę katalogów między dowolnymi zatwierdzeniami.
Począwszy od git 1.7.7,
git-diffall
skrypt jest dołączonycontrib
do standardowej instalacji git.W przypadku wersji wcześniejszych niż 1.7.7 można zainstalować z
git-diffall
projektu na GitHub .Oto opis projektu:
źródło
git difftool --dir-diff
i Beyond Compare): Skontaktowałem się z oprogramowaniem Scooter (autorzy Beyond Compare) i twierdzą, żebcompare.exe
nie jest to obsługiwane rozwiązanie i może powodować problemy, jeśli więcej niż jeden różnic jest otwarty na raz. Planują dodać obsługę różnic folderówbcomp.exe
w przyszłej wersji (w międzyczasie będę nadal używaćbcompare.exe
jako nieobsługiwanego obejścia).--dir-diff
działa idealnie z Meld. Stamtąd pozwoli ci wybierać i wyświetlać różnice dla poszczególnych plików.Oto, na czym się zdecydowałem ...
Skopiuj następujący kod do pliku o nazwie
git-diffall
(bez rozszerzenia):Umieść plik w
cmd
folderze katalogu instalacyjnego git (np.C:\Program Files (x86)\Git\cmd
)I używaj tak, jakbyś
git diff
:Uwagi: Kluczem do tego jest & param, który mówi zewnętrznemu poleceniu diff, aby uruchomiło się w zadaniu w tle, dzięki czemu pliki są przetwarzane natychmiast. W przypadku BeyondCompare otwiera się jeden ekran z każdym plikiem na osobnej karcie.
źródło
"$filename"
na"../$filename"
. Potem działało idealnie z Beyond Comparegit-diffall
pliku doC:\Program Files\Git\cmd
folderu? Zrobiłem dokładnie zgodnie z instrukcją, ale po zrobieniu tego$ git diffall git: 'diffall' is not a git command. See 'git --help'. Did you mean this? difftool
meld
ma ciekawą funkcję, że jeśli podasz mu katalog pod kontrolą źródła (Git, Mercurial, Subversion, Bazaar i prawdopodobnie inne), automatycznie wyświetli listę wszystkich zmienionych plików i możesz kliknąć dwukrotnie, aby zobaczyć poszczególne różnice.IMO jest o wiele łatwiejsze do pisania
meld .
i wykrycia VCS niż skonfigurowania VCS do uruchomieniameld
. Ponadto możesz używać tego samego polecenia bez względu na to, jakiego VCS używa Twój projekt, co jest świetne, jeśli często się między nimi przełączasz.Jedynym minusem jest to, że meld wolniej skanuje zmiany niż przekazuje zmiany z git / hg / svn, choć to, czy jest wystarczająco wolne, by stanowić problem, zależy od tego, jak go używasz.
źródło
git diff
nie jest możliwe.Znalazłem tę metodę (GitDiff.bat i GitDiff.rb), która kopiuje pliki do starych / nowych katalogów tymczasowych, a następnie porównuje na nich folder.
Ale wolę przeglądać działające pliki bezpośrednio (z działającego katalogu), ponieważ BeyondCompare ma przydatną funkcję edytowania pliku z poziomu okna różnicowego, co jest idealne do szybkich porządków.
Edytuj: podobna metoda tutaj w odpowiedzi na moje pytanie na liście mailowej git.
źródło
git meld
=> https://github.com/wmanley/git-meld to niesamowity skrypt, który otworzy porządny plik różnicowy wszystkich plików w jednym oknie.źródło
Zauważyłem tutaj, że Araxis Merge ma opcję polecenia „-nowait”:
Może to zwraca kod natychmiastowego wyjścia i działałoby, ktoś tego doświadczył? Nie można znaleźć podobnej opcji dla BeyondCompare ...
źródło
Diffuse ma również integrację z VCS. Współpracuje z wieloma innymi VCS, w tym SVN, Mercurial, Bazaar, ... W przypadku Gita pokażą nawet trzy panele, jeśli zostaną wprowadzone niektóre, ale nie wszystkie zmiany. W przypadku konfliktu będą nawet cztery panele.
Wywołaj to za pomocą
w kopii roboczej Git.
Jeśli mnie zapytasz, najlepsza grafika różni się od dekady. (I też próbowałem połączyć).
źródło
Jeśli wszystko, co chcesz zrobić, to otworzyć wszystkie pliki, które są obecnie modyfikowane, spróbuj czegoś takiego:
Jeśli zatwierdzasz „złożone zestawy zmian”, możesz zechcieć ponownie rozważyć swój przepływ pracy. Jedną z naprawdę fajnych cech git jest to, że ułatwia programistom redukowanie złożonych zestawów zmian do serii prostych łatek. Zamiast próbować edytować wszystkie pliki, które są obecnie modyfikowane, warto zajrzeć
co pozwoli ci selektywnie wystawiać przystojniaków.źródło
Napisałem skrypt PowerShell, który skopiuje dwa działające drzewa i porówna z DiffMerge. Możesz więc zrobić:
Na przykład, aby porównać gałąź master trzy meldunki temu z bieżącym działającym drzewem.
Jest błyszczący i nowy i prawdopodobnie pełen błędów. Wadą jest to, że pliki w twoim 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
źródło
Dla osób zainteresowanych używaniem git-diffall w Mac OS X z Araxis rozwidliłem projekt git-diffall na github i dodałem AppleScript, który otacza polecenie Scal Araxis. Uwaga: jest to nieco zmodyfikowany klon
araxisgitdiff
pliku dostarczanego z Araxis Merge dla Mac OS X.https://github.com/sorens/git-diffall
źródło
Poniższe działa z meld i kdiff3
Otwiera wszystkie pliki w oknie, które można łatwo przeglądać. Może być używany z zestawami zmian zamiast miejsca pochodzenia / nazwy oddziału
na przykład:
git difftool --dir-diff origin/master..24604fb72f7e16ed44115fbd88b447779cc74bb1
źródło
Możesz użyć gitk i zobaczyć wszystkie różnice w tym samym czasie
źródło