Chciałbym uzyskać listę zmodyfikowanych i dodanych plików w konkretnym zatwierdzeniu, aby móc je wyeksportować i wygenerować pakiet ze strukturą plików.
Chodzi o to, aby pobrać pakiet i rozpakować go na serwerze. Z wielu powodów nie mogę utworzyć podpięcia do automatycznego ściągania repozytorium, a najłatwiejszym sposobem aktualizowania serwera jest generowanie tego pakietu.
git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT $commit_id | tar -czf file.tgz -T -
Aby to zakończyć, oto polecenie przesłane potokiem do tar. Spowoduje to wyeksportowanie plików do archiwum tar.
źródło
Oto jednowierszowe polecenie, które działa w systemie Windows 7. Uruchom je z folderu najwyższego poziomu repozytorium.
źródło
jeśli twój skrót zatwierdzenia to na przykład a9359f9, to polecenie:
git archive -o patch.zip a9359f9 $(git diff --name-only a9359f9^..a9359f9)
wypakuje pliki zmodyfikowane w zatwierdzeniu i umieści je w patch.zip, zachowując nienaruszoną strukturę katalogów projektu.
trochę rozwlekłe, trzykrotnie wspomniano o skrócie zatwierdzenia, ale wydaje mi się, że działa.
mam to tutaj: http://tosbourn.com/2011/05/git/using-git-to-create-an-archive-of-changed-files/
źródło
function
w PowerShell, aby zredukować polecenie do nazwy funkcji i użyć$args
tylko raz do przekazania skrótu zatwierdzenia. W * nix prawdopodobnie możesz użyć skryptów powłoki, aby osiągnąć ten sam efekt.git archive -o patch.zip HEAD /**or a commit**/ $(git diff --name-only commit1 commit2)
. Zatwierdzeniem przekazanym doarchive
polecenia może być dowolne zatwierdzenie (najprawdopodobniej zatwierdzenie HEAD lub późniejsze) , a pliki są pobierane tak, jakby były wypisywane na tym etapie zatwierdzania. Commit1 i commit2 przekazywanediff
są wykorzystywane jedynie w celu wygenerowania listy plików do ściągania - nie dotyczy wersji plików ciągniętych.diff
polecenie ze średnikiem:git archive -o patch.zip HEAD /**or a commit**/ $(git diff --name-only commit1A commit1B; git diff --name-only commit2A commit2B; git diff --name-only commit3A commit3B)
git diff -z --name-only commit1 commit2 | xargs -0 git archive -o patch.zip HEAD
Możesz eksportować różnice za pomocą Tortoise Git do MS Windows:
Klikam prawym przyciskiem myszy i wybieram TortoiseGit > Pokaż dziennik, a komunikaty dziennika zostaną otwarte.
Wybierz dwie wersje i porównaj. Różnica między będzie otwarta.
Wybierz pliki i Eksportuj zaznaczenie do ... do folderu!
źródło
Musiałem zaktualizować mój serwer testowy i dodać pliki, które zmieniły się od wersji 2.1.
U mnie zadziałało podobne rozwiązanie, które opublikował James Ehly, ale w moim przypadku chciałem wyeksportować do archiwum pakiet różnic między dwoma starszymi tagami - tag_ver_2.1 i tag_ver_2.2, a nie jedynym zatwierdzeniem.
Na przykład:
tag_ver_2.1 = 1f72b38ad
tag_ver_2.2 = c1a546782
Tutaj jest zmodyfikowany przykład:
źródło
Poniższe polecenia działały dla mnie.
Jeśli chcesz, aby różnica plików zmieniona przez ostatnie zatwierdzenie:
lub jeśli chcesz rozróżnić dwa konkretne zatwierdzenia:
lub jeśli masz niezatwierdzone pliki, pamiętaj, że sposobem gita jest zatwierdzenie wszystkiego, gałęzie są tanie:
źródło
Zrobiłem skrypt php, aby wyeksportować zmienione pliki w systemie Windows. Jeśli masz lokalny serwer deweloperski z ustawionym php, możesz go łatwo uruchomić. Zapamięta twoje ostatnie repozytorium i będzie eksportować zawsze do tego samego folderu. Folder eksportu jest zawsze opróżniany przed eksportem. Usunięte pliki będą również widoczne na czerwono, więc wiesz, co usunąć na serwerze.
To tylko dwa pliki, więc umieszczę je tutaj. Załóżmy, że twoje repozytoria znajdują się pod c: / www w ich własnych folderach i tak dalej http: // localhost również wskazuje na c: / www i obsługuje php. Umieśćmy te 2 pliki w c: / www / git-export -
index.php:
git-export.ini:
A teraz załaduj localhost / git-export / w przeglądarce. Skrypt jest skonfigurowany tak, aby zawsze eksportował do c: / www / export - zmień wszystkie ścieżki, aby pasowały do twojego środowiska lub zmodyfikuj skrypt, aby dopasować go do swoich potrzeb.
To zadziała, jeśli masz zainstalowanego Gita, tak że polecenie git znajduje się w Twojej PATH - można to skonfigurować po uruchomieniu instalatora systemu Windows Git.
źródło
Aby wyeksportować zmodyfikowane pliki zaczynające się od daty:
Skrót (użyj aliasu)
Alias w .gitconfig
źródło
Oto mały skrypt bash (Unix), który napisałem, który skopiuje pliki dla podanego skrótu zatwierdzenia ze strukturą folderów:
Utwórz plik o nazwie „~ / Scripts / copy-commit.sh”, a następnie nadaj mu uprawnienia do wykonywania:
Następnie z katalogu głównego repozytorium git:
źródło
Ja też miałem wcześniej podobny problem. Napisałem prosty skrypt Shell.
Powyższe polecenie wyświetli Commit Hash (Revision) od commit_HashX do commit_HashY w odwrotnej kolejności.
Teraz główny skrypt powłoki używający powyższego polecenia.
Dodaj ten kod do pliku export_changes.sh. Teraz przekaż skróty pliku i zatwierdzenia do skryptu.
Upewnij się, że początkowy ciąg znaków_zatwierdzenia musi być pierwszym argumentem, a następnie ostatnim znakiem skrótu_zajtowania, do którego chcesz wyeksportować zmiany.
Przykład:
$ sh export_changes.sh hashX hashY
Umieść ten skrypt w katalogu lokalnym git lub ustaw ścieżkę do katalogu lokalnego git w skrypcie. Mam nadzieję, że to pomoże..!
źródło
Działa to dla mnie zarówno w systemie Unix, jak i Windows:
W poleceniu są dwa symbole zastępcze. Musisz je wymienić dla swojego celu:
__1__ : zamień na identyfikator zatwierdzenia zmiany tuż przed wszystkimi zatwierdzeniami, które chcesz wyeksportować (np. 997cc7b6 - nie zapomnij zachować tego dubledot po identyfikatorze zatwierdzenia - oznacza to "włącz wszystkie zatwierdzenia nowsze niż to zatwierdzenie")
__2__ : zastąp istniejącą ścieżką, do której chcesz wyeksportować pliki (np. ../Export_path/)
W rezultacie otrzymasz pliki w strukturze folderów (bez zip / tars ...), ponieważ ktoś może być przyzwyczajony do korzystania z eksportu svn żółwia w repozytoriach svn.
Jest to na przykład bardzo przydatne, gdy chcesz ręcznie wdrożyć dodane / zmodyfikowane pliki kilku ostatnich zatwierdzeń. Możesz więc po prostu skopiować te pliki przez klienta ftp.
źródło
Ja też miałem ten sam problem. Rozwiązanie @NicolasDermine nie działało, ponieważ między porównywalnymi zatwierdzeniami zmieniło się zbyt wiele plików. Wystąpił błąd, że argumenty powłoki są za długie.
W konsekwencji dodałem implementację Pythona. Można to zainstalować za pośrednictwem,
pip install gitzip
a następnie wykonać za pomocąw katalogu głównym repozytoriów, tworząc plik
export.zip
plik zawierający wszystkie zmienione pliki z zachowaniem struktury katalogów.Może ktoś też tego potrzebuje, więc pomyślałem, że podzielę się tym tutaj.
źródło