{"id":26184114,"url":"https://github.com/kejadlen/git-together","last_synced_at":"2025-04-14T23:50:51.449Z","repository":{"id":43790557,"uuid":"57900503","full_name":"kejadlen/git-together","owner":"kejadlen","description":"Better commit attribution while pairing without messing with your git workflow.","archived":false,"fork":false,"pushed_at":"2023-10-03T03:40:18.000Z","size":177,"stargazers_count":159,"open_issues_count":14,"forks_count":18,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-03-28T11:51:07.750Z","etag":null,"topics":["git","mob","pair"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kejadlen.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"License.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2016-05-02T15:36:27.000Z","updated_at":"2025-01-29T22:43:57.000Z","dependencies_parsed_at":"2023-10-03T15:03:59.023Z","dependency_job_id":null,"html_url":"https://github.com/kejadlen/git-together","commit_stats":null,"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kejadlen%2Fgit-together","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kejadlen%2Fgit-together/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kejadlen%2Fgit-together/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kejadlen%2Fgit-together/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kejadlen","download_url":"https://codeload.github.com/kejadlen/git-together/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248981259,"owners_count":21193144,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git","mob","pair"],"created_at":"2025-03-11T22:53:58.486Z","updated_at":"2025-04-14T23:50:51.418Z","avatar_url":"https://github.com/kejadlen.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# git-together\n\n![CI](https://github.com/kejadlen/git-together/workflows/CI/badge.svg)\n\nFollowing in the footsteps of [git-pair][gp] and [git-duet][gd], but without\nneeding to change your existing git habits.\n\n[gp]: https://github.com/pivotal/git_scripts\n[gd]: https://github.com/git-duet/git-duet\n\n## Installation\n\n```bash\nbrew install kejadlen/git-together/git-together\n```\n\n## Configuration\n\nHere's one way to configure `git-together`, but since it uses `git config` to\nstore information, there are many other ways to do it. This particular example\nassumes a desire to store authors at the repo-level in a `.git-together` file.\n\n```bash\n# `git-together` is meant to be aliased as `git`\nalias git=git-together\n\n# Use .git-together per project for author configuration \ngit config --add include.path ../.git-together\n# Or use one .git-together for all projects\ngit config --global --add include.path ~/.git-together\n\n# Setting the default domain\ngit config --file .git-together --add git-together.domain rocinante.com\n\n# Adding a couple authors\ngit config --file .git-together --add git-together.authors.jh 'James Holden; jholden'\ngit config --file .git-together --add git-together.authors.nn 'Naomi Nagata; nnagata'\n\n# Adding an author with a different domain\ngit config --file .git-together --add git-together.authors.ca 'Chrisjen Avasarala; avasarala@un.gov'\n```\n\nFor completion with zsh, you'll need to update your `.zshrc` to copy the existing completion rules\nfrom the main git binary\n\n```zsh\n# initialize the compinit system if not already\nautoload -U compinit\ncompinit\n\n# tell zsh to use the completion setup for the git when using git-together\ncompdef git-together=git\n```\n\n## Usage\n\n```bash\n# Pairing\ngit with jh nn\n# ...\ngit commit\n\n# Soloing\ngit with nn\n# ...\ngit commit\n\n# Mobbing\ngit with jh nn ca\n# ...\ngit commit\n```\n\nSoloing and mobbing are automatically set by the number of authors passed to\n`git with`. `git-together` rotates authors by default after making a commit so\nthat the author/committer roles are fairly spread across the pair/mob over\ntime.\n\nAliases are supported as well. You can make git-together do its thing when you\nuse an alias for a committing command by configuring a comma-separated list of\naliases:\n\n```bash\ngit config git-together.aliases ci,rv,m\n# ...\ngit ci\n```\n\nBy default, `git-together` sets and rotates pairs for a single local\nrepository. If you are working across multiple repos with a pair on a regular\nbasis, this can be difficult to set across all of them. The `--global` flag can\nbe passed along to set a global pair. `git-together` will still default to a\nlocal repository, so if you'd like to reset from local to global, you can use\nthe `--clear` flag.\n\n```bash\n# Set for all repos\ngit with --global jh nn\n\n# Override in single repo\ngit with nn\n\n# Clear local and move back to global\ngit with --clear\n```\n\n## Technical Details\n\nBecause repo-level authors are common and there's no good way of configuring\n`git config` on cloning a repo, `git-together` will automatically include\n`.git-together` to `git config` if it exists. (See `GitConfig::auto_include`\nfor details.) This allows `git-together` to work immediately on cloning a repo\nwithout manual configuration.\n\nUnder the hood, `git-together` sets `GIT_AUTHOR_NAME`, `GIT_AUTHOR_EMAIL`,\n`GIT_COMMITTER_NAME`, and `GIT_COMMITTER_EMAIL` for the `commit`, `merge`, and\n`revert` subcommands so that git commits have the correct attribution..\n`git-together` also adds the `--signoff` argument to the `commit` and `revert`\nsubcommands so that the commit message includes the `Signed-off-by: ` line.\n\n## Known Issues\n\n`git-together` works by aliasing `git` itself, so there are going to be issues\nwith git's in-built aliases as well as other utilities (such as [Hub][hub])\nthat work in the same manner.\n\n[hub]: https://hub.github.com/\n\n## Development\n\n### Rust version\n\nInstall rust using the [rustup][rustup] tool. Installing from homebrew won't work\nbecause some nightly features of rust are needed to build.\n\nThen, switch to the nightly with\n\n```bash\nrustup default nightly\n```\n\n### Bats\n\n[Bats][bats] is a bash testing framework, used here for integration tests. This\ncan be installed with homebrew.\n\n```bash\nbrew install bats\n```\n\n[rustup]: https://www.rustup.rs/\n[bats]: https://github.com/sstephenson/bats\n\n### Testing\n\n```bash\ncargo test\n./bats/integration.bats\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkejadlen%2Fgit-together","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkejadlen%2Fgit-together","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkejadlen%2Fgit-together/lists"}