Mam dwa repozytoria. W jednym wprowadzam zmiany do pliku ./hello.test
. Zatwierdzam zmiany i tworzę łatę z tego zatwierdzenia z git format-patch -1 HEAD
. Teraz mam drugie repozytorium, które zawiera plik o tej samej zawartości co plik hello.test, ale jest umieszczony w innym katalogu pod inną nazwą: ./blue/red/hi.test
. Jak mam zamiar zastosować powyższą łatę do pliku hi.test
? Próbowałem git am --directory='blue/red' < patch_file
, ale oczywiście skarży się, że pliki nie mają tego samego imienia (które uważałem, że Git nie obchodzi?). Wiem, że prawdopodobnie mógłbym edytować różnicę, aby zastosować do tego konkretnego pliku, ale szukam rozwiązania polecenia.Jak zastosować poprawkę Git do pliku o innej nazwie i ścieżce?
Odpowiedz
Można utworzyć poprawkę za pomocą git diff
, a następnie zastosować ją za pomocą narzędzia patch
, które pozwala określić plik, do którego chcesz zastosować różnicę.
Na przykład:
cd first-repo
git diff HEAD^ -- hello.test > ~/patch_file
cd ../second-repo
patch -p1 blue/red/hi.test ~/patch_file
Ah, miłe, nie myślałem o tym. Czy jest jednak jakiś sposób, aby to zrobić za pomocą poleceń Git, aby dane zatwierdzenia (data i czas, autor zatwierdzający, komunikat zatwierdzenia) były takie same? – mart1n
Jest możliwe, że jest coś, co możesz zrobić z 'am' lub' apply', ale nie mogę go znaleźć. Jeśli często powielacie zmiany, może istnieć lepsze rozwiązanie z wykorzystaniem podmodułów lub innego języka udostępnianego do udostępniania kodu (np. W Ruby można wyodrębnić duplikat kodu jako klejnot). – georgebrock
W rzeczywistości jest to związane z dokumentacją (pliki źródłowe to pliki XML). Submodules nie są tak naprawdę opcją, ponieważ musiałbym przedstawić dla nich mocną argumentację w naszej istniejącej infrastrukturze. – mart1n
odpowiedzi na moje własne pytanie o skrypt, który robi tylko to: https://github.com/mprpic/apply-patch-to-file
Zamiast ręcznie modyfikując plik poprawki, to monituje użytkownika dla pliku docelowego, modyfikuje łatka i stosuje ją do repo, w którym aktualnie jesteś.
Istnieje proste rozwiązanie, które nie wymaga ręcznej edycji łatki ani zewnętrznego skryptu.
W pierwszym repozytorium (może także eksportować szereg popełnić użyć -1
jeśli chcesz wybrać tylko jeden commit):
git format-patch --relative <committish> --stdout > ~/patch
W drugim repozytorium:
git am --directory blue/red/ ~/patch
Zamiast z użyciem --relative
w git format-patch
, innym rozwiązaniem jest użycie opcji -p<n>
w git am
w celu usunięcia katalogów ze ścieżki poprawek, jak wspomniano w answer to a similar question.
Możliwe jest również uruchomienie git format-patch --relative <committish>
bez --stdout
, a wygeneruje on zestaw plików .patch
. Pliki te można następnie przesłać bezpośrednio do git am
z git am --directory blue/red/ path/to/*.patch
.
To nadal polega na tym, że nazwy plików są takie same, prawda? – mart1n
zapisał mój dzień :) – tuxinaut
Należy zauważyć, że opcja '--directory' wymaga podania pełnej ścieżki katalogu względem katalogu głównego repo; coś takiego jak '--directory = ./' podczas gdy chdir'd do podkatalogu w repozytorium nie będzie działać. – Reid
- 1. Jak zastosować poprawkę do projektu Java?
- 2. Jak zastosować poprawkę wygenerowaną za pomocą łatki w formacie git?
- 3. git push branch do nowego repo o innej nazwie
- 4. git nie można zastosować poprawkę binarny *** bez pełnej linii indeksu
- 5. C# Skopiuj plik do innej lokalizacji o innej nazwie
- 6. Pobieranie pliku o innej nazwie do zapisanej nazwy
- 7. Jak zastosować łatkę `git diff` bez zainstalowanego Git?
- 8. Jak skopiować arkusz o innej nazwie - C# i Excel Interop
- 9. jak zastosować poprawkę Git tak, jakby autor zobowiązał się do mojego repo?
- 10. W merkurialnym, w jaki sposób zastosować poprawkę odwrotną do określonego pliku?
- 11. Jak zastosować SVN diff do Git?
- 12. Rtęć, jak utworzyć poprawkę dla jednego pliku w repo
- 13. Jak zbudować wykonywalny o nazwie innej niż pakiet Golang
- 14. Kod innej firmy i Git
- 15. Jak używać g ++ do tworzenia pliku obiektowego o konkretnej nazwie
- 16. Znaleziony plik wymiany o nazwie ".git/.MERGE_MSG.swp"
- 17. Jak powiedzieć CPAN o ścieżce do zrobienia i cc
- 18. Jenkins: o ścieżce build.xml
- 19. Jak zastosować odrzucone kawałki po ich naprawieniu?
- 20. Jak ponownie sformatować poprawkę po scaleniu w Git?
- 21. NuGet: Jak mogę zastosować transformację do pliku .csdef projektu Cloud
- 22. Jak utworzyć poprawkę do całego katalogu, aby ją zaktualizować?
- 23. Jak zastosować wtyczkę Gradle z innej wtyczki?
- 24. Uzyskaj ciąg kwerendy o nazwie pliku JavaScript
- 25. PHP Przesyłanie i nadpisywanie pliku o tej samej nazwie
- 26. Co to jest format pliku o nazwie
- 27. Jak zatrzymać autouzupełnianie przed nadpisaniem pliku o podobnej nazwie
- 28. jak zastosować maskę z jednej tablicy do innej tablicy?
- 29. TortoiseHg Zastosuj poprawkę
- 30. Jak usunąć gałąź o nazwie "--orphan"
Związane z: https://stackoverflow.com/q/3367254/1959808 –