{"id":15445221,"url":"https://github.com/jhermann/thin-man","last_synced_at":"2025-04-19T20:40:59.123Z","repository":{"id":29959726,"uuid":"33506477","full_name":"jhermann/thin-man","owner":"jhermann","description":":construction: [ALPHA] Thin Man backs up all metadata in your source tree of git repos.","archived":false,"fork":false,"pushed_at":"2018-03-18T10:15:47.000Z","size":48,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-29T13:11:14.609Z","etag":null,"topics":["backup","git","productivity","python","sync","tool"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jhermann.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-04-06T21:20:17.000Z","updated_at":"2022-06-10T16:32:48.000Z","dependencies_parsed_at":"2022-09-10T02:23:29.392Z","dependency_job_id":null,"html_url":"https://github.com/jhermann/thin-man","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermann%2Fthin-man","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermann%2Fthin-man/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermann%2Fthin-man/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermann%2Fthin-man/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jhermann","download_url":"https://codeload.github.com/jhermann/thin-man/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249610986,"owners_count":21299739,"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":["backup","git","productivity","python","sync","tool"],"created_at":"2024-10-01T19:44:21.438Z","updated_at":"2025-04-19T20:40:59.101Z","avatar_url":"https://github.com/jhermann.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Thin Man\n\n*Thin Man* backs up all metadata in your source tree of `git` repos.\n\n![logo](https://raw.githubusercontent.com/jhermann/thin-man/master/docs/_static/img/logo.png)\n\n [![Travis CI](https://api.travis-ci.org/jhermann/thin-man.svg)](https://travis-ci.org/jhermann/thin-man)\n [![Coveralls](https://img.shields.io/coveralls/jhermann/thin-man.svg)](https://coveralls.io/r/jhermann/thin-man)\n [![GitHub Issues](https://img.shields.io/github/issues/jhermann/thin-man.svg)](https://github.com/jhermann/thin-man/issues)\n [![License](https://img.shields.io/pypi/l/thin-man.svg)](https://github.com/jhermann/thin-man/blob/master/LICENSE)\n [![Development Status](https://img.shields.io/pypi/status/thin-man.svg)](https://pypi.python.org/pypi/thin-man/)\n [![Latest Version](https://img.shields.io/pypi/v/thin-man.svg)](https://pypi.python.org/pypi/thin-man/)\n\n\n## Overview\n\nBy recording the tree layout, `git` remotes and ‘refs’ of the typical\n`~/src` directory containing your cloned `git` repos,\n*Thin Man* can restore that structure later on,\nand also sync it to other machines.\n\nThis can be also part of a backup strategy by only including that small\namount of metadata in a backup set, instead of duplicating all the data\nthat is available in remote locations anyway.\n\nThat of course assumes that your repositories are usually clean and don't\ncontain days of uncommitted work, and can be easily restored into\nworking shape by bootstrap scripts and the like.\nBut that's a given, right?\n\n\n## Installation\n\n*Thin Man* can be installed via ``pip install thin-man`` as usual,\nsee [releases](https://github.com/jhermann/thin-man/releases) for an overview of available versions.\nTo get a bleeding-edge version from source, use these commands:\n\n```sh\nrepo=\"jhermann/thin-man\"\npip install -r \u003c(curl -skS \"https://raw.githubusercontent.com/$repo/master/requirements.txt\")\npip install -UI -e \"git+https://github.com/$repo.git#egg=${repo#*/}\"\n```\n\nSee [Contributing](#contributing) on how to create a full development environment.\n\nTo add bash completion, read the [Click docs](http://click.pocoo.org/4/bashcomplete/#activation) about it,\nor just follow these instructions:\n\n```sh\ncmdname=thin-man\nmkdir -p ~/.bash_completion.d\n( export _$(tr a-z- A-Z_ \u003c\u003c\u003c\"$cmdname\")_COMPLETE=source ; \\\n  $cmdname \u003e~/.bash_completion.d/$cmdname.sh )\ngrep /.bash_completion.d/$cmdname.sh ~/.bash_completion \u003e/dev/null \\\n    || echo \u003e\u003e~/.bash_completion \". ~/.bash_completion.d/$cmdname.sh\"\n. \"/etc/bash_completion\"\n```\n\n\n## Usage\n\n…\n\n\n## Contributing\n\nTo create a working directory for this project, call these commands:\n\n```sh\ngit clone \"https://github.com/jhermann/thin-man.git\"\ncd \"thin-man\"\n. .env --yes --develop\ninvoke build --docs test check\n```\n\nSee [CONTRIBUTING](https://github.com/jhermann/thin-man/blob/master/CONTRIBUTING.md) for more.\n\n[![Throughput Graph](https://graphs.waffle.io/jhermann/thin-man/throughput.svg)](https://waffle.io/jhermann/thin-man/metrics)\n\n\n## References\n\n**Similar Projects**\n\n* [tony/vcspull](https://github.com/tony/vcspull)\n* [earwig/git-repo-updater](https://github.com/earwig/git-repo-updater)\n\n**Tools**\n\n* [Cookiecutter](http://cookiecutter.readthedocs.io/en/latest/)\n* [PyInvoke](http://www.pyinvoke.org/)\n* [pytest](http://pytest.org/latest/contents.html)\n* [tox](https://tox.readthedocs.io/en/latest/)\n* [Pylint](http://docs.pylint.org/)\n* [twine](https://github.com/pypa/twine#twine)\n* [bpython](http://docs.bpython-interpreter.org/)\n* [yolk3k](https://github.com/myint/yolk#yolk)\n\n**Packages**\n\n* [Rituals](https://jhermann.github.io/rituals)\n* [Click](http://click.pocoo.org/)\n\n\n## Acknowledgements\n\n…\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhermann%2Fthin-man","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjhermann%2Fthin-man","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhermann%2Fthin-man/lists"}