Git merge только из определенной папки

Я создал веб-сайт rails для клиента X. Теперь у меня есть клиент Y, которому нужен веб-сайт, который делает то же самое, что и клиент X, но с другой оболочкой.

Я сделал ветку git из clientXcode и назвал ее clientYcode. Затем я внес все изменения в представления, чтобы они выглядели по-другому, и лала, тот же веб-сайт с другой оболочкой.

Вот чего я не понимаю в git: я внес много изменений в clientXcode в представлениях, моделях и контроллерах; и теперь я хочу объединить эти изменения в clientYcode, исключив любые изменения представления. Поскольку у представлений, моделей и контроллеров есть собственная папка в рельсах, я надеялся, что смогу сделать что-то вроде:

git merge client_x_code 'app/controllers/*', 'app/models/*'

ВОПРОС 1: Возможно ли что-то подобное с git? Если да, то как мне это сделать?

ВОПРОС 2: Было ли ветвление лучшим решением для создания копии моего проекта?


person tybro0103    schedule 04.11.2009    source источник


Ответы (2)


Что ж, я нашел самое простое решение своей проблемы ...

git checkout clientYcode
git checkout clientXcode "app/controllers/"
git checkout clientXcode "app/models/"

И это то, что я хочу!

person tybro0103    schedule 05.11.2009
comment
Но это только временно в вашей рабочей области, и в следующий раз, когда вы переключите ветвь, вам придется все это повторить. - person ScottJ; 06.11.2009
comment
ну, я, конечно, делаю коммит, чтобы сохранить изменения в моей текущей ветке - person tybro0103; 06.11.2009
comment
Это мило! Также см. jasonrudolph.com/blog/2009/02/25/ для полной записи! - person oae; 09.07.2013

Самый простой способ действий - объединить все, кроме содержимого каталога, который вы хотите сохранить.
Вы можете сделать это, добавив в этот каталог драйвер слияния в виде Как сообщить git, чтобы он всегда выбирал мои локальная версия для конфликтующих слияний в определенном файле? подробности вопроса.

С этим драйвером слияния в этом случае хорошим решением будет ветвление.


Извлекать:

У нас есть файл .gitattributes, определенный в каталоге dirWithCopyMerge (он определен только в ветке, где произойдет слияние: myBranch), и у нас есть файл .git\config, который теперь содержит драйвер слияния.

[merge "keepMine"]
        name = always keep mine during merge
        driver = keepMine.sh %O %A %B
person VonC    schedule 04.11.2009
comment
@DotNetWise вы можете увидеть keepMine.sh, определенный и используемый (в Windows) в stackoverflow.com/a/930495/6309 - person VonC; 16.09.2013
comment
Спасибо. Для записи: это может быть просто keepMine.bat в ваших PATH папках. - person Adaptabi; 16.09.2013