Ответ 1
Ну, я нашел самое легкое решение моей проблемы...
git checkout clientYcode
git checkout clientXcode "app/controllers/"
git checkout clientXcode "app/models/"
И это делает то, что я хочу!
Я создал сайт rails для клиента X. У меня теперь есть клиент Y, который хочет, чтобы веб-сайт выполнял то же самое, что и клиент X, но с другим скином.
Я сделал ветвь git с clientXcode и назвал ее clientYcode. Затем я сделал все изменения в представлениях, чтобы они выглядели по-другому, и лала, тот же сайт с другой кожей.
Теперь я не понимаю о git: я внес много изменений в clientXcode в представлениях, моделях и контроллерах; и теперь я хочу объединить эти изменения в clientYcode, исключая любые изменения вида. Поскольку у моделей, моделей и контроллеров есть своя папка в рельсах, я надеялся сделать что-то вроде:
git merge client_x_code 'app/controllers/*', 'app/models/*'
ВОПРОС 1: Возможно ли что-то подобное с git? Если да, то как мне это сделать?
ВОПРОС 2: Разветвлялось лучшее решение, чтобы сделать копию моего проекта?
Ну, я нашел самое легкое решение моей проблемы...
git checkout clientYcode
git checkout clientXcode "app/controllers/"
git checkout clientXcode "app/models/"
И это делает то, что я хочу!
Самый простой способ действий - объединить все, кроме содержимого каталога, который вы хотите сохранить.
Вы можете сделать это, добавив в этот каталог драйвер слияния, в качестве Как сообщить git, чтобы всегда выбирать локальную версию для конфликтующих слияний в определенном файле? вопрос подробности.
С этим драйвером слияния на месте, Ветвление является хорошим решением в этом случае.
Extract:
У нас есть файл
.gitattributes
, определенный в каталогеdirWithCopyMerge
(определенный только в ветке, где происходит слияние:myBranch
), и у нас есть файл.git\config
, который теперь содержит драйвер слияния.
[merge "keepMine"]
name = always keep mine during merge
driver = keepMine.sh %O %A %B