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

In some rebases, `exec git -C ...` has wrong working directory

From
William Chargin <wchargin@gmail.com>
Date
Apr 27, 2018, 02:56 UTC
Message-ID
<CAFW+GMAJcCG4mKe4TxFXXrfdRhZKXv8ffC-rNShFLW2J1_FANA@mail.gmail.com>
Here is a repro script:
    #!/bin/sh
    set -eux
    git --version
    tmpdir="$(mktemp -d)"
    cd "${tmpdir}"
    mkdir target repo
    cd repo
    git init
    touch file; git add file
    git commit -m "Initial commit"
    git rebase HEAD --exec "git -C ${tmpdir}/target init"
The end of this script prints something like
    Executing: git -C /tmp/tmp.gd2q51jO93/target init
    Reinitialized existing Git repository in /tmp/tmp.gd2q51jO93/repo/.git/
    Successfully rebased and updated refs/heads/master.

But this is wrong: the repository should be initialized in `target`, not reinitialized in `repo`.

Notes:
  - This propagates to subprocesses: if you run `exec make test` and
    your test suite ends up calling `git -C`, then the same problem
    occurs.
  - Substituting `rebase --root` for `rebase HEAD` causes the problem to
    go away.
  - The `rebase HEAD` exec context adds the `GIT_DIR` environment
    variable, and this is sufficient to reproduce the problem:
    running `GIT_DIR="$PWD" git -C /tmp/target init` puts the repo in
    the current working directory. The `rebase --root` context adds no
    such environment variable. (You can use `--exec 'env >tempfile'` to
    verify these.)
My `git --version` is 2.16.2.
Next: Johannes Schindelin
Message 1 of 3 in “In some rebases, `exec git -C ...` has wrong working directory”
  1. William CharginApr 27, 2018
  2. Johannes SchindelinApr 27, 2018
  3. William CharginApr 27, 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.