{"id":17978158,"url":"https://github.com/overv/gitlabfs","last_synced_at":"2026-03-13T19:08:13.111Z","repository":{"id":50187802,"uuid":"196272802","full_name":"Overv/gitlabfs","owner":"Overv","description":"Mount all projects in a company's GitLab instance as a file system.","archived":false,"fork":false,"pushed_at":"2022-12-08T05:54:21.000Z","size":44,"stargazers_count":15,"open_issues_count":4,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-20T14:13:10.082Z","etag":null,"topics":[],"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/Overv.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":"2019-07-10T20:46:10.000Z","updated_at":"2023-02-16T12:24:09.000Z","dependencies_parsed_at":"2023-01-24T18:18:08.943Z","dependency_job_id":null,"html_url":"https://github.com/Overv/gitlabfs","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Overv%2Fgitlabfs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Overv%2Fgitlabfs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Overv%2Fgitlabfs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Overv%2Fgitlabfs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Overv","download_url":"https://codeload.github.com/Overv/gitlabfs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245510635,"owners_count":20627232,"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":[],"created_at":"2024-10-29T17:31:53.430Z","updated_at":"2026-03-13T19:08:13.072Z","avatar_url":"https://github.com/Overv.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gitlabfs\n\ngitlabfs allows you to mount all projects in a company's GitLab instance as a file system.\n\n## About\n\nThis project was conceived out of a need to easily browse code in many different repositories within a company. While GitLab does have builtin browsing and search, it's just not as convenient to use as common tools like `find` and `grep`.\n\nIt sets out to solve that by exposing an entire GitLab instance as a file system with the following hierarchy:\n\n```\n/\n  /user\n    /project\n      /master\n        README.md\n      /feature\n        /abc\n          /src\n            main.py\n      /v1.0\n        main.py\n  /group\n    /subgroup\n      /project\n```\n\nThis allows you to freely browse all of the code in a GitLab instance without having to clone everything. All of the files are loaded from the GitLab API as you access them. The only caveat is that it is a read-only view.\n\n## Installation\n\nInstall the latest version of gitlabfs from [PyPI](https://pypi.org/project/gitlabfs/):\n\n    pip install gitlabfs\n\n## Usage\n\n1. Go to your profile page in GitLab and [generate a new access token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html) with the `api` scope.\n2. Create a directory where you would like to access your projects from, e.g. `~/gitlab`.\n3. Mount GitLab at that directory:\n\n    ```\n    glfs https://gitlab.mycompany.com ~/gitlab\n    ```\n\n  You will be asked to provide your access token and then the GitLab hierarchy will be mounted.\n\n## Configuration\n\nVarious options can be passed to configure the properties of the file system:\n\n* `--tags`: Include tags in the list of repository refs.\n* `--users`: List user repositories as well.\n* `--file-times`: Better approximate file modification times with commit metadata.\n* `--cache-expiry=SEC`: Expire the cache after this many seconds (default: 60).\n* `--fresh-project-tree`: Enable cache expiry for the project tree.\n* `--debug`: Enable verbose logging for development purposes.\n\nMany of these are not enabled by default because they may result in worse performance or more clutter.\n\nThe access token must be provided via a command line prompt by default, but can also be passed via the `GITLAB_TOKEN` environment variable.\n\n## Limitations\n\n* Not designed for GitLab instances with a huge number of projects (e.g. gitlab.com).\n* File modification times are not accurate since they are not exposed by the GitLab API.\n\n## Development\n\nThe file system can be easily run locally with [Pipenv](https://github.com/pypa/pipenv):\n\n```\npipenv install\npipenv run ./glfs \u003curl\u003e \u003cmountpoint\u003e [options]\n```\n\nAnd the PyPI package is published using the following commands:\n\n```\npipenv run python setup.py sdist bdist bdist_wheel\npipenv run twine upload dist/*\n```\n\n## License\n\nMIT License","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foverv%2Fgitlabfs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foverv%2Fgitlabfs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foverv%2Fgitlabfs/lists"}