Reputation: 51844
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.
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.
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.
I sent a bug report to the Git mailing list. You can follow and participate in the discussion here.
Upvotes: 5
Views: 3558
Reputation: 51844
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!
Upvotes: 5
Reputation: 51844
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.
Upvotes: 3