6

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

Итак, что у меня есть эта структура:

repo_root/somefile.txt

Что я хочу:

repo_root/new_folder/somefile.txt

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

3 ответа3

10

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

Из раздела « Перемещение файлов » в Pro Git book v2:

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

И перемещение и переименование - это то же самое в Git.

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

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

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

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

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

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


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

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

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

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

1

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

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

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

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

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

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

1

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .