Это зависит от того, что вы хотите оставить в хранилище впоследствии.
Если вы хотите три ветви, v1.0
, v2.0
, v3.5
, все со структурой, подобной этой:
/root
/lib
/tools
/src
тогда да, я почти уверен, что вы можете сделать это. В итоге вы получите нечто подобное с точки зрения структуры ветки:
-- A -- B -- Current
|
|--- v1.0
|--- v2.0
|--- v3.5
A
, B
, Current
- это коммиты, которые вы зафиксировали с момента перехода на git, и где v1.0
, v2.0
и v3.5
по сути являются "тупиковыми" ветвями. Вы могли бы сделать несколько причудливых вещей, если вы хотите получить структуру веток, например:
-- v1.0 --- v2.0 --- v3.5 -- A -- B -- Current
То есть разделите v1.0
, v2.0
и v3.5
на их собственные ветви, затем переместите v1.0
на v2.0
, v2.0
на v3.5
и v3.5
на первый коммит в текущей версии.
Но я не совсем уверен, что вы хотите сделать.
Есть ли способ разделить 3 версии в подкаталоге src на отдельные ветви вместо сохранения каталога для каждой версии?
Да, я уверен, что вы можете сделать это. Моя методология немного ... запутанная, я признаю, но здесь идет. Пожалуйста , будьте осторожны и прочитайте справочные страницы - следующие команды вероятно не все испортят, но используйте на свой страх и риск.
git checkout -b v1.0
- попасть в новую ветку.
Удалить все, кроме v1.0
. Есть несколько способов сделать это. Этот вопрос имеет несколько методов для удаления всего, кроме; Я не мог заставить их работать на меня, это могло бы работать лучше для вас.
`git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch src/v2.0" --prune-empty -f`
Это удалит src/v2.0
и всю связанную историю из ветви. -f
не требуется для этого фильтра; но git-filter-branch
делает какое-то резервное копирование (прочитайте справочную страницу?), и это может привести к ошибкам. Это будет вызывающе во второй раз, когда вы попробуете git filter-branch
.
Повторите это, чтобы удалить также src/v3.5
.
Это оставит вас с src/v1.0
. Возможно, вы захотите изменить источник с src/v1.0
на src
; Вы можете запустить git filter-branch --subdirectory-filter
(прочитайте страницу руководства), чтобы получить структуру каталогов /v1.0-files
(не содержит ничего, кроме файлов из подкаталога v1.0
; переместил содержимое из v1.0
в root
), а затем посмотреть в примерах на странице man git-filter-branch
(в частности, в нижнем примере), чтобы переместить файлы в подкаталог. Это может быть излишним, и вам нужно будет слить , который , в ветвь, содержащую все остальные вещи, которые git filter-branch --subdirectory
отбраковал; простой mv v1.0/* .
может сработать, но тогда в вашей истории будет еще один коммит. Я не знаю, что ты предпочитаешь.
Итак, теперь у вас есть v1.0
в его собственной ветке. Yay!
Повторите для v2.0
и v3.5
.
Боюсь, я не вижу, чтобы это что-то делало, кроме как дать вам ... "странную" историю, хотя. Предположительно v2.0
имеет, по существу, v1.0
+ улучшения; структура, которую я перечислил выше (три «тупиковые» ветви), показывает, что v2.0
и v3.5
не основаны на предыдущих версиях. Я не совсем уверен, какая у вас история, если это проблема и т. Д. И т. Д.
Поскольку у вас есть v1.0
, v2.0
и v3.5
в их собственных маленьких ветвях, вы можете git merge
их или git rebase
и т. Д. И т. Д., Если вы предпочитаете более приятную историю.
Надеюсь, это даст вам немного подумать; как я уже сказал, пожалуйста, прочитайте справочные страницы . :)