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

Re: git rebase -i --exec and changing directory

From
OMOndrej Mosnáček <omosnacek@gmail.com>
Date
May 27, 2018, 12:53 UTC
Message-ID
<CAAUqJDvCgXPubhtSKzMLqTU5au320U15UQ8Lst7+JeZYBp8wTA@mail.gmail.com>
In-Reply-To
<1EAAF778D73B4AA689ADB5AE2EE9D1DD@PhilipOakley>
Hi Philip,
2018-05-27 14:28 GMT+02:00 Philip Oakley <philipoakley@iee.org>:
> You may need to give a bit more background of things that seem obvious to
> you.
> So where is the src directory you are cd'ing to relative to the
> directory/repository you are creating?

It is located in the top-level directory of the working tree (in the same directory that .git is in).

From git-rebase(1):
    The "exec" command launches the command in a shell (the one
    specified in $SHELL, or the default shell if $SHELL is not set), so
    you can use shell features (like "cd", ">", ";" ...). The command is
    run from the root of the working tree.

So I need to run 'cd src' if I want to run a command in there (regardless of the working directory of the git rebase command itself).

> What is [the name of] the directory you are currently in, etc. ?

I don't think that is relevant here. FWIW, when verifying the problem I ran the reproducer from my original message in a directory whose path did not contain any spaces or special characters.

Did you try to run the reproducing commands I posted? Did you get a different result? You should see the following in the output of 'cd dir && git status':

[...]
Changes not staged for commit:
 (use "git add/rm <file>..." to update what will be committed)
 (use "git checkout -- <file>..." to discard changes in working directory)
       deleted:    a
       deleted:    b
       deleted:    dir/x
       deleted:    reproduce.sh
Untracked files:
 (use "git add <file>..." to include in what will be committed)
       x
[...]

When I drop the 'cd dir && ' from before 'git status', the output is as expected:

You are currently editing a commit while rebasing branch 'master' on '19765db'.
 (use "git commit --amend" to amend the current commit)
 (use "git rebase --continue" once you are satisfied with your changes)
nothing to commit, working tree clean
Show 50 quoted lines
>
> Philip
> --
>
> From: "Ondrej Mosnáček" <omosnacek@gmail.com>
> Bump? Has anyone had time to look at this?
>
> 2018-05-19 18:38 GMT+02:00 Ondrej Mosnáček <omosnacek@gmail.com>:
>>
>> Hello,
>>
>> I am trying to run a script to edit multiple commits using 'git rebase
>> -i --exec ...' and I ran into a strange behavior when I run 'cd'
>> inside the --exec command and subsequently run a git command. For
>> example, if the command is 'cd src && git status', then git status
>> reports as if all files in the repository are deleted.
>>
>> Example command sequence to reproduce the problem:
>>
>>     # Setup:
>>     touch a
>>     mkdir dir
>>     touch dir/x
>>
>>     git init .
>>     git add --all
>>     git commit -m commit1
>>     git tag base
>>     touch b
>>     git add --all
>>     git commit -m commit2
>>
>>     # Here we go:
>>     git rebase -i --exec 'cd dir && git status' base
>>
>>     # Spawning a sub-shell doesn't help:
>>     git rebase -i --exec '(cd dir && git status)' base
>>
>> Is this expected behavior or did I found a bug? Is there any
>> workaround, other than cd'ing to the toplevel directory every time I
>> want to run a git command when I am inside a subdirectory?
>>
>> $ git --version
>> git version 2.17.0
>>
>> Thanks,
>>
>> Ondrej Mosnacek
>
>
Previous: Philip OakleyNext: Phillip Wood
Message 4 of 8 in “git rebase -i --exec and changing directory”
  1. Ondrej MosnáčekMay 19, 2018
  2. Ondrej MosnáčekMay 27, 2018
  3. Philip OakleyMay 27, 2018
  4. Ondrej MosnáčekMay 27, 2018
  5. Phillip WoodMay 27, 2018
  6. Philip OakleyMay 27, 2018
  7. Philip OakleyMay 27, 2018
  8. Junio C HamanoMay 28, 2018

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.