2016-02-29 1 views
1

Я знаю, что есть много подобных тем, но я не мог найти ответ на свою ситуацию. Использование Git 1.8.3.1 У меня есть GIT репозиторий в:Переместить репозиторий Git на 3 уровня из текущей папки, сохранить историю и добавить новые файлы

/path/to/my/git/repo/.git

Я хочу, чтобы переместить репозиторий /path/.git

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

Как я могу это сделать правильно? (Фильтр-ветвь?)

Благодаря

UPDATE # 1 Мое намерение состоит в том, чтобы сохранить файлы, где они находятся, а также расширить репозиторий включить свои родительские каталоги + сохраняя историю вложенных файлов:

Старый репо: /путь/к/My/мерзавец/репо/

Новый репозиторий /путь/

UPDATE # 2 я думал, может быть, является более простым решением, чем this, без перемещения фактических файлов.

+0

Описание ДАЕТ НИКАКИХ смысл. 'repo/.git' - это репозиторий, операционная копия' repo'. Таким образом, вы можете перемещать папку 'repo' в любом месте, это не влияет на историю вообще. Что именно вы хотите повторно добавить? – kan

+0

Я понял, что вопрос о _expanding_ в существующем репозитории должен включать его родительские каталоги. @amirb, можете ли вы изменить свой вопрос, чтобы быть более понятным? –

+0

отредактирован по вашему запросу, спасибо! – amirb

ответ

1

Таким образом, в основном есть два шага здесь:

A. Перемещение файлов, которые находятся под мерзавец, так что мерзавца репо имеет правильный корень:

cd /path/to/my/git/repo/ 
mkdir -p to/my/git/repo/ 
git mv * to/my/git/repo/ 
git status #check all files are moved. 
git commit -m "megamove!!!" 

B. Переместить результат в правильное положение:

mv * /path/ 
cd /path/ 
rm -r to/my/git/repo/ #drop empty dir 

Кроме того, другой подход, более простым (но иногда это может быть не очень хорошо, если у вас есть неправильный CRLF):

mv /path/to/my/git/repo/.git /path/ 
cd /path 
git add -A 
git status #check all files are moved. 
git commit -m "megamove!!!" 

История должна быть сохранена, проверьте его с git log -M

+0

Второй подход не сохраняет историю файла, если выполнить «мерзавец войти -p - к/мой/мерзавец/репо/file1» не будет показывать все версии файла ... :-( – amirb

+0

На самом деле, оба эти подходы не дают мне ничего, когда я выполняю git log для определенного файла. (Может быть, я что-то делаю неправильно?) – amirb

+0

Я понял это! Оказывается, мне нужно было выполнить «git log --follow master - some.file ", чтобы просмотреть историю этого файла, потому что он был переименован, когда я снова добавил его в новое место репо. Спасибо! – amirb

0

Каталог .git содержит метаданные для вашего Git repo. Фактическое Git-репо, вероятно, размещается под репо /.

Ваше репо - это всего лишь справочник, касающийся вашей ОС. Его можно перемещать везде, где вы хотите, и Git repo (в комплекте с историей) будет двигаться вместе с ним.

Таким образом, в вашем примере, что вы, вероятно, хотите переместить репо/к/пути:

mv /path/to/my/git/repo /path/. 
Смежные вопросы