{"id":21989386,"url":"https://github.com/makelinux/gitm","last_synced_at":"2025-06-21T04:41:01.393Z","repository":{"id":43468005,"uuid":"205707609","full_name":"makelinux/gitm","owner":"makelinux","description":"Multiple git replication utility","archived":false,"fork":false,"pushed_at":"2023-03-18T10:50:47.000Z","size":71,"stargazers_count":15,"open_issues_count":3,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-30T11:54:35.938Z","etag":null,"topics":["git"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/makelinux.png","metadata":{"files":{"readme":"README.rst","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":"2019-09-01T17:08:13.000Z","updated_at":"2025-01-19T23:42:54.000Z","dependencies_parsed_at":"2024-11-29T19:44:44.703Z","dependency_job_id":null,"html_url":"https://github.com/makelinux/gitm","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/makelinux/gitm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makelinux%2Fgitm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makelinux%2Fgitm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makelinux%2Fgitm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makelinux%2Fgitm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/makelinux","download_url":"https://codeload.github.com/makelinux/gitm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makelinux%2Fgitm/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261064611,"owners_count":23104728,"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"],"created_at":"2024-11-29T19:29:16.752Z","updated_at":"2025-06-21T04:40:56.381Z","avatar_url":"https://github.com/makelinux.png","language":"Python","readme":"git-m - multiple git replication and management tool\n=====\n\nThere are great tools for multiple gits (git repositories) management: repo and git submodules.\nBut sometimes you can have dozens or hundreds of standalone gits which you would like to manage without\noverhead of manual initialization of repo or git submodules.\n\nThe mission of git-m is to simplify work with multiple gits.\n\n.. contents::\n   :local:\n\nFeatures\n****\n\nCan be installed as custom git command 'm'\n----\n\nTo use git-m as custom git command copy it to PATH, for example to /usr/local/bin.\n\n.. code-block::\n\n    git m -h\n\nDiscovers and replicates tree of standalone gits\n----\n\nStandalone git [repository] is r. which is not included in repo or submodules.\n\n.. code-block::\n\n    git m --export\n\nThen copy status.yaml to another host or location and run\n\n.. code-block::\n\n    git m --import\n\nOne-liner to replicate gits to another host:\n\n.. code-block::\n\n    git m --export - | ssh $HOST \"mkdir -p $DIR; cd $DIR; git m --import -; ls\"\n\nExpands and works around limitations of original git commands\n----\n\nTo use git-m with original git command just use arguments of git as arguments of git-m.\nIf git-m is installed as custom command just add \"m\" between \"git\" and original command.\n\nPerforms a git command from an outer directory\n~~~~\n\nGit refuses to work from outer directory:\n\n.. code-block::\n\n    $ git log some_project/some_file\n    fatal: not a git repository (or any parent up to mount point /)\n\nYou can use option -C\n\n.. code-block::\n    $ git -C some_project log some_file\n\nMore easy just to use git-m. It changes directory to destination directory and performs requested command:\n\n.. code-block::\n\n    $ git m log some_project/some_file\n\nThis feature saves you from splitting patches and changing current directories between many repositories.\n\nPerforms a git command on all repositories in directory tree\n~~~~\n\n.. code-block::\n\n    $ git m describe --always --all\n    project .\n    heads/master\n    project A\n    heads/master\n    project B\n    heads/master\n\nCompares status of current tree of gits against saved\n----\n\nPlease see the built-in help for details.\n\nDiscovers status of tree of gits in various handy formats.\n----\n\n- pretty text table with shortened strings\n- csv\n- sha\n- JSON\n- YAML\n\nPlease see the built-in help for details.\n\nMore features\n----\n\n.. code-block::\n\n  git-m --help\n\nInstall\n****\nsudo pip3 install ago prettytable repository munch pandas\n\nsudo apt-get -f install python3-git\n\nTo do\n****\n\n* Accept list of files as input. For example pipe from: find . -name '.git' -printf \"%h\\n\"\n* **You are welcome to request new features**\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakelinux%2Fgitm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmakelinux%2Fgitm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakelinux%2Fgitm/lists"}