Pobierz nową nazwę pliku - git

Mam commit gdzie nazwa pliku jest zmieniana. Czy istnieje możliwość pobrania nazwy nowego pliku ze starej nazwy pliku i klucza zatwierdzenia?

Przykład: file.php zmienił nazwę na filex.php w commit 5119afae52e5ae08ca8e378e00895d824a179f03.

Szukam czegoś, co wróci filex.php z informacji o 5119afae52e5ae08ca8e378e00895d824a179f03 i file.php.

Odpowiedzi:

1 dla odpowiedzi № 1

Poniższy skrypt bash wykona zadanie:

Stosowanie:

new_name_of_renamed_file <oldname> <commitid>

nowa_nazw_pliku_ramianego:

#!/usr/bin/env bash

if [ $# -ne 2 ]
then
echo "Usage: new_name_of_renamed_file <oldname> <commitid>"
exit 1
fi

pattern="^rename from ${1/./\.}$"
git diff -M100% "$2"^.."$2"|grep -A1 "$pattern"|tail -n1|sed "s/^rename to //"

Uwagi

  • Skrypt wykrywa tylko dokładne nazwy. Jeśli interesują Cię nazwy, w których dokonano pewnych zmian w pliku o zmienionej nazwie, możesz przekazać odpowiedni próg podobieństwa do pliku git diff -M dowództwo.
  • Jeśli plik oldname nie istnieje w rodzicu commitid lub nie została zmieniona w tym zatwierdzeniu, a następnie nic nie jest wyprowadzane.

0 dla odpowiedzi nr 2

Jeśli uruchomisz:

git log --oneline -- file.php

zobaczysz listę wszystkich zatwierdzeń, które to zmieniły file.php.

Najnowszym z tych zatwierdzeń (ten na górze) będzie ten, kiedy file.php zmienił nazwę na filex.php.

Możesz to potwierdzić, uruchamiając git diff <hash>, gdzie <hash> to identyfikator zatwierdzenia, którego używasz git log.

(uwaga: działałoby to również bez --oneline opcja ; --oneline opcja daje dokładnie jedną linię na zatwierdzenie, co może być łatwiejsze do zrozumienia całej listy.
Możesz także spróbować git log --oneline --graph ...)