Каким-то образом, когда я git init
редактировал свой последний проект около месяца назад, я запускал команду в каталоге на один каталог выше, чем корень моего проекта.
Итак, мой репозиторий находится в ./project
каталоге, а не в ./project/my-new-project
каталоге. Я не знаю, как я не осознавал проблему раньше, но до сих пор я никогда не искал каталог .git.
Есть ли способ, не убивая мой проект, переместить репозиторий в соответствующий каталог, а затем сообщить git, что такое новая база проекта? Просто переместить каталог не получится. Git считает, что все файлы удалены.
У меня была противоположная проблема - мне пришлось переместить корень git в родительский каталог (из проекта / src в проект). К моему крайнему удивлению, следующее сработало !!
git ловко обнаружил, что все новые файлы были переименованы в версии старых, и история не была потеряна
Вы можете попробовать что-то подобное ... переместите папку .git и снова добавьте файлы перед фиксацией
источник
git rm'd
загружаю файлы из их старого местоположения, поэтомуgit status
(правильно) в конечном итоге сообщил о нескольких операциях переименования. Чем больше я работаю с git, тем больше мне он нравится..gitignore
и запустилgit add -A
в корневой папке; после этого git правильно отображал все файлы какrenamed
вместоdeleted
. 2. Поскольку я использую подмодули, мне пришлось перейти.gitmodules
к новому корню и обновить путь к подмодулю в различных файлах конфигурации git. Чтобы найти, какие файлы нужно изменить, я запустилgrep -nrI --color 'old/path/to/submodule' .
Это сработало для меня и сохранило всю мою историю нетронутой. Из неправильной корневой папки (родительской, где вы случайно инициализировали репо):
Переместите папку:
Повторно инициализируем репозиторий git:
Повторно добавьте все файлы, зафиксируйте и нажмите:
Готово! Купи себе пива.
Когда вы фиксируете репозиторий git после повторной инициализации, вы получите кучу результатов, которые выглядят следующим образом:
Другими словами, все ваши ссылки из родительской папки переименовываются в правильную папку.
источник
git filter-branch
позволяет переписать историю таким образом. Наgit filter-branch
странице руководства даже есть ваш случай в качестве примера :Вероятно, вы захотите
git clone
поместить репо в новый подкаталог до (или после?)git filter-branch
Запуска. (Клонирование до filter-branch и запуск filter-branch на новом клоне будет иметь то преимущество, что оставит исходный.git/
каталог на месте в качестве резервного на случай, если что-то пойдет не так.)источник
.git
репо остается на верхнем уровне, а подкаталоги становятся «воспринимаемыми как корень») - это буквально отбрасывает все другие файлы в репо и перемещает всеsubdirectory/*
файлы в корневую папку. ,git push --force
обновление вышестоящего репозитория.Git может запоминать файлы с их хэшами,
Просто переместите ваш
.git
в корневой каталог и скажитеgit
запомнить все изменения файлов с помощью--all
option.источник
Используйте
git-mv
для перемещения файлов «вверх» в нужное место, затемgit-rm
в каталог «my-new-project».источник
Я пришел сюда в поисках способа переместить свой репозиторий куда угодно .
В случае, если я был не один, вот что я в итоге сделал:
https://git.wiki.kernel.org/index.php/GitFaq#How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F Я "git clone --mirror" даю пустую копию моего репо, а затем сказал, чтобы он больше не был голым, поэтому файлы появились в этой новой папке. (Затем проверил, появились ли файлы и журнал.) На всякий случай оставил старое репо ...
Таким образом, я смог переместить свое репо без потери истории.
С наилучшими пожеланиями, Дина
источник
mv /path/to/the/old/location/of/the/repo /path/to/the/new/location/of/the/repo
.Пройдя через эту же проблему, мое окончательное решение было:
git reset --hard HEAD
Это сработало как по волшебству, не повлияв на историю. - NB. Если вы внесли какие-то изменения, обязательно зафиксируйте их перед перемещением каталога .git.
источник
Здесь есть два пути:
источник