Kiedy przenoszę plik w git za pomocą git-mv, status pokazuje, że plik został zmieniony i nawet jeśli zmienię niektóre fragmenty, nadal uważa się, że jest to prawie to samo (co jest dobre, ponieważ pozwala mi śledzić jego historię) .
Kiedy kopiuję plik, oryginalny plik ma pewną historię, którą chciałbym powiązać z nową kopią.
Próbowałem przenieść plik, a następnie spróbować ponownie wyewidencjonować go w pierwotnej lokalizacji - po przeniesieniu git nie pozwala mi wyewidencjonować oryginalnej lokalizacji.
Próbowałem zrobić kopię systemu plików, a następnie dodać plik - git wyświetla go jako nowy plik.
Czy istnieje sposób, aby git nagrał operację kopiowania pliku w podobny sposób, w jaki rejestruje zmianę nazwy / przeniesienie pliku, w którym można prześledzić historię do oryginalnego pliku?
diff.renames
opcjęcopies
(np. „git config diff.renames copies
”). Zgadzam się, że jest to trochę sprzeczne z intuicją.git log -L123,456:file.xyz
), który poprawnie podąża za zmianami nazw, ale nie kopiuje, i nie można w takim przypadku przekazać --follow; również, AFAICT, to nie działa z git blame.19.05.2020: Zaletą poniższego rozwiązania jest brak zmiany dziennika oryginalnego pliku, brak tworzenia konfliktu scalania i krótsza długość.
Możesz wymusić na Gicie wykrycie historii kopiowanego pliku za pomocą trzech zatwierdzeń:
--no-ff
.(Kredyty idą do Raymonda Chena .)
Poprzednie rozwiązanie miało cztery zatwierdzenia:
(Rozwiązanie pobrane z https://stackoverflow.com/a/44036771/1389680 .)
źródło
move
irename
?mv
do obu operacji? Użyłem `` move '' w przypadku, który może wymagać zmiany katalogu pliku i `` rename '' w przypadku, gdy tak nie jest.git mv orig new
? Czy masz na myśli „przeczytaj oryginał”cp new orig && git add orig
?