Nagrywanie operacji kopiowania plików za pomocą Git
Kiedy przenoszę plik w git za pomocą git-mv, stan pokazuje, że plik został przemianowany i nawet jeśli zmienię niektóre części, nadal uważa się to za prawie to samo (co jest dobre, ponieważ pozwala mi śledzić historię).
Kiedy kopiuję plik, oryginalny plik ma pewną historię, którą chciałbym skojarzyć z nową kopią.
Próbowałem przenieść plik, a następnie spróbować ponownie checkout w oryginalnej lokalizacji - raz przeniesiony git nie pozwala mi checkout oryginału miejsce.
Próbowałem wykonać kopię systemu plików, a następnie dodać plik-git wyświetla go jako nowy plik.
Czy Jest jakiś sposób, aby Git record skopiował plik w podobny sposób, jak zapisuje plik Zmień nazwę / przenieś, gdzie historia może być śledzona z powrotem do oryginalnego pliku?
2 answers
Git nie zmienia nazw śledzenia ani kopiowania, co oznacza, że nie zmienia nazw ani kopii. Zamiast tego zmienia nazwę i kopiuje wykrywanie. Możesz zażądać wykrywania zmiany nazwy w git diff
(i git show
) za pomocą opcji -M
, możesz zażądać dodatkowego wykrywania kopii w zmienionych plikach za pomocą opcji -C
(-C
implikuje -M
), a także możesz zażądać droższego wykrywania kopii wśród wszystkich plików z --find-copies-harder
lub -C -C
(co implikuje -C
, które implikuje -M
). Zobacz stronę Man Git-diff.
Możesz również skonfigurować git tak, aby zawsze robił wykrywanie nazw, ustawiając diff.renames
na wartość logiczną true( np. true
lub 1
), i możesz poprosić git o wykrywanie kopiowania, ustawiając go na copy
lub copies
. Zobacz stronę Man Git-config.
Sprawdź również opcję -l
na git diff
i powiązaną zmienną konfiguracyjną diff.renameLimit
.
zauważ, że git log <pathspec>
działa inaczej w Git: tutaj <pathspec>
jest zestawem ograniczniki ścieżek, gdzie path może być nazwą (pod)katalogu. Filtruje i upraszcza historię przed włączeniem zmiany nazwy i wykrywania kopiowania. Jeśli chcesz śledzić zmiany nazw i kopii, użyj git log --follow <filename>
(która obecnie jest nieco ograniczona i działa tylko dla pojedynczego pliku).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-31 20:06:02
Możesz zmusić Gita do wykrycia historii skopiowanego pliku:
- zamiast kopiowania, przełącz się na nową gałąź i przenieś plik do nowej lokalizacji.
- przełącz się na oryginalną gałąź i zmień nazwę pliku.
- Połącz nową gałąź z oryginalną, rozwiązując trywialny konflikt, zachowując oba pliki.
- Przywróć oryginalną nazwę pliku w osobnym zatwierdzeniu.
(roztwór pobrany z https://stackoverflow.com/a/44036771/1389680.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-29 08:33:16