2013-11-18 9 views
1

У меня есть папка, которая была под мерзавцем на некоторое время, и мне нужно, чтобы переместить мерзавец «репо» одна папки выше, например, мои папки:Переместить git в папку выше?

/project/data/ 
/project/src/.git 

и мне нужно, чтобы переместить его:

/project/data/ 
/project/src/ 
/project/.git 

Edit:
Я имел репо там на некоторое время и она имеет уже существующие истории, которую я хочу, чтобы и я также нужно переместить репо на сервере (то же самое точное структура как локальная машина)

+3

Dupicate of http://stackoverflow.com/questions/1918111/my-git-repository-is-in-the-wrong-root-directory-can-i-move-it-inteadofof – exussum

+0

Вы перемещаетесь это на один уровень выше по эстетическим соображениям или потому, что вы хотите включить каталог 'data' в репо? – R0MANARMY

+0

@ user1281385 - Спасибо, не нашел, что раньше (и он не всплывал в предложениях для меня) – dan2k3k4

ответ

1

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

Если вы хотите сохранить существующую историю, но делать вид, все это случилось каталог выше, вот способ сделать это:

cd /project/src 
git filter-branch --tree-filter 'mkdir src; git mv -k * .gitignore src' 
cd .. 
mv src junk 
mv junk/src src 
mv junk/.git .git 

Команда filter-branch переписывает вашу историю линию так, что все действие происходит под src/ иерархия. Остальное перемещает вещи на место. Если в нем нет пропущенных файлов, они будут оставлены в пространстве имен junk/ в конце.

Предупреждение: Я использовал git mv -k .gitignore src как фильтр, потому что это быстрый и простой способ, но он не сможет перемещать любые DOT-файлы, которые вы могли бы иметь. (В этом случае добавьте их в команду.) Правильный способ состоял бы в том, чтобы использовать git ls-files в качестве индексного списка, но это очень сложно сделать, если двигаться, поэтому, если вы можете избежать этого, средства делать.

+0

Уже есть уже существовавшая история и вы хотите ее сохранить. Мне нужно будет прочитать на ветке фильтра, спасибо. – dan2k3k4

+0

Быстрый вопрос: мне нужно будет запускать обе команды на моем компьютере и на сервере? – dan2k3k4

+2

'filter-branch' - это команда перезаписи истории, поэтому везде, где вы ее запускаете, вам нужно синхронизировать ее везде. Вы никогда не говорили, что у вас есть сервер; команды здесь предполагали, что они работают локально (технически: в выгруженном репозитории). Самый простой способ - выполнить на локальном и принудительном нажатии на сервере, а затем повторить повторное клонирование любого другого клиента. –

0

Это, вероятно, должно работать:

mv /project/src/.git /project/ 
cd /project 
git add . 
git commit 

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

Смежные вопросы