【问题标题】:Git merge from a specific folder onlyGit 仅从特定文件夹合并
【发布时间】:2010-12-13 04:02:21
【问题描述】:

我为客户 X 创建了一个 Rails 网站。我现在有一个客户 Y,他想要一个与客户 X 做同样事情但皮肤不同的网站。

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

下面是我对 git 的不理解:我在视图、模型和控制器中对 clientXcode 进行了许多更改;现在我想将这些更改合并到 clientYcode 中,不包括任何视图更改。由于视图、模型和控制器在 Rails 中都有自己的文件夹,因此我希望能够执行以下操作:

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

问题 1:git 可以实现类似的功能吗?如果是这样,我该怎么做?

问题 2:分支是复制我的项目的最佳解决方案吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    这就是我想要的!

    【讨论】:

    • 但这在你的工作区只是暂时的,下次你切换分支时,你将不得不重复所有这些。
    • 那么我当然会做一个提交来保存我当前分支中的更改
    • 太好了!另请参阅 jasonrudolph.com/blog/2009/02/25/… 以获得完整的文章!
    【解决方案2】:

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

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


    摘录:

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

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

    【讨论】:

    • @DotNetWise 你可以看到keepMine.shstackoverflow.com/a/930495/6309中定义和使用(在Windows上)
    • 谢谢。仅作记录,它可能只是位于您的PATH 文件夹中的keepMine.bat
    猜你喜欢
    • 2014-01-28
    • 2023-04-10
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2017-07-01
    相关资源
    最近更新 更多