Potrzebuję zautomatyzować interaktywny rebase lub zastąp go innymi poleceniami. Po prostu pozwól mi wyjaśnić moją obecną sytuację:git: Jak zautomatyzować interaktywny rebase/zastąp go odpowiednimi poleceniami git.
W przejściu svn-> git muszę ponownie utworzyć nowo utworzone repozytorium git, aby naprawić "odcięcia historii" wykonane podczas SVN. Oto mój ręczny przepływ pracy, aby rozwiązać problem.
branchNEW: containing history from SOMEDAY until now
branchOLD: containing history from past to SOMEDAY
EDIT lub ASCII:
branchNEW: Y - Z
branchOLD: W - X
Obie gałęzie nie mają wspólnych zobowiązuje.
Podstawową ideą jest teraz tylko odnowienie gałęziNEW na branchOLD. Niestety nastąpiła korekta SOMEDAY: Niektóre pliki zostały przeniesione do innego katalogu. Rezultatem rebase jest teraz, że każdy przeniesiony plik istnieje w obu miejscach.
EDIT
some file exist in X
the (nearly) same files also exist in Y, just on another path
branchNEW: W - X - Y - Z
(after rebase)
Po rebase, HEAD zawiera teraz pliki z X i Y. Próbowałem też dodać nowy zobowiązać się do branchOLD który usuwa stare pliki. Po zbiorze SVN-HEAD i git-HEAD są identyczne binarnie, ale "git log - follow" nie działa.
teraz do głównego problemu: Jestem w stanie rozwiązać ten problem za pomocą drugiego, interaktywne rebase:
git rebase -i SHA
SHA jest sha-id starego korzenia popełnić w branchNEW. Teraz w edytorze muszę zmienić "pick", aby "edytować" dla najwyższego zatwierdzenia. Po wyjściu z edytora i teraz trzeba usunąć niewłaściwych plików
git rm -f fileA fileB
git commit --amend
git rebase --continue
Po tym HEAD git jest binarny identyczne szefa SVN a ponadto git ma pełną historię, a także „Log git --follow” dzieła dla przeniesionych plików.
Ponieważ ten krok jest tylko niewielką częścią ogromnego przejścia VCS w przyszłości, muszę napisać cały proces. Ale jak zautomatyzować powyższe kroki?
(wiem, że Shas nie pozostanie taka sama, ale jestem w stanie uzyskać wymaganego SHA z SVN-ID, który jest wbudowany w każdy popełnienia wiadomości)
Nie jestem pewien, ale chyba 'git filter-branch' mógłby pomóc. – Jubobs