Question

I use git gui to select lines for being staged for a commit. This normally works like a charm. I am aware of the option to do the same on the command line.

Whenever a file does not initially have a new line at the end of the file git gui recognizes this and appends a warning message in the editor as I illustrated in the screenshot.

Git Gui

Problem

The problem which results from the missing line break is that one can no longer stage and commit individual lines. When I right-click to select the specific line and choose Stage line for commit from the context menu an error message pops up.

error: fatal: corrupt parch at line 11.

The problem is not specific to the operating system and can be repoduced on Windows, MacOSX and Linux. I know that I can avoid the problem if I add a new line to the file and commit this version before I continue selecting individual lines.

Steps to reproduce the problem

  1. Initialize a new repository.
  2. Create a file with three lines of content each with the word "Hallo". Do not put a new line at the end of the file.
  3. Add and commit the file.
  4. Edit the same file putting words inbetween the three lines.
  5. Open git gui and try to stage the changes line by line.

Request

I wonder if there is some configuration for Git which allows me to circumvent the problem. Some automatism such as a hook which adds the desired new line would also be fine.

Bug report

I sent a bug report to the Git mailing list. You can follow and participate in the discussion here.

Was it helpful?

Solution

Thanks to Heiko Voigt there is a bugfix for the behavior. We fixed this at the Git-Merge conference - thanks to GitHub for organizing this. The patch is pending on the mailing list at the moment. As soon as it is merged and released I am going the update this post here.


Finally, gitgui-0.18.0 has been merged into git v1.8.4 and is part of the official release (Aug 23, 2013). Now everybody can enjoy staging linewise commits regardless of a new line at the end of the file. Thanks again to Heiko!

OTHER TIPS

I found an pre-commit hook which takes care of the problem. Though, it is not the perfect solution since the fix applies not until you actually commit the file. I created a gist for the script so you can modify it if you like to improve on it.

The original script was posted by Matt Baker. I reduced it to the fact of adding a new line but also included the routines for removing trailing whitespace. There is however one change regards the linebreak character: I added \n contrary to Matt's recommendation.

Problem case:

I used the script in a git rebase workflow. This caused git to change all files which have trailing spaces. It resulted in a massive diff. Therefore, I recommend to think over using the script.


Furthermore, I found this discussion on how to integrate hooks into multiple repositories quite interesting. You might wanna look into this when setting up your own hooks.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top