Reputation: 553
As interesting and useful as the answer to How to setup a git driver to ignore a folder on merge was, it did not answer the original question which still has me stumped.
Unlike the question linked to above, I have two branches with the same set of directories and for merging one into the other I need git to ignore one directory completely.
I tried it with my own merge driver as described in How do I tell git to always select my local version for conflicted merges on a specific file? but the problem with this approach is that this driver is only invoked when there is an actual conflicting file in these two branches. Whenever the changes of a file are only on one branch, git merges them without calling my merge driver.
This leads to changes in files in the directory that I do not want. Any idea how I could make git ignore each and every file in that directory all the time - whether it was touched or not?
Upvotes: 55
Views: 34573
Reputation: 108
Let's say I'm on branch staging want to merge dev and ignore changes in /build folder:
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.
this solution is not perfect because it will merge all commits into one. which means cherry-pick some commits may not suitable.
but it's able to avoid lots of commit in build folder caused by rename/new/delete that need to clean up.
Upvotes: 1
Reputation: 5145
I don't actually use Git, but I think this would work for your case:
Use something like what's specified here: 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
Again, I don't use git, I am just deferring to how I think things work based on my experience with TryGit.
Upvotes: 90