
Я пытаюсь переместить некоторые файлы в моем репозитории в новую папку. Я хочу, чтобы 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 делает следующее только при перемещении/переименовании файлов:
- Отслеживаемый файл удаляется, git получает SHA-1 содержимого этого файла, предположим, что значение равно
abc
. - Добавляется файл untrack, git вычисляет SHA-1 содержимого этого файла, предполагая, что значение
abc
также равно . - Если вы сделаете коммит в этот момент, git определит, что у них одинаковое значение SHA-1, и затем обработает их как переименование.
Предположим, вы изменили некоторые отслеживаемые файлы и также переместили их в другую папку. Тогда, к сожалению, git не может определить их как переименованные/перемещенные автоматически при коммите.
Если вы действительно хотите, чтобы git автоматически отслеживал переименование/перемещение,тебе нужно сделать:
Убедитесь, что вы НЕ изменяете файл(ы) и переименовываете/перемещаете файл(ы) только в одном коммите.
Если вы хотите изменить файл и переместить его одновременно и хотите, чтобы git обнаружил переименование/перемещение с помощью TortoiseGit, то в вашем случае:
- Щелкните правой кнопкой мыши по этому файлу и выберите
TortoiseGit -> Rename...
пункт контекстного меню. - префикс
new_folder\
к имени файла, см.: - совершить
Примечание: вам нужно переименовать файлы по одному. Предположим, что предстоит много работы. Поэтому лучше переименовать только файл.
Примечание 2: Если вы изменитемногов файле git не может понять, что это переименование/перемещение.
решение2
Если вы хотите переместить файлы внутри вашего рабочего дерева, например, в другую подпапку, вы можете воспользоваться обработчиком перетаскивания правой кнопкой мыши:
A. выберите файлы или каталоги, которые вы хотите переместить
Б.перетаскивание вправоих в новое место внутри рабочего дерева
C. отпустите правую кнопку мыши
D. в выпадающем меню выберитеКонтекстное меню → Git Переместить сюда файлы с версиями
решение3
Git обработает это на бэкенде после коммита. Пока вы обрабатываете некоммиты, он сначала будет обрабатывать создания и удаления как отдельные действия, но после коммита он попытается разрешить удаления с помощью созданий, чтобы проверить, было ли это на самом деле просто перемещением файла. Вы можете увидеть это сами в журнале коммитов с сообщениями "старый файл ==> новый файл", когда git находит перемещение файла.
В качестве альтернативы вы можете использовать git mv, если это поможет вам чувствовать себя безопаснее. https://git-scm.com/docs/git-mv