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?

 119
Author: Hexdoll, 2009-06-25

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).

 103
Author: Jakub Narębski,
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.)

 15
Author: Robert Pollak,
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