Оформление определенной папки в репозитории Git
У меня есть несколько проектов в разных хранилищах:
tools
thirdparty
shared
├──Common
├──Exceptions
multimedia
├──VolumeControl
├──VideoRenderer
android
├──Audio
Например, android зависит от shared/Common, shared/Exceptions, инструментов третьих лиц и multimedia/VolumeControl.
Я старался:
- Подмодули: https://git-scm.com/book/en/v2/Git-Tools-Submodules
- sparse-checkout: http://jasonkarns.com/blog/subdirectory-checkouts-with-git-sparse-checkout/
Тем не менее, они оба извлекают или приносят мультимедийную папку в папке Android. Вместо этого я хочу это как:
android
├──Audio
├──VolumeControl (brought in from multimedia)
Как мне это сделать?
Примечание: я использовал для этого, используя lockexterns в SVN.
2 ответа
Как мне это сделать?
Ты можешь использовать git filter-branch
и или git subtree split
filter-branch будет зацикливаться на каждом коммите, а затем вы можете извлекать только указанные файлы, пока git subteree split
будет лучшим вариантом в вашем случае.
Объясняя оба варианта, чтобы вы могли выбрать тот, который вы предпочитаете.
Образец кода:
filter-branch
# Filter the master branch to your directory and remove empty commits
git filter-branch --prune-empty --subdirectory-filter YOUR_FOLDER_NAME filter_from_branch
Это извлечет все ваши нужные файлы из данной папки в текущий каталог
subtree split
git subtree
git-subtree
-Merge
поддеревья вместе илиsplit
хранилище в поддеревья
git subtree split -P <name-of-folder> -b <name-of-new-branch>
Интересно, почему с git-submodule
это не могло быть достигнуто. Как я помню, с помощью подмодулей можно указать каталог назначения, и, следовательно, возможно, вы можете сделать что-то вроде этого:
$ cd Android
$ git submodule add url/path-to-your-submodule-repo VolumeControl
$ git diff --cached --submodule # OPTIONAL - To verify before commit
$ git commit -m 'added multimedia/VolumeControl as sub-module'