【问题标题】:How to make git ignore a directory while merging如何让git在合并时忽略目录
【发布时间】:2012-12-31 10:03:56
【问题描述】:

How to setup a git driver to ignore a folder on merge 的答案一样有趣和有用,但它没有回答仍然让我难过的原始问题。

与上面链接的问题不同,我有两个具有相同目录集的分支,为了将一个分支合并到另一个分支中,我需要 git 完全忽略一个目录。

我尝试使用我自己的合并驱动程序,如How do I tell git to always select my local version for conflicted merges on a specific file? 中所述,但这种方法的问题是,只有当这两个分支中存在实际冲突文件时才会调用此驱动程序。每当文件的更改仅在一个分支上时,git 将它们合并而不调用我的合并驱动程序。

这会导致目录中的文件发生我不想要的更改。知道如何让 git 一直忽略该目录中的每个文件——不管它是否被触及?

【问题讨论】:

  • 我最近一直在研究 git,这似乎是可能阻止我们使用它的问题之一,您无法选择性地合并。
  • git filter-branch 命令可能是您要找的。它允许您在过滤合并的内容时进行合并。 git-scm.com/docs/git-filter-branch
  • 感谢 fpr 的回答,但我不明白如何在这种特定情况下应用 filter-branch 而无需为每次合并进行大量手动工作。

标签: git merge


【解决方案1】:

我实际上并没有使用 Git,但我认为这对你的情况有用:

使用类似于此处指定的内容:https://gist.github.com/564416

git checkout master    
git merge --no-commit --no-ff development
git reset -- /path/to/folder # revert updates from path
git commit

再一次,我不使用 git,我只是根据我使用 TryGit 的经验来思考我认为事情是如何工作的。

  1. 结帐大师
  2. 合并,但不提交,不快进。
  3. 现在已进行合并,因此请重置整个目录树
  4. 提交

【讨论】:

  • 我认为你也应该在How to setup a git driver to ignore a folder on merge 中给出这个答案。也许还考虑不显示结帐步骤?这是无关紧要的,我认为它有损解决方案的简单性。
  • 如果我的编辑没有通过,重置应该是git reset -- path/to/folder
  • 似乎仍然存在问题:我尝试删除未跟踪的文件-由于合并而将这些文件添加到目录中,并且有些文件仍然存在。但是,这些从未出现在原始分支上,因此 resetcheckout 似乎没有完全达到预期的效果。
  • 重置不应该是--硬重置吗?
  • 主要问题是如果您决定稍后合并该文件夹,它将不会被合并,因为 git 认为它已经合并了该文件夹。因此,这是一种会破坏您的工作流程的解决方法
【解决方案2】:

假设我在分支登台想要合并 dev 并忽略 /build 文件夹中的更改:

git checkout staging
# go to staging branch

git checkout dev .
# this checkout dev file changes into staging

git reset HEAD build
# this remove added file in build folder

git clean -f
# this drops untracked files we just reseted

git checkout -- .
# this drops changed files we just rested

git status
# check is everything ok

git commit -am 'merge dev into branch'
# create a commit

git merge -s ours dev
# this create a fake merge to trick Git into thinking that a branch is already merged when doing a merge later on.

这个解决方案并不完美,因为它将所有提交合并为一个。 这意味着挑选一些提交可能不合适。

但它能够避免由于重命名/新建/删除导致需要清理的构建文件夹中的大量提交。

【讨论】:

    猜你喜欢
    • 2015-11-24
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2014-11-12
    • 2016-09-08
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多