Skip to contentSkip to conversation

git-merge: need a tap with the cluestick, please

DISCUSSION walt 2 participants 3 messages Jun 15, 2016

lore
Share & tools
lore

walt

author
#0 lore raw

I just tried my first local modification to Linus's tree, and I can't get the merge to work. Maybe my whole approach is wrong?

I wanted start compiling the kernel out-of-tree, so I added my own 'obj' directory at the top level.

I then got conflicts when trying to pull from Linus, so I added my 'obj' directory to my toplevel .gitignore file and committed the local change to my 'master' branch. (This is my only local modification because I'm only tracking Linus, not developing the kernel.)

Now when I pull from Linus the merge stops in the middle because of conflicts with my .gitignore file <sigh>. Anything I try now with git-merge tells me I can't do that in the middle of a conflicted merge. Yes, I know that now, but what should I do instead?

I could move my 'obj' out-of-tree but then I wouldn't learn anything. This has to be bone-head easy, but not for me :)

Clues most welcome.

#1 lore raw
Quoted 7 lines · walt

Now when I pull from Linus the merge stops in the middle because of conflicts with my .gitignore file <sigh>. Anything I try now with git-merge tells me I can't do that in the middle of a conflicted merge. Yes, I know that now, but what should I do instead?

I could move my 'obj' out-of-tree but then I wouldn't learn anything. This has to be bone-head easy, but not for me :)

How about putting the ignore for your obj dir in your own private exclude file:

  $ echo /obj >>.git/info/exclude

will cause Git to ignore an "obj" directory if it is found in the top level of the repository. And since this file is not actually tracked as part of the repository it will apply to all branches in this repository and won't cause merge conflicts when upstream makes changes to .gitignore.

As for aborting a merge that you have gotten into the middle of decided you want to get out of, use git reset --hard. That will throw away all of the unmerged state and put you back to your pre-merge state.

Signature · 1 line
Shawn.
author
#2 lore raw
Quoted 12 lines · Shawn O. Pearce
Quoted 7 lines · walt

Now when I pull from Linus the merge stops in the middle because of conflicts with my .gitignore file <sigh>. Anything I try now with git-merge tells me I can't do that in the middle of a conflicted merge. Yes, I know that now, but what should I do instead?

I could move my 'obj' out-of-tree but then I wouldn't learn anything. This has to be bone-head easy, but not for me :)

How about putting the ignore for your obj dir in your own private exclude file:

Quoted 7 lines
  $ echo /obj >>.git/info/exclude

will cause Git to ignore an "obj" directory if it is found in the top level of the repository. And since this file is not actually tracked as part of the repository it will apply to all branches in this repository and won't cause merge conflicts when upstream makes changes to .gitignore.

Thanks to both you and Lars, who gave me the same advice off-list. I will do exactly that.

Just to illustrate how much of life depends on blind luck, both good and bad, I'll explain what really got me in trouble here. On the very first pull from Linus after I added my obj directory to .gitignore -- I pulled this commit:

commit 9e447a7f1fd997bcb9266899e777c37469245365

Author: Denis V. Lunev <[email protected]>
Date:   Tue Oct 16 11:22:21 2007 +0400

.gitignore update for x86 arch
This patch: - makes .gitignore files visible to git

I'd like to think that if I'd made my changes on *any* other day but yesterday I wouldn't have been so completely confused by what happened. (But perhaps I flatter myself :o)

Thanks again.