{"id":15974492,"url":"https://github.com/seb35/git-iterate","last_synced_at":"2026-05-05T03:38:58.541Z","repository":{"id":77920301,"uuid":"70068369","full_name":"Seb35/git-iterate","owner":"Seb35","description":"An utility to iterate over subdirectories containing a Git repository","archived":false,"fork":false,"pushed_at":"2025-03-26T11:57:26.000Z","size":14,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-26T12:36:12.488Z","etag":null,"topics":["git","git-subcommand"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"wtfpl","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Seb35.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,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-05T14:29:41.000Z","updated_at":"2025-03-26T11:57:30.000Z","dependencies_parsed_at":"2024-10-30T05:53:22.184Z","dependency_job_id":null,"html_url":"https://github.com/Seb35/git-iterate","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Seb35%2Fgit-iterate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Seb35%2Fgit-iterate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Seb35%2Fgit-iterate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Seb35%2Fgit-iterate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Seb35","download_url":"https://codeload.github.com/Seb35/git-iterate/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247217221,"owners_count":20903009,"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","git-subcommand"],"created_at":"2024-10-07T21:42:06.578Z","updated_at":"2026-05-05T03:38:58.477Z","avatar_url":"https://github.com/Seb35.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"git-iterate\n===========\n\nIf you have to repeat a same Git operation over a bunch of subdirectories (e.g. 'status' or 'branch -vv'), this small Git addon is dedicated to this task.\n\nExamples:\n```\ngit iterate -- status\ngit iterate -q dir1 dir2 -- fetch --all\ngit iterate -q dir1 dir2 foreach myscript.sh\n```\n\nWARNING: the parameters names and exact features may change, this tool is not in a \"stable\" state given it evolves according to my own needs. Feedback about the parameters names and their associated features are welcome.\n\nSyntax\n------\n\n### General syntax:\n```\ngit iterate [-q|--quiet] [\u003cdir\u003e...] -- \u003ccommand\u003e\n```\n\n* -q: [optional] Remove all non-error output\n* --quiet: [optional] Remove the directory names in which Git is currently running\n* \u003cdir\u003e...: [optional] Subdirectories names where the Git subcommand must be run, by default current directory\n* \u003ccommand\u003e: standard Git command and parameters ('status', 'fetch --all', 'pull', etc.)\n\n### Non-Git commands:\n```\ngit iterate [-q|--quiet] [\u003cdir\u003e...] foreach \u003cshellcommand\u003e\n```\n\n* -q: [optional] Remove all non-error output\n* --quiet: [optional] Remove the directory names in which Git is currently running\n* \u003cdir\u003e...: [optional] Subdirectories names where the Git subcommand must be run, by default current directory\n* \u003cshellcommand\u003e: general shell command to be executed in Git directories ('ls', etc.)\n\nLicense\n-------\n\n* License: WTFPL 2.0\n* Author: Seb35 - Sébastien Beyou\n\nContribute\n----------\n\nAlthough this is a small program, any contribution is welcome! Please [open an issue](https://github.com/Seb35/git-iterate/issues) to discuss ideas or bugs, or even [submit pull requests](https://github.com/Seb35/git-iterate/pulls) to propose implementations.\n\nHere are some ideas for possible improvements.\n\nQuality:\n* test in various environments - I only tested it on Debian\n* still improve documentation?\n* write unit tests\n* package - for DEB, RPM, …\n* translate the documentation\n* get some user feedback about the CLI interface, and amongst others: the quiet options\n\nBugs:\n* detect if bold is supported and possibly how: 1. if no bold is supported it should be deactivated, for instance in non-console outputs or non-compatible consoles; 2. I saw \"echo -e\" must be used for Bash but \"echo\" must be used for sh.\n\nFeatures:\n* add an option to use non-bold for the directory names?\n* add a special syntax `git iterate [\u003cdir\u003e...]` to only display Git directories?\n* add an option to stop on first error, on first output? use a non-zero exit code in this case?\n* add an option to explicitely search Git directories inside Git directories? or make it the default behaviour (will be longer in this case)?\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseb35%2Fgit-iterate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseb35%2Fgit-iterate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseb35%2Fgit-iterate/lists"}