{"id":24739042,"url":"https://github.com/defcronyke/gitcid","last_synced_at":"2026-04-09T21:04:42.479Z","repository":{"id":146964746,"uuid":"344844058","full_name":"defcronyke/gitcid","owner":"defcronyke","description":"power tools for git ⊙ https://gitc.id","archived":false,"fork":false,"pushed_at":"2022-07-13T00:35:47.000Z","size":1739,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-22T18:45:48.700Z","etag":null,"topics":["ci-cd","docker","docker-compose","git","helper-scripts","pipeline","power","power-tools","rsync","scm","scripts","server","ssh","tools"],"latest_commit_sha":null,"homepage":"https://gitc.id","language":"Shell","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/defcronyke.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["defcronyke"],"custom":["https://paypal.me/defcronyke","https://eternalvoid.net"]}},"created_at":"2021-03-05T14:58:48.000Z","updated_at":"2021-10-22T23:04:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"a7f79466-1d02-4489-98a0-ce0fd2681c12","html_url":"https://github.com/defcronyke/gitcid","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/defcronyke/gitcid","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defcronyke%2Fgitcid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defcronyke%2Fgitcid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defcronyke%2Fgitcid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defcronyke%2Fgitcid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/defcronyke","download_url":"https://codeload.github.com/defcronyke/gitcid/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/defcronyke%2Fgitcid/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266447955,"owners_count":23930082,"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","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["ci-cd","docker","docker-compose","git","helper-scripts","pipeline","power","power-tools","rsync","scm","scripts","server","ssh","tools"],"created_at":"2025-01-27T22:56:31.815Z","updated_at":"2026-04-09T21:04:42.432Z","avatar_url":"https://github.com/defcronyke.png","language":"Shell","funding_links":["https://github.com/sponsors/defcronyke","https://paypal.me/defcronyke","https://eternalvoid.net","https://img.shields.io/static/v1?label=Sponsor\u0026message=%E2%9D%A4\u0026logo=GitHub\u0026link=https://github.com/sponsors/defcronyke"],"categories":[],"sub_categories":[],"readme":"# [GitCid](https://gitc.id/)\n\n[![pipeline status](https://gitlab.com/defcronyke/gitcid/badges/master/pipeline.svg)](https://gitlab.com/defcronyke/gitcid/-/commits/master) [![sponsor the project](https://img.shields.io/static/v1?label=Sponsor\u0026message=%E2%9D%A4\u0026logo=GitHub\u0026link=https://github.com/sponsors/defcronyke)](https://github.com/sponsors/defcronyke) [gitc.id](https://gitc.id) ⊙ _\"power tools for [`git`](https://git-scm.com)\"_ ⊙ [Copyright © 2021](https://defcronyke.gitlab.io/epaper-idf/jeremy-profile-paint-bw.png) [Jeremy Carter](https://eternalvoid.net) `\u003c`[jeremy@jeremycarter.ca](mailto:Jeremy%20Carter%20\u003cjeremy@jeremycarter.ca\u003e?subject=gitcid)`\u003e`\n\n---\n\n[![gitcid logo](img/gitcid-logo-s.png)](img/gitcid-logo.png)\n\n## [Table of Contents](#table-of-contents)\n\n- [GitCid](#gitcid)\n  - [Table of Contents](#table-of-contents)\n  - [Links](#links)\n    - [Website](#website)\n    - [Source Code](#source-code)\n  - [Terms of Use](#terms-of-use)\n  - [Features](#features)\n  - [Dependencies](#dependencies)\n  - [Quickstart](#quickstart)\n    - [Download GitCid](#download-gitcid)\n    - [Create a new git remote with GitCid features](#create-a-new-git-remote-with-gitcid-features)\n  - [Usage Examples](#usage-examples)\n    - [Get Usage Help](#get-usage-help)\n    - [Install GitCid into an existing git repo](#install-gitcid-into-an-existing-git-repo)\n    - [Make new git repositories](#make-new-git-repositories)\n  - [Install a Dedicated Git Server](#install-a-dedicated-git-server)\n    - [TLDR; Let's just install the git server](#tldr-lets-just-install-the-git-server)\n    - [Git Server Install Instructions](#git-server-install-instructions)\n    - [Git Server Usage Examples](#git-server-usage-examples)\n    - [Git Server Development](#git-server-development)\n\n---\n\n## [Links](#table-of-contents)\n\n### [Website](#table-of-contents)\n\n- [https://gitc.id](https://gitc.id)\n- [https://gitcid.org](https://gitcid.org)\n- [https://gitcid.com](https://gitcid.com)\n- [https://defcronyke.gitlab.io/gitcid](https://defcronyke.gitlab.io/gitcid)\n- [https://defcronyke.github.io/gitcid](https://defcronyke.github.io/gitcid)\n\n### [Source Code](#table-of-contents)\n\n- [https://gitlab.com/defcronyke/gitcid](https://gitlab.com/defcronyke/gitcid)\n- [https://github.com/defcronyke/gitcid](https://github.com/defcronyke/gitcid)\n\n---\n\n## [Terms of Use](#table-of-contents)\n\nUse of this software is governed by the terms of [the included MIT License](https://gitlab.com/defcronyke/gitcid/-/raw/master/LICENSE) ([GitHub mirror](https://raw.githubusercontent.com/defcronyke/gitcid/master/LICENSE)).\n\n---\n\n## [Features](#table-of-contents)\n\n- Quickly deploy new `git` remotes using `ssh` and `rsync` that you can push to, with `gitcid` tools activated inside them.\n- Quickly commit, push, or clone `git` repos, and add `gitcid` tools inside them.\n- The `gitcid` tools live inside each local or remote `git` repo, you can add them to any of your existing repos with one command.\n- When you add `gitcid` to your repo, it gains built-in `CI/CD` features with a bit of help from `docker-compose` (work-in-progress).\n- Specify your `CI/CD pipelines` in a `yaml` format that might be comfortable for you if you've used other `CI/CD` systems before.\n- Quickly deploy [`dedicated git servers`](#install-a-dedicated-git-server) to `ssh` remote locations using one command. It's recommended to install them on some dedicated devices on your LAN such as `Raspberry Pi` running `Raspberry Pi OS (aarch64 or armhf)`. Regular `Debian (amd64)` targets are also supported. Perhaps it works on some `Debian-derived` distros as well, but that hasn't been tested.\n- Plug in some removable disks to your `git server` and it will automatically share any `git repos` it finds to the rest of your LAN.\n- Browse your shared `git repos` with a familiar `GitWeb` UI.\n\n---\n\n## [Dependencies](#table-of-contents)\n\nGitCid will try to install these for you automatically if they're missing from your system, but if it fails, you might need to install them yourself:\n\n- curl\n- rsync\n- git\n- docker\n- docker-compose - Usually the version found in `pip` or `pip3` (python's package manager) is the one that works properly.\n- yq ( [https://github.com/mikefarah/yq](https://github.com/mikefarah/yq) )\n\nThere are a few more dependencies needed depending on your OS, but they should be installed automatically in most cases. See the files in `.gc/.gc-deps` for full details.\n\n---\n\n## [Quickstart](#table-of-contents)\n\n---\n\n### [Download GitCid](#table-of-contents)\n\n1. Make sure you've installed [`git`](https://git-scm.com) and\n   [`curl`](https://man7.org/linux/man-pages/man1/curl.1.html) first,\n   then run the following command:\n\n   ```bash\n   source \u003c(curl -sL https://tinyurl.com/gitcid)\n   ```\n\n   When this command finishes, it will have created a new folder called `gitcid` in your current directory, and then it will bring you into this new folder.\n\n2. (Optional) Or if you prefer, you can run this command instead:\n\n   ```bash\n   git clone https://gitlab.com/defcronyke/gitcid.git \u0026\u0026 cd gitcid \u0026\u0026 echo \"\" \u0026\u0026 .gc/init.sh -h\n   ```\n\n### [Create a new git remote with GitCid features](#table-of-contents)\n\n1. In the `gitcid` folder, run this command:\n\n   ```bash\n   .gc/new-remote.sh ~/repo1.git\n   ```\n\n   - It should output some details, and if successful, it will have created a new git remote repo at the path: `~/repo1.git`\n   - It will tell you the proper `git clone` command that you can use to clone your new repo at the bottom of the output if everything worked properly.\n   - If it didn't work properly for some reason, it will mention some errors which can help you figure out what went wrong.\n\n2. You can use remote `ssh` paths for the new remote repo location also, instead of a local path, for example:\n\n   ```bash\n   .gc/new-remote.sh git1:~/repo1.git\n   ```\n\n3. An example `git clone` command to clone your git repo might look something like this:\n\n   ```bash\n   git clone git1:~/repo1.git \u0026\u0026 cd repo1\n   ```\n\n   It's just the regular way of cloning git repos.\n\n4. When you make your new remote repo, you will also be given a command you can use to add `GitCid` features to your locally cloned repo that you cloned from the remote. Here's that same command in case you need it. Make sure you're inside your local repo when you run this command:\n\n   ```bash\n   source \u003c(curl -sL https://tinyurl.com/gitcid) -e\n   ```\n\n   The above command will add GitCid to your git repo in a .gitignore'd folder called: `.gc/`\n\n---\n\n## [Usage Examples](#table-of-contents)\n\n---\n\n### [Get Usage Help](#table-of-contents)\n\n- Run this command from the top-level directory of the GitCid repo, for usage info:\n\n  ```bash\n  .gc/init.sh -h\n  ```\n\n### [Install GitCid into an existing git repo](#table-of-contents)\n\n- Run this command from the top-level directory of your existing git repo that\n  you'd like to install GitCid into (it works for both regular and bare repos):\n\n  ```bash\n  source \u003c(curl -sL https://tinyurl.com/gitcid) -e\n  ```\n\n### [Make new git repositories](#table-of-contents)\n\n- NOTE: The remote targets need to have `rsync` installed.\n\n- Run these `.gc/init.sh` commands from the top-level directory of the GitCid repo,\n  to make new GitCid git repositories.\n\n1. Make a new local git repo with the default name of \"`repo`\" in the current directory:\n\n   ```bash\n   .gc/init.sh\n   ```\n\n1. Make a new local git repo:\n\n   ```bash\n   .gc/init.sh ./local-repo\n   ```\n\n1. Make a new remote git repo at a target ssh server path:\n\n   ```bash\n   .gc/init.sh user@host:~/remote-repo\n   ```\n\n1. Make several new git repos at once, local and/or remote ones:\n\n   ```bash\n   .gc/init.sh local-repo1 user@host:~/remote-repo1 user@host:~/remote-repo2 ./local-repo2\n   ```\n\n1. Make several new bare git repos at once (suitable for using as git remotes), local and/or remote ones:\n\n   ```bash\n   .gc/init.sh -b user@host:~/remote-bare-repo1.git local-bare-repo1.git ./local-bare-repo2\n   ```\n\n---\n\n## [Install a Dedicated Git Server](#table-of-contents)\n\n---\n\nInstall a git server at a target ssh location, using tools from this project:\n\n[https://gitlab.com/defcronyke/git-server](https://gitlab.com/defcronyke/git-server)\n\nCurrently supported target platforms:\n\n- Debian Stable (amd64)\n- Debian Testing (amd64)\n- Raspberry Pi OS (armhf)\n- Raspberry Pi OS (aarch64)\n\nPlatform support wishlist (Please feel free to test and contribute fix suggestions if you'd like to help with adding support for these):\n\n- Arch Linux (amd64)\n\nMaybe it works on other Debian or Debian-based platforms, but this hasn't been tested yet.\n\nWARNING: USE AT YOUR OWN RISK! You should only run the commands in this section to install a dedicated git server onto a freshly installed Linux distro which is intended to be used only as a dedicated git server! This will install some dependencies automatically and do some system configurations that you might not prefer to have on devices that are being used for other purposes. USE AT YOUR OWN RISK! YOU HAVE BEEN WARNED!!\n\n---\n\n### [TLDR; Let's just install the git server](#table-of-contents)\n\n- Install a `git server` to a remote `ssh` location (or two as in this example), by running the following command in a `bash` terminal:\n\n  ```bash\n  source \u003c(curl -sL https://tinyurl.com/gitcid) \u0026\u0026 .gc/new-git-server.sh -o pi@git1 $USER@gitlab\n  ```\n\n  Usually it just works, and with the `-o` flag used above, it should auto-open a web page for each git server it finds on your network after the install is finished. For more info and other options, see the next section below.\n\n- The example above will also install `gitcid`, which makes it easier to work with the git server. If you already have `gitcid` installed, you don't need to install it again, so in that case you can omit the first part of the above command, for example:\n\n  ```bash\n  .gc/new-git-server.sh -o pi@git1 $USER@gitlab\n  ```\n\n  Just make sure you're inside the `gitcid/` folder first (or any `gitcid`-enabled git repo), before trying to run any `gitcid` commands.\n\n---\n\n### [Git Server Install Instructions](#table-of-contents)\n\n1. Install GitCid:\n\n   ```bash\n   source \u003c(curl -sL https://tinyurl.com/gitcid)\n   ```\n\n   If successful, you will now be inside the freshly downloaded `./gitcid/` folder. You need to be inside this folder for step 2.\n\n2. Install new git server(s) onto dedicated device(s) at the given `ssh` target location(s):\n\n   - Usage details:\n\n   ```bash\n   .gc/new-git-server.sh -h\n   ```\n\n   - Install or update some git servers, with a confirmation prompt before installing:\n\n   ```bash\n   .gc/new-git-server.sh git1 git2 gitlab\n   ```\n\n   - Install or update some git servers with a confirmation prompt. Open a web browser tab for each available GitWeb server page found on your network when finished:\n\n   ```bash\n   .gc/new-git-server.sh -o git1 git2 gitlab\n   ```\n\n   - Non-interactive automated version:\n\n   ```bash\n   .gc/new-git-server.sh -y git1 git2 gitlab\n   ```\n\n   - Non-interactive automated version, open web browser to GitWeb pages when finished:\n\n   ```bash\n   .gc/new-git-server.sh -yo git1 git2 gitlab\n   ```\n\n   - Non-interactive sequential install. In the examples above, installs are attempted first in parallel whenever possible. To override that behaviour and perform all installs sequentially one at a time, use this command instead:\n\n   ```bash\n   .gc/new-git-server.sh -s git1 git2 gitlab\n   ```\n\n   - Non-interactive sequential install, and open a web browser to GitWeb pages when finished:\n\n   ```bash\n   .gc/new-git-server.sh -so git1 git2 gitlab\n   ```\n\n   - Specify the ssh username to log in as during install on the targets. By default, the ssh config for each hostname is used from your `~/.ssh/config` file, but if you prefer, you can add a username in the command below for each target. You can do this for any of the various commands listed above, for example:\n\n   ```bash\n   .gc/new-git-server.sh -yo pi@git1 pi@git2 $USER@gitlab\n   ```\n\n   If everything worked as intended, your git server(s) are now ready to use. See the output in your terminal for more details. During parallel installs (the default behaviour unless using the `-s` flag variants), if non-interactive sudo support isn't configured on the target, the system will fall back to sequential install mode for any targets which need the sudo password typed manually. After typing the sudo password once successfully, a passwordless sudo configuration will be attempted on the target, so that any future interactions with that target can be fully-automated.\n\n---\n\n### [Git Server Usage Examples](#table-of-contents)\n\nHere's some examples of how to use your git server for some common git-related tasks. The following commands should be run from inside your `gitcid/` folder, or inside any `gitcid`-enabled git repo.\n\n1. Create a new git remote repo on the git server, for example, a repo named `repo1.git` at the hostname `git1`:\n\n   ```bash\n   .gc/new-remote.sh git1:repo1\n   ```\n\n   Newly created remote repos will become available for use after a short delay, typically less than 1 minute. If you receive an error when trying to use a newly created remote repo, try again after 1 minute has passed since creating it and it should work.\n\n2. Clone a local copy of your new repo from the server:\n\n   ```bash\n   git clone git1:~/git/repo1.git\n   cd repo1\n   ```\n\n3. Commit some changes to your new repo, then push it to the origin remote on your git server:\n\n   ```bash\n   date | tee -a test1.txt\n   git add .\n   git commit -m \"A test commit.\"\n   git push\n   ```\n\n4. (Optional) Add `gitcid` to your local copy of your git repo if you'd like to use any `gitcid` commands while working inside your repo. Run the following command while inside your repo to install `gitcid` features:\n\n   ```bash\n   source \u003c(curl -sL https://tinyurl.com/gitcid) -e\n   ```\n\n5. (Optional) With `gitcid` added to your repo from the previous step, you can commit and push more easily:\n\n   ```bash\n   .gc/commit-push.sh Commit message.\n   ```\n\n---\n\n### [Git Server Development](#table-of-contents)\n\nIf you'd like to contribute to the development of the `git server`, you can run this command if you want, to help you set up your dev environment for this purpose:\n\n```bash\nsource \u003c(curl -sL https://tinyurl.com/gitcid) -d\n```\n\nIt will clone all related project git repositories, and it will install `gitcid` into them for convenience.\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdefcronyke%2Fgitcid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdefcronyke%2Fgitcid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdefcronyke%2Fgitcid/lists"}