Git仅从特定文件夹合并

时间:2009-11-04 19:53:08

标签: ruby-on-rails git merge branch directory

我已经为客户端X创建了一个rails网站。我现在有一个客户端Y,他想要一个与客户端X完全相同但网站不同的网站。

我从clientXcode创建了一个git分支,并将其命名为clientYcode。然后,我对视图进行了所有更改,使其看起来与众不同,而拉拉则是一个不同皮肤的网站。

现在这里是我对git不了解的内容:我在视图,模型和控制器中对clientXcode进行了很多更改;现在我想将这些更改合并到clientYcode中,排除任何视图更改。由于视图,模型和控制器在rails中都有自己的文件夹,我希望能够做到这样的事情:

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

问题1:使用git可以实现这样吗?如果是这样,我该怎么做?

问题2:分支是制作项目副本的最佳解决方案吗?

2 个答案:

答案 0 :(得分:9)

我找到了解决问题的最简单方法......

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

这就是我想要的!

答案 1 :(得分:2)

最简单的操作方法是合并所有内容,但要保留的目录内容除外 您可以通过在该目录中添加合并驱动程序来完成此操作,作为How do I tell git to always select my local version for conflicted merges on a specific file?问题详细信息。

使用该合并驱动程序,在这种情况下,分支是一个很好的解决方案。


提取物:

  

我们在.gitattributes目录中定义了dirWithCopyMerge文件(仅在合并将发生的分支中定义:myBranch),我们有一个.git\config文件现在包含合并驱动程序。

[merge "keepMine"]
        name = always keep mine during merge
        driver = keepMine.sh %O %A %B