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

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

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

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

Ответы [ 9 ]

231 голосов
/ 14 июля 2010

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

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

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

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

37 голосов
/ 12 июля 2013

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

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

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%)

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

34 голосов
/ 17 декабря 2009

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

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

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

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

17 голосов
/ 17 декабря 2009

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

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

9 голосов
/ 03 октября 2015

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."
3 голосов
/ 17 декабря 2009

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

2 голосов
/ 22 ноября 2012

Я пришел сюда в поисках способа переместить мой репозиторий куда-нибудь .

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

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

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

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

1 голос
/ 08 июля 2016

Только что пройдя через эту же проблему, мое окончательное решение было:

  1. Переместите папку .git туда, где она должна быть.
  2. Перейдите в папку, которую я только что переместил .git в
  3. Сброс содержимого папки до того, что git считает, что оно должно быть: git reset --hard HEAD
  4. Убедитесь, что содержимое совпадает с тем, каким оно должно быть, с помощью kdiff3 или другого инструмента сравнения
  5. Удалить теперь не версированные файлы в старом месте.

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

0 голосов
/ 18 февраля 2017

Здесь есть два пути:

  1. cd TheWrongDirectory rm -rf .git

  2. просто УДАЛИТЕ папку .git и перейдите в нужный каталог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...