Re: Making git apply always work relative to current directory
On Sat, Mar 05, 2016 at 11:31:53AM -0800, Junio C Hamano wrote:
Show 32 quoted lines
> "brian m. carlson" <sandals@crustytoothpaste.net> writes:
>
> > If I run git apply --no-index --verbose <patch>, it succeeds in both
> > cases, but when I'm in the git repository, it *silently does nothing*.
>
> That originally sounded peculiar to me and I suspected it to be a
> bug, but it looks like a designed-in feature and with us since
>
> commit edf2e37002eeb30a2ccad5db3b3e1fe41cdc7eb0
> Author: Junio C Hamano <junkio@cox.net>
> Date: Fri Nov 25 23:14:15 2005 -0800
>
> git-apply: work from subdirectory.
>
> When applying a patch to index file, we need to know where GIT_DIR is;
> use setup_git_directory() to find it out. This also allows us to work
> from a subdirectory if we wanted to.
>
> When git-apply is run from a subdirectory, it applies the given patch
> only to the files under the current directory and below.
>
> Signed-off-by: Junio C Hamano <junkio@cox.net>
>
> So exclusion by use_patch() for paths outside the current directory
> seems to be a feature; the log message does not say "why", but if I
> have to guess, the reasoning was probably "The old world order was
> that the command has to always be run from the top level. A user
> who wants to run it from a subdirectory must be doing so for a
> reason, e.g. 'I am currently working in this directory, do not touch
> outside this area'". In any case, I suspect that the existing tooling
> people built over the past 10 years around "git apply" already depends
> on this behaviour, so we cannot lightly change it.
I was planning to add a --here option (maybe spelled --current-directory) that would change that behavior, since I figured that people would be relying on the current behavior. The man page clearly indicates that some people are using it as a better GNU patch, so an option that does that might be useful.
Regardless, I'd say that --verbose should cause git apply to say something. I'm not a newbie with Git, and I spent about an hour trying to figure this out. I've also been bitten by it before elsewhere.
> Is it so hard to temporarily go up to the root, run "git apply", and
> come back? You can use "--no-index --directory=trash" for both
> cases that way.
The existing code used patch until we realized that older versions of GNU patch can't apply certain git diffs. It's not super easy to change it, but I suppose we could.
--
brian m. carlson / brian with sandals: Houston, Texas, US
+1 832 623 2791 | https://www.crustytoothpaste.net/~bmc | My opinion only
OpenPGP: https://keybase.io/bk2204