Mam projekt pod numerem git
. Pewnego dnia przeniosłem wszystkie pliki projektu z bieżącego katalogu do foo/bar/
w ramach projektu. Zrobiłem to za pomocą git mv
. Następnie dodałem trochę więcej plików i dokonałem pewnych zmian w już istniejących plikach.Jak mogę przepisać historię, aby wszystkie pliki, z wyjątkiem tych, które już zostały przeniesione, znajdują się w podkatalogu?
W rezultacie teraz, gdy patrzę na historię foo/bar/file.c
, widzę tylko zmiany, które wprowadziłem po przeniesieniu pliku.
Próbowałem naprawić to na różne sposoby (filter-branch
z filtrem podkatalogów, itp.), Ale nic nie pomogło, więc jestem całkiem spiętrzony tutaj. Docenię każdą pomoc, jaką możesz mi dać. Dzięki!
@Alexander: Możesz spróbować umieścić jednolinijkę (wszystko w pojedynczym cudzysłowie) w prawdziwym skrypcie, z linią bash. Myślę, że 'filter-branch' prawdopodobnie próbuje uruchomić to w' sh', a nie 'bash'. – Cascabel
Poczyniłem pewne postępy. Wygląda na to, że podwójne nawiasy w instrukcji if powodowały ten błąd. Pojedyncze nawiasy działają lepiej, ale nadal nie działa. Problem polega na tym, że zanim przeniosłem wszystko do foo/bar/I miałem katalog o nazwie foo z pewną zawartością w projekcie. Teraz narzeka "nie może przenieść" foo "do podkatalogu samego siebie,' foo/bar/foo '". –
@Alexander: Będziesz musiał odpowiednio dostosować skrypt. Coś jak: 'if [[! -e foo/bar]]; następnie mkdir -p foo/bar; git ls-tree - tylko -name $ GIT_COMMIT | grep -v^foo $ | xargs -I pliki mv foo/bar; fi' Używa polecenia grep do odfiltrowania 'foo' z listy plików do przeniesienia. Zauważ, że zakładam również, że podkatalog "bar" nigdy nie istniał, dopóki nie przeniosłeś wszystkiego pod nim. Jeśli tak nie jest, musisz również uwzględnić to w skrypcie. –