2016-12-26 1 views
1

Внутри RepoA, есть каталог (directoryA) с некоторыми файлами (file1, file2, file3), и я хочу, чтобы переместить эти файлы из RepoA в RepoB.Как импортировать файлы из RepoA в RepoB, сохраняя при этом коммиты, связанные с этими файлами?

Это RepoA:

RepoA 
    directoryA 
     file1 
     file2 
     file3 
    directoryB 
     file1 
     file2 
     file3 

После того, что я хочу сделать, RepoB будет выглядеть так:

RepoB 
    directoryA 
     file1 
     file2 
     file3 

Я мог бы просто скачать directoryA из RepoA и загрузить его на RepoB, но я бы теряет коммиты, связанные с file1, file2 и file3.

Я также не могу передать весь RepoA в RepoB (как в слиянии), потому что совершающее от directoryB бы неуместны в RepoA.

Edit: Я попытался с помощью git filter-branch --subdirectory-filter directoryName -- --all

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

fatal: refusing to merge unrelated histories 
+1

Yo означает, что вы хотите сохранить историю из репо? все это или только для файлов, связанных с каталогом? – MTZ4

+1

Мне нужна только история файлов, которые я перемещаю, а не всю историю репо. – maviz

ответ

2

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

В местном RepoA,

(1) git filter-branch --subdirectory-filter directoryA <branch> 
(2) mkdir directoryA 
(3) mv * directoryA 
(4) git add . 
(5) git commit -am 'message' 

В местном RepoB,

(6) git remote add repoA <local RepoA’s path> 
(7) git pull RepoA <branch> 

Если вы получите сообщение об ошибке: fatal: refusing to merge unrelated histories на этапе (7), вы можете вытащить игнорируя несвязанные истории, делая git pull RepoA <branch> --allow-unrelated-histories

Тогда file1, file2 и file3 истории фиксаций в RepoB. Вы можете использовать gitk --all для более четкого просмотра.

Подробнее см. here. (Два последних комментария (this и this) могут уточнить его далее).

+0

Не работает. Остальные каталоги, которые были в репо-а, исчезли. Кроме того, я не могу вытащить из локального repo-a в repo-b: я получаю ошибку >> фатальный: отказываясь объединять несвязанные истории – maviz

+0

Я только что закончил читать упомянутую вами ссылку, а также прочитал комментарии.Все они всегда приводят к одной и той же ошибке, и это всегда происходит на одном и том же шаге (pull step) $ fatal: отказ от объединения несвязанных историй – maviz

+1

Да, после первой команды вы обнаружите, что у RepoA есть только файлы, которые были включены в подпапку теперь находятся в корневом каталоге RepoA. Вот почему вторая и третья команды: снова вставьте файлы в подпапку. Для шага вытаскивания git вы можете попробовать «git pull master-up -allow-unrelated-history» вместо этого. –

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