Подтвердить что ты не робот

Использование gitk для просмотра полной истории перемещенного файла

После долгих поисков я не нашел удовлетворительного метода, который прост в использовании для просмотра полной истории перемещенного файла в Git и, что более важно, в Gitk. Используя "git log --follow [filePath]", и даже "gitk --follow [filePath]" дает вам коммиты, в которых был задействован файл, но не покажет вам фактическую историю изменений файла перед перемещением. Таким образом, я придумал грубое, но простое решение обходного решения.

  • Сделайте gitk в файле, который был перемещен: "gitk [newFilePath]". Скопируйте идентификатор SHA1 первого коммита, это должен быть фиксация, в которой был перемещен файл.
  • Сделайте gitk на скопированном идентификаторе SHA1: "gitk [SHA1ID]". Последняя фиксация должна быть, когда произошел переход. Найдите перемещенный файл и скопируйте старый путь.
  • Сделайте gitk на идентификаторе SHA1, который мы только что скопировали, и старый путь к файлу: "gitk [SHA1ID] - [oldFilePath]"

Этот процесс позволит вам просмотреть историю файла перед перемещением. Если было несколько ходов, вышеуказанный процесс можно повторить.

Если есть какие-либо более эффективные решения этой проблемы, особенно если есть способ объединить эти шаги, чтобы отобразить полную историю с ходами, это было бы высоко оценено.

4b9b3361

Ответ 1

Если вы хотите увидеть изменения, сделанные в каждом коммите, даже файл был переименован, вы можете использовать опцию -p для git log:

git log -p --follow [file/with/path]

Ответ 2

Здесь функция bash, которая должна показать вам историю файла (с использованием gitk) во всех его воплощениях... Я оставлю его как упражнение для читателя, если он понадобится для другой оболочки:

# bash
gitk_follow () {
  while (( "$#" )); do
    git log --oneline --name-status --follow $1;
    shift;
  done | perl -ne 'if( s{^(?:[ACDMRTUXB]|R\d+)\s+}{} ) { s{\s+}{\n}g; print; }' | sort -u
}

# used as:
gitk $(gitk_follow some_file)

обновление:

Изменен для использования perl, потому что я не обращал достаточно пристального внимания на вывод из git журнала последней версии.

Ответ 3

Другой альтернативой является использование SourceTree приложения (GUI), разработанного Atlassian. Внутри приложения вы можете щелкнуть правой кнопкой мыши по файлу и выбрать "Log Selected..."

Log Selected.

Во всплывающем окне оно позволяет вам "Переименовать файлы":

enter image description here

Я также использую GitHub для Mac, но пока не видел там такой функциональности.

(Я не связан ни с одним из них!)

Ответ 4

Более простая функция, использующая различные параметры журнала git и awk для точного определения имен файлов (и "-", которые нужны gitk):

# bash
gitk_follow () {
  while (( "$#" )); do
    git log --pretty="" --name-status --follow $1;
    shift;
  done | awk '{print $NF}' | sort -u
}

# used as:
gitk -- $(gitk_follow some_file)