{"id":16508555,"url":"https://github.com/osteele/multiclone","last_synced_at":"2026-03-05T10:32:38.808Z","repository":{"id":64305947,"uuid":"106856025","full_name":"osteele/multiclone","owner":"osteele","description":"Clone forks of a GitHub repo, or copies of a GitHub Classroom assignment","archived":false,"fork":false,"pushed_at":"2017-11-18T13:33:35.000Z","size":16,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-30T20:03:25.151Z","etag":null,"topics":["classroom-tools","cli","git","github","github-classroom","myrepos"],"latest_commit_sha":null,"homepage":"","language":"Go","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/osteele.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}},"created_at":"2017-10-13T17:49:43.000Z","updated_at":"2022-06-03T10:42:32.000Z","dependencies_parsed_at":"2023-01-15T10:30:38.673Z","dependency_job_id":null,"html_url":"https://github.com/osteele/multiclone","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/osteele%2Fmulticlone","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osteele%2Fmulticlone/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osteele%2Fmulticlone/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osteele%2Fmulticlone/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/osteele","download_url":"https://codeload.github.com/osteele/multiclone/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252423184,"owners_count":21745556,"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":["classroom-tools","cli","git","github","github-classroom","myrepos"],"created_at":"2024-10-11T15:46:08.108Z","updated_at":"2026-03-05T10:32:33.775Z","avatar_url":"https://github.com/osteele.png","language":"Go","readme":"# Multiclone\n\nClone all the forks of a repository, or all the repos of a [GitHub Classroom](https://classroom.github.com) assignment.\n\nThis is useful for collecting and reviewing assignments and student projects.\n\nFeatures:\n\n* Written in Golang for easier distribution. (I got tired juggling of juggling Anaconda / virtualenv between various classroom and tool environments.)\n* Automatic repo discovery. Knows about “students fork” and “GitHub Classroom” conventions.\n* Repos are cloned in parallel.\n* Create a [myrepos](https://myrepos.branchable.com) `.mrconfig` file.\n\n## Installation\n\n### Install multiclone\n\nmulticlone is written in Go with support for multiple platforms.\nThe latest release can be found at the [releases page](https://github.com/osteele/multiclone/releases).\n\n[Homebrew](https://brew.sh) can be used to install multiclone on macOS:\n\n```bash\n$ brew tap osteele/homebrew-tap\n$ brew install multiclone\n```\n\n### Set `GITHUB_TOKEN`\n\nCreate a [GitHub personal access token for the command line](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/)\n\nSet `GITHUB_TOKEN` to this value: `export GITHUB_TOKEN=…`\n\n## Usage\n\n    multiclone https://github.com/owner/repo\n    multiclone owner/repo\n\nClone forks of owner/repo into the current directory.\n\n    multiclone repos.txt\n\nClones the repo\n\n`repos.txt` is a file with one repo name-with-owner, e.g. `osteele/homework1`, per line.\n\n### GitHub Classroom\n\n    multiclone https://github.com/owner/repo --classroom\n    multiclone org/repo --classroom\n\nClone org's repos named repo-* into the current directory.\n\nThis is intended for use with repos created via [GitHub Classroom](https://classroom.github.com).\n\n### Options\n\n    multiclone --dir path/to/dir owner/repo\n\nClone into subdirectories of `path/to/dir`, instead of the current directory.\n\n    multiclone owner/repo --dry-run\n\nSee the `git` commands that would be run, without actually running them.\n\n    multiclone --help\n\nLists additional options.\n\n## Develop\n\n1. **Install go** (1) via [Homebrew](https://brew.sh): `brew install go`; or (2) [download](https://golang.org/doc/install#tarball).\n2. `go install github.com/osteele/multiclone`\n\n## Alternatives\n\nThese [GitHub Education Community](https://education.github.community/t/how-to-automatically-gather-or-collect-assignments/2595) forum threads discuss a variety of alternatives (including one I wrote before I wrote this):\n\n* [GitHub Classroom: clone assignments](https://education.github.community/t/github-classroom-clone-assignments/784/1)\n* [How to automatically gather or collect assignments?](https://education.github.community/t/how-to-automatically-gather-or-collect-assignments/2595)\n\n[myrepos](https://myrepos.branchable.com) automates parallel management of a set of\nrepos. It doesn't create the initial repo set, which is that this tool does.\n\n## License\n\nMIT\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosteele%2Fmulticlone","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fosteele%2Fmulticlone","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosteele%2Fmulticlone/lists"}