{"id":20065064,"url":"https://github.com/raphaelkieling/devpair","last_synced_at":"2025-07-10T01:38:52.945Z","repository":{"id":63263529,"uuid":"566516986","full_name":"raphaelkieling/devpair","owner":"raphaelkieling","description":"Tool to make the pair programming easier","archived":false,"fork":false,"pushed_at":"2023-10-21T23:21:32.000Z","size":160,"stargazers_count":12,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-05T06:44:47.161Z","etag":null,"topics":["hacktoberfest","pair","programmming","python","tool"],"latest_commit_sha":null,"homepage":"","language":"Python","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/raphaelkieling.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-11-15T20:54:54.000Z","updated_at":"2024-10-08T02:53:28.000Z","dependencies_parsed_at":"2024-01-09T11:20:58.565Z","dependency_job_id":"e205f5d7-e17b-4f16-b891-163fbfd8ce44","html_url":"https://github.com/raphaelkieling/devpair","commit_stats":null,"previous_names":["raphaelkieling/pair"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/raphaelkieling/devpair","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelkieling%2Fdevpair","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelkieling%2Fdevpair/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelkieling%2Fdevpair/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelkieling%2Fdevpair/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raphaelkieling","download_url":"https://codeload.github.com/raphaelkieling/devpair/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelkieling%2Fdevpair/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264513203,"owners_count":23620515,"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":["hacktoberfest","pair","programmming","python","tool"],"created_at":"2024-11-13T13:48:54.579Z","updated_at":"2025-07-10T01:38:52.913Z","avatar_url":"https://github.com/raphaelkieling.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"./logo.svg\" width=\"200px\"\u003e\n\u003c/div\u003e\n\n## Dev Pair\n\n[![Python Test](https://github.com/raphaelkieling/pair/actions/workflows/push.yml/badge.svg)](https://github.com/raphaelkieling/pair/actions/workflows/push.yml)\n![PyPI Version](https://img.shields.io/pypi/v/devpair)\n![Python Version](https://img.shields.io/pypi/pyversions/devpair)\n[![Coverage Status](https://coveralls.io/repos/github/raphaelkieling/pair/badge.svg?branch=main)](https://coveralls.io/github/raphaelkieling/pair?branch=main)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/dc88a7a853dc4b11be21ab789bb05463)](https://www.codacy.com/gh/raphaelkieling/devpair/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=raphaelkieling/devpair\u0026amp;utm_campaign=Badge_Grade)\n\nIt's a tool to facilitate the remote pair programming session. Instead of make a lot of `git add, git commit, git push, git pull`, you can make it more quickly only running `devpair start \u003ctimer optional\u003e` to start coding and `devpair next` to send the code to another person.\n\nVery useful for teams that like to make pair sessions often. If you never was a driver or a navigator feel free to read [here](https://martinfowler.com/articles/on-pair-programming.html) to have a context.\n\n## Install\n\n```sh\n# If you have pip 🐍\npip install devpair\n```\n\n## Commands\n\n- `devpair start \u003ctime in minutes optional\u003e` Start a new session inside the current branch.\n- `devpair next` Save everything and send to the next person.\n- `devpair done` Finish and put all the work in the original branch.\n- `devpair summary` Show a simple resume of commit counts and last developer.\n- `devpair cow` It's a cow.\n- `devpair timer \u003ctime in minutes\u003e` Create a simple timer for any purposal.\n- `devpair --help` I like to have a help some times.\n\n\u003e We recommend to create some alias if you want, like: `dvs` to run `devpair start`, `dvn` to run `devpair next` and `dvd` to run `devpair done`.\n\n## Example of use\n\n```bash\n# Dev A\nmain $ devpair start 10 # Will start the new branch with a 10 minutes timer\npair/main $ echo \"hello\" \u003e welcome.txt\npair/main $ devpair next\n\n# Dev B\nmain $ devpair start\npair/main $ cat welcome.txt # shows \"hello\"\npair/main $ echo \" world\" \u003e\u003e welcome.txt\npair/main $ devpair next\n\n# Dev A\npair/main $ devpair start\npair/main $ cat welcome.txt # shows \"hello world\"\npair/main $ echo \"!\" \u003e\u003e welcome.txt\npair/main $ devpair done\n\nmain $ git commit -m \"feat: created hello world feature\"\nmain $ git push\n\n# Dev B\npair/main $ devpair done # just to come back to the original branch\nmain\n```\n\n## How it works internally?\n\nYou will work inside a temporary pair branch that in the end all the commits will be squashed to be added to the feature branch.\n\n\u003cdetails\u003e\n    \u003csummary\u003eMore details!\u003c/summary\u003e\n\nOk ok! Under the hood the `devpair start` will take your current branch and create a copy with the same name but with the prefix `pair`\n\nAfter make your code changes the `devpair next` will add, commit and push your code using an internal commit message. This step will be more easier to understand checking the [example step by step](#example-of-use)\n\nIn the end, we have the `devpair done` that will add, commit, push and delete the branch. Don't worry we will make a squash commit of everything that you did for the current branch.\n\n[![](https://mermaid.ink/img/pako:eNqNkMEKwjAMhl9l5Dzx3rPgA3jtJbb_1uLajpgiMvbu1oOgDGE5fSTfn0AWcsWDDI1Rz8JzsLlr5UpKUbd8Fc4udBmPwwDWKtjlzxzluDv0wwHuVqpuTybIiH-bP6nEMX_rG5N6apOm-faD5d2zpAEJlkxDj4HrpJZsXpvKVcvlmR0ZlYqe6uxZcYo8CicyA093rC_K-3GZ?type=png)](https://mermaid.live/edit#pako:eNqNkMEKwjAMhl9l5Dzx3rPgA3jtJbb_1uLajpgiMvbu1oOgDGE5fSTfn0AWcsWDDI1Rz8JzsLlr5UpKUbd8Fc4udBmPwwDWKtjlzxzluDv0wwHuVqpuTybIiH-bP6nEMX_rG5N6apOm-faD5d2zpAEJlkxDj4HrpJZsXpvKVcvlmR0ZlYqe6uxZcYo8CicyA093rC_K-3GZ)\n\n\u003c/details\u003e\n\n## Recommendations\n\n- Before the pair programming\n  - Define the end of the session. How many time do you want pair?\n  - Define the break time.\n- Use a `timer`, maybe `devpair` timer or any other one, the important thing is to keep the pair rotation:\n  - `devpair start \u003ctime in minutes\u003e`\n  - https://cuckoo.team/\n  - https://double-trouble.wielo.co/\n  - http://mobtimer.zoeetrope.com/\n  - ANY other mobile app, web tool, smartwatch app, pomodoro timer and so on.\n- The `driver` need to share the screen avoiding to use tools like `vscode live share`, even they are good it can create some hard moments that you want to show the browser or create a quickly diagram. The preference is that the `driver` ever need to share the screen.\n- Antipatterns: https://tuple.app/pair-programming-guide/antipatterns\n\n## Contributing\n\nFork, create a branch from `main` with the pattern `feat/my-feature` and make a pull request with your proposal.\n\n## Local env\n\nWe are using [poetry](https://python-poetry.org/) and [pyenv](https://github.com/pyenv/pyenv) to manage all the python versions and dependencies.\n\n```sh\n# Install all the dependencies\nmake setup\n# Run all the tests\nmake unit\n# Testing the devpair locally\nmake local\n```\n\n## Publishing\n\n```sh\nsh ./scripts/tag-new-version.bash v0.0.0\n```\n\n\u003csup\u003eIllustration by: [popsy](https://popsy.co/)\u003c/sup\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphaelkieling%2Fdevpair","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraphaelkieling%2Fdevpair","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphaelkieling%2Fdevpair/lists"}