TortoiseGit: Перемещение файлов в новую папку не распознается как перемещение

TortoiseGit: Перемещение файлов в новую папку не распознается как перемещение

Я пытаюсь переместить некоторые файлы в моем репозитории в новую папку. Я хочу, чтобы git / TortoiseGit распознавал, что это перемещение, а не удаление и множественные добавления.
Как мне это сделать? Я проверил документацию TortoiseGit и поискал в Google, но это не показалось мне очень полезным.

Итак, у меня получилась следующая структура:

repo_root/somefile.txt

Что я хочу:

repo_root/new_folder/somefile.txt

Конечно, «somefile.txt» представляет все перемещаемые файлы и папки.

решение1

Помните одну вещь:Git отслеживает только содержимое файлов.

ОтПеремещение файловраздел книги Pro Git v2:

В отличие от многих других систем VCS, Git не отслеживает перемещение файлов явно. Если вы переименовываете файл в Git, в Git не сохраняются метаданные, сообщающие, что вы переименовали файл. Однако Git довольно умен, чтобы выяснить это постфактум

А перемещение и переименование в Git — это одно и то же.

Так,Git автоматически обнаруживает перемещение/переименование, но работает только при условии, что эти файлы не были изменены..

Git делает следующее только при перемещении/переименовании файлов:

  1. Отслеживаемый файл удаляется, git получает SHA-1 содержимого этого файла, предположим, что значение равно abc.
  2. Добавляется файл untrack, git вычисляет SHA-1 содержимого этого файла, предполагая, что значение abcтакже равно .
  3. Если вы сделаете коммит в этот момент, git определит, что у них одинаковое значение SHA-1, и затем обработает их как переименование.

Предположим, вы изменили некоторые отслеживаемые файлы и также переместили их в другую папку. Тогда, к сожалению, git не может определить их как переименованные/перемещенные автоматически при коммите.

Если вы действительно хотите, чтобы git автоматически отслеживал переименование/перемещение,тебе нужно сделать:

Убедитесь, что вы НЕ изменяете файл(ы) и переименовываете/перемещаете файл(ы) только в одном коммите.


Если вы хотите изменить файл и переместить его одновременно и хотите, чтобы git обнаружил переименование/перемещение с помощью TortoiseGit, то в вашем случае:

  1. Щелкните правой кнопкой мыши по этому файлу и выберите TortoiseGit -> Rename...пункт контекстного меню.
  2. префикс new_folder\к имени файла, см.: введите описание изображения здесь
  3. совершить

Примечание: вам нужно переименовать файлы по одному. Предположим, что предстоит много работы. Поэтому лучше переименовать только файл.

Примечание 2: Если вы изменитемногов файле git не может понять, что это переименование/перемещение.

решение2

ИзДокументация TortoiseGit:

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

A. выберите файлы или каталоги, которые вы хотите переместить

Б.перетаскивание вправоих в новое место внутри рабочего дерева

C. отпустите правую кнопку мыши

D. в выпадающем меню выберитеКонтекстное меню → Git Переместить сюда файлы с версиями

решение3

Git обработает это на бэкенде после коммита. Пока вы обрабатываете некоммиты, он сначала будет обрабатывать создания и удаления как отдельные действия, но после коммита он попытается разрешить удаления с помощью созданий, чтобы проверить, было ли это на самом деле просто перемещением файла. Вы можете увидеть это сами в журнале коммитов с сообщениями "старый файл ==> новый файл", когда git находит перемещение файла.

В качестве альтернативы вы можете использовать git mv, если это поможет вам чувствовать себя безопаснее. https://git-scm.com/docs/git-mv

Связанный контент