gruntwork-io / git-xargs

git-xargs is a command-line tool (CLI) for making updates across multiple Github repositories with a single command.
https://blog.gruntwork.io/introducing-git-xargs-an-open-source-tool-to-update-multiple-github-repos-753f9f3675ec
Apache License 2.0
935 stars 62 forks source link

Repos fail to commit with error "author field is required" when using git config includes for [user] section #48

Open adborden opened 3 years ago

adborden commented 3 years ago

git-xargs version git-xargs version v0.0.11

Describe the bug

Logs here. When running git-xargs, I get the error "author field is required" during the commit step. This seems to be true of any repo I try with git-xargs.

It looks related to my git config includes. I use a different email addresses for git at work and use includes to specify my user.name and user.email on different machines. My ~/.gitconfig contains:

# ~/.gitconfig

[include]
    path = ~/.gitconfig.local

# no [user] section exists

and

# ~/.gitconfig.local
[user]
    name = ...
    email = ...

I've never had any issue with this before, but notice this in the git-config man pages. It implies that git-config might not honor includes in some cases and that you might have to include an explicit option.

       --[no-]includes
           Respect include.*  directives in config files when looking up values.
           Defaults to off when a specific file is given (e.g., using --file,
           --global, etc) and on when searching all config files.

Just to make sure the includes are read properly by git:

$ git config --get user.name
Aaron D Borden
$ git config --global --get user.name
# exit 1
$ git config --global --includes --get user.name
Aaron D Borden

To Reproduce Steps to reproduce the behavior:

  1. Move your user.name and user.email from your ~/.gitconfig, to ~/.gitconfig.local
  2. Add an [includes] section as above in ~/.gitconfig to include ~/.gitconfig.local
  3. I'm using a script to generate templates for git-xargs, it looks similar to this:
git-xargs \
  --branch-name tts-bot/update-templates \
  --loglevel "${LOGLEVEL}" \
  --repos "${template_dir}/repo_list" \
  --skip-archived-repos \
  --pull-request-title "${pull_request_title}" \
  --pull-request-description "$(template pull_request_description)" \
  --commit-message "$(template commit_message)" \
  $(pwd)/bin/ci_update_templates.sh "${canonical_repository}" "${template_dir}/template_files"

repos file contains the single repo 18F/ghad.

Expected behavior git-xargs respects the git config include and attributes the author correctly AND git-xargs warns when it cannot identify the author for the commit.

Screenshots Logs https://gist.github.com/adborden/f0000d75107e1971940d48b58bc710be

Additional context To work-around, I confirmed that you can set the user.name and user.email in the main config and git-xargs works as expected.

zackproser commented 3 years ago

Thanks for the detailed bug report! Just wanted to acknowledge receipt. I'll take a look as soon as I can.

jduan-highnote commented 1 year ago

I'm seeing the exact problem and the workaround works great. It'd be great to get this problem fixed though because people have this setup when they have multiple github accounts (work vs personal).

bbkane commented 10 months ago

Small note on the workaround for others finding this issue. You can easily add the user.name and user.email sections to the global config with the following commands:

git config --global user.name "John Doe"
git config --global user.email "123456+johndoe@users.noreply.github.com"
bkk-bcd commented 6 months ago

This is still broken. There's legitimate use cases to separate your gitconfig and the authors therein.

orfeas-k commented 5 months ago

Yes, I just hit that too