Ответ 1
Git не поддерживает сбор выбранных файлов в удаленном проекте. Вы можете выбрать файлы, которые вы хотите с поддеревом, а затем выяснить какую-то стратегию для его возвращения, но это обычно сложно, особенно если вы вдруг решите, что хотите еще пару файлов, чем вы первоначально выбрали.
То, что я обычно делаю, это использовать symlinks
. Это можно сделать, добавив проекты в качестве подмодулей в ваш проект, а затем символизируя файлы в нужном месте.
В вашем примере будет выглядеть примерно так:
$ git clone <url> myproject
$ cd myproject
$ git submodule add <url> external_library
$ git submodule add <url> external2
$ cd scripts
$ ln -s ../external_library/common1.js
$ ln -s ../external_library/plugin2.js
$ cd ../styles
$ ln -s ../external2/common.css
Чтобы заставить символические ссылки работать в окнах:
- Если вы являетесь членом группы "Администраторы", вы должны отключить "Контроль доступа пользователя" (UAC) и перезагрузить компьютер.
- Если вы не являетесь администратором, вам нужно получить привилегию SeCreateSymbolicLinkPrivilege
Затем, прежде чем делать какие-либо изменения, я бы пошел и создаю новую ветку:
$ cd external_library
$ git checkout -b myproject
# make changes back in ../myproject
$ git commit <files> # in external_library
Затем вы можете нажать свою ветку на github или что-то еще и отправить запрос на вытягивание автору, чтобы внести свои изменения назад.
Вы можете синхронизироваться следующим образом:
$ cd external_library
$ git checkout master
$ git pull
$ git checkout myproject
$ git merge master
Вам также необходимо обновить родительский проект при изменении подмодуля (например, git commit external_library
). Любой, кто использует ваш проект, должен будет сделать git clone --recursive <url_to_myproject>
.
ПРИМЕЧАНИЕ. Вы можете достичь большей части этого, не используя отдельную ветку для своего проекта. Используйте то, что имеет для вас наибольшее значение.