git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 3/3] Allow whole-tree operations to be started from a subdirectory

From
Junio C Hamano <junkio@cox.net>
Date
Jan 14, 2007, 00:50 UTC
Message-ID
<7vps9iig83.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<200701140111.20671.Josef.Weidendorfer@gmx.de>
Josef Weidendorfer <Josef.Weidendorfer@gmx.de> writes:
Show 15 quoted lines
> On Friday 12 January 2007 21:56, Junio C Hamano wrote:
>> This updates five commands (merge, pull, rebase, revert and cherry-pick)
>> so that they can be started from a subdirectory.
>> 
>> This may not actually be what we want to do.  These commands are
>> inherently whole-tree operations,...
>
> Why not add a general "--top" option to the "git" wrapper,
> to temporarily let git change to the toplevel while running
> the command?
>
> The wish to allow git-fetch from subdirectories is the
> inconvenience to have to cd up, and later down. This is
> avoided by running "git --top fetch", and theses people
> should be happy.

Well, git-fetch does not have anything to do with the working tree, so it does not matter if you run from a subdirectory. You do not even need --top for it (and you don't with v1.5.0-rc1).

If we replace "git-fetch" in what you said with one of the commands I listed in the message you quoted, what you said becomes at least internally consistent. But I do not necessarily agree with it.

Adding --top and refusing to work without the option gives a false impression that it is a bug that they do not work from the top in the current implementation, and someday we might do these commands limited to the current directory when the user is in a subdirectory. But for the above commands, it is definitely not the case. They are inherently whole-tree operations and it ould actually be a bug to limit their operation to a single subdirectory.

For example, what would a "merge" limited to the current directory do? It would probably do the usual 3-way merge for the current directory and apply the 'ours' strategy for the rest of the tree.

But that is obviously wrong. The new commit claims that "I considered the whole tree states these two commits record, and came up with this another whole tree this commit records -- it suits my purpose better than either of these other two trees". Future merges that involve the resulting commit will take this statement into account, and will revert the changes the other branch would have brought in outside the current directory if your merge result is later merged into somebody else's tree.

Rebasing a series of commits on top of some other branch, but limiting only to the current directory does not make much sense, either; it would lose the changes to the other parts of the tree. Losing the changes to the other parts of the tree might sometimes be what the user would want, but for the most cases that would not be true. Also what the original log messages say would not match the set of partial changes limited to the current directory you are porting forward, so you would need to reword the logs as well if you are limiting its operation to the current directory. In other words, it might be sometimes useful but that is not a "rebase" anymore -- it is something else. The same discussion applies to the last two commands in the list (revert and cherry-pick).

So for that reason, I think there are only two valid choices. Either we insist these commands to be run from the top, or we always automatically run these commands by cd'ing to the top ourselves.

Previous: Josef WeidendorferNext: Steven Grimm
Message 20 of 28 in “What's in git.git and announcing GIT v1.5.0-rc1”
  1. Junio C HamanoJan 12, 2007
  2. reflog-expire: brown paper bag fix.Junio C Hamano, Jan 12, 2007
  3. Shawn O. PearceJan 12, 2007
  4. Andy ParkinsJan 12, 2007
  5. Friendlier error message for commands that can't be run from a subdirectory.koreth@midwinter.com, Jan 12, 2007
  6. Steven GrimmJan 12, 2007
  7. Change to the repository's root directory if needed.koreth@midwinter.com, Jan 12, 2007
  8. Junio C HamanoJan 12, 2007
  9. Steven GrimmJan 12, 2007
  10. Junio C HamanoJan 12, 2007
  11. Explain "Not a git repository: '.git'".Junio C Hamano, Jan 12, 2007
  12. Junio C HamanoJan 12, 2007
  13. 1/3 Define cd_to_toplevel shell function in git-sh-setupJunio C Hamano, Jan 12, 2007
  14. 2/3 Use cd_to_toplevel in scripts that implement it by hand.Junio C Hamano, Jan 12, 2007
  15. 3/3 Allow whole-tree operations to be started from a subdirectoryJunio C Hamano, Jan 12, 2007
  16. Andy ParkinsJan 13, 2007
  17. Josef WeidendorferJan 14, 2007
  18. Shawn O. PearceJan 14, 2007
  19. Josef WeidendorferJan 14, 2007
  20. Junio C HamanoJan 14, 2007
  21. Steven GrimmJan 14, 2007
  22. Junio C HamanoJan 14, 2007
  23. Steven GrimmJan 14, 2007
  24. Steven GrimmJan 14, 2007
  25. Junio C HamanoJan 14, 2007
  26. Junio C HamanoJan 14, 2007
  27. Andreas EricssonJan 16, 2007
  28. lamikrJan 14, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.