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 № 1Poniż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 rodzicucommitid
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 ...
)