Мой репозиторий Git находится в неправильном корневом каталоге. Могу ли я его переместить? (../вместо./)

Как-то, когда я git init редактировал мой последний проект месяц назад, я запустил команду в каталоге в одном каталоге выше, чем корень моего проекта.

Итак, мой репозиторий находится в каталоге ./project, а не в каталоге ./project/my-new-project. Я не знаю, как я раньше не понимал проблему, но до сих пор я просто не искал каталог .git.

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

Ответ 1

Вероятно, самая простая вещь, если вы уже не создали некоторую историю, которую хотите сохранить, - просто удалить подкаталог .git и повторить инициализацию в правильной директории.

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

Ответ 2

У меня была противоположная проблема - мне пришлось переместить корень git в родительский каталог (из проекта /src в проект) К моему крайнему удивлению, работала следующая работа.

src$ mv .git ../ 
src$ cd ..
project$ git add src
project$ git commit -a

git ловко обнаружил, что все новые файлы были переименованы в версии старых и история не была потеряна

Вы можете попробовать что-то подобное... переместите папку .git и добавьте файлы еще раз, прежде чем совершать

Ответ 3

git filter-branch позволяет переписать историю таким образом. git filter-branch man page даже имеет ваш случай в качестве примера:

Чтобы переписать репозиторий так, как будто foodir/был его корнем проекта, и отбросить всю историю:

git filter-branch --subdirectory-filter foodir -- --all

Вероятно, вы хотите git clone repo в новый подкаталог до (или после?) запуска git filter-branch. (Клонирование перед ветвью фильтров и запуск ветки фильтра на новом клоне будет иметь преимущество, заключающееся в том, что исходный директорий .git/ будет использоваться в качестве резервной копии, если что-то пойдет не так.)

Ответ 4

Это сработало для меня и сохранил всю мою историю. Из неправильной корневой папки (родителя, где вы случайно инициализировали репо):

Переместите папку:

mv .git thecorrectfolder/

Повторно инициализировать репозиторий git:

cd thecorrectfolder/
git init

Повторно добавьте все файлы, зафиксируйте и нажмите:

git add .
git commit -am 'fixing things'
git push origin master

Готово! Приготовь себе пиво.

Когда вы завершаете репозицию git после повторной инициализации, вы получите кучу вывода, которая выглядит так:

rename {ethanode/coffee => coffee}/app.coffee (100%)

Другими словами, все ваши ссылки из родительской папки и их переименование для использования правильной папки.

Ответ 5

Git может запоминать файлы со своими хэшами,

Просто переместите свой .git в корневой каталог и сообщите git, чтобы запомнить все изменения файлов с помощью опции --all.

$ mv .git ../
$ cd ..
$ git add . --all 
$ git status // => you can see all the files recognized as renamed 100%
$ git commit -m "Moves repo to root directory."

Ответ 6

Используйте git-mv, чтобы переместить файлы "вверх" в нужное место, затем git-rm каталог "my-new-project".

Ответ 7

Я пришел сюда, чтобы найти способ переместить мой репозиторий где угодно.

В случае, я был не единственным, вот что я сделал в конце:

https://git.wiki.kernel.org/index.php/GitFaq#How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F I "git clone --mirror" d голая копия моего репо, а потом сказал, чтобы он не был голым больше, поэтому файлы появились в этой новой папке. (Затем была проверена, появились ли файлы и журнал.) Некоторое время сохранялось старое репо, на всякий случай...

Таким образом, я смог переместить свое репо, не теряя истории.

С наилучшими пожеланиями, Дин

Ответ 8

Пройдя эту же проблему, мое возможное решение было:

  • Переместите папку .git туда, где она должна быть.
  • Измените каталог на папку, которую я только что переместил .git, чтобы
  • Reset содержимое папки, на которое git считает, что оно должно быть: git reset --hard HEAD
  • Убедитесь, что содержимое соответствует тому, что должно быть с kdiff3 или другим инструментом сравнения
  • Удалите текущие файлы без изменений в прежнем месте.

Он работал как магия, не влияя на историю. - N.B. Если вы внесли некоторые изменения, обязательно зафиксируйте их перед перемещением каталога .git.

Ответ 9

Здесь есть два способа:

  • cd TheWrongDirectory rm -rf.git

  • просто удалите папку .git и cd в нужный каталог.