% pwd /tmp/OpenStreetMap.ru % ls -A .git README api other search www
% git remote add leaflet git://github.com/CloudMade/Leaflet.git % git fetch leaflet
% git merge -s ours --no-commit leaflet/master % git read-tree --prefix=x/ -u leaflet/master % git mv x/dist www/leaflet % git rm -rf x
Теперь всё готово к коммиту:
% git status # On branch master # Changes to be committed: # # new file: www/leaflet/images/layers.png # new file: www/leaflet/images/marker-shadow.png # new file: www/leaflet/images/marker.png # new file: www/leaflet/images/popup-close.png # new file: www/leaflet/images/zoom-in.png # new file: www/leaflet/images/zoom-out.png # new file: www/leaflet/leaflet.css # new file: www/leaflet/leaflet.ie.css # new file: www/leaflet/leaflet.js # % git commit
Just as planned:
% find www/leaflet www/leaflet www/leaflet/images www/leaflet/images/layers.png www/leaflet/images/marker-shadow.png www/leaflet/images/marker.png www/leaflet/images/popup-close.png www/leaflet/images/zoom-in.png www/leaflet/images/zoom-out.png www/leaflet/leaflet.css www/leaflet/leaflet.ie.css www/leaflet/leaflet.js
% git fetch leaflet % git merge -s recursive -X subtree=dist leaflet/master Auto-merging www/leaflet/leaflet.css Merge made by the 'recursive' strategy. www/leaflet/leaflet.css | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
Мне лично кажется не особо хорошо что в проект лезет вся история лифлета, поэтому возможно лучше будет обновлять его как-то так:
% git fetch leaflet % rm -rf www/leaflet % git checkout leaflet/master dist % git mv dist www/leaflet % git commit -m "Update leaflet"
либо ручной заменой исходников, что то же самое. Плюсы subtree проявятся если в leaflet будут локальные изменения (тогда будет удобный merge) либо если понадобится bisect (т.е. можно будет узнать какой конкретно коммит в leaflet что-то нам сломал). Т.к. leaflet со всей историей вмержить никогда не поздно, если перечисленного пока не нужно, я бы лично (пока) ограничился заменой исходников.