# GetGit - Git Repository Setup Tool A simple bash script that helps users set up SSH keys and clone repositories from a private git server. ## Features - **SSH Key Generation**: Automatically generates SSH keys if they don't exist - **Dynamic User Support**: Works with any username on the git server - **Repository Discovery**: Automatically discovers available repositories for the user - **Interactive Selection**: Allows users to choose which repository to clone - **Dotfiles Support**: Special handling for dotfiles repositories with automatic setup execution ## Usage 1. Make the script executable: ```bash chmod +x setup.sh ``` 2. Run the script: ```bash ./setup.sh ``` 3. Follow the prompts: - Enter your git username - Generate SSH key (if needed) - Add the SSH key to your git account - Select which repository to clone ## How It Works ### 1. Username Input The script prompts for your git username, which is used to: - Discover available repositories - Construct repository URLs - Set up proper directory structure ### 2. SSH Key Management - Checks for existing SSH key (`~/.ssh/id_ed25519`) - Generates a new key if none exists - Displays the public key for copying to your git account ### 3. Repository Discovery The script discovers ALL accessible repositories through multiple methods: **Primary Method - API Access:** - Attempts to use GitLab/Gitea API to fetch all repositories you have access to - Includes both owned and shared repositories - Automatically detects read/write permissions **Fallback Method - Pattern Scanning:** - Scans your own repositories: `username/dotfiles`, `username/scripts`, etc. - Checks common shared repositories from users like: `admin`, `shared`, `public`, `team`, `common`, `devops`, `infrastructure` - Discovers additional project repositories: `website`, `api`, `frontend`, `backend`, `database`, `monitoring`, etc. - Tests SSH access to determine if you have read access to each repository **Repository Types Discovered:** - **Your repositories**: All repos you own - **Shared repositories**: Repos you have read/write access to - **Public repositories**: Publicly accessible repos on the server - **Team repositories**: Organization/team repos you're a member of ### 4. Repository Selection Users can: - Select from numbered list of all discovered repositories (owned and shared) - Press Enter to use `username/dotfiles` (if available) - Type `custom` to enter a custom repository path - See access type indicators: `(owner)`, `(shared)`, etc. ### 5. Cloning and Setup - Clones the selected repository to the appropriate directory - For dotfiles repositories: runs `setup.sh` automatically - For other repositories: simply clones to `~/repository-name` ## Configuration The script can be configured by modifying the settings at the top: ```bash ### === SETTINGS === ### GIT_SERVER="git.del-c.net" # Change to your git server ``` ## Directory Structure - **Dotfiles**: `~/.dotfiles/` - **Other repos**: `~/repository-name/` ## Requirements - Bash shell - Git installed - SSH client - Access to the configured git server ## Example Flow ``` $ ./setup.sh [?] Enter your git username: Username: john [+] No SSH key found. Need to generate a new SSH key... [+] If you are using the correct user, please enter your email for the SSH key. Enter your email for the SSH key: john@example.com [*] Add the following public key to your GitHub account: ---------------------------------------- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGx... john@example.com ---------------------------------------- Press Enter after you've added the key... [+] Fetching all accessible git projects... [*] Attempting to fetch repositories via API... [*] Found repositories via API: 1. john/dotfiles (owner) 2. john/scripts (owner) 3. team/shared-configs (shared) 4. admin/common-tools (shared) 5. public/templates (shared) [?] Which project would you like to download? Enter the number of the repository from the list above, or: - Press Enter to use john/dotfiles (if available) - Type 'custom' to enter a custom repository path Enter your choice: 3 [*] Selected repository: git@git.del-c.net:team/shared-configs.git [*] Download directory: /Users/john/shared-configs [+] Cloning selected repository... [*] Repository cloned successfully to: /Users/john/shared-configs ``` ## Troubleshooting ### SSH Key Issues - Ensure the SSH key is added to your git account - Check SSH connection: `ssh -T git@git.del-c.net` ### Repository Not Found - Verify the repository exists on the server - Check username spelling - Ensure you have access to the repository ### Permission Denied - Confirm SSH key is properly added to git account - Verify you have read access to the repository ## Contributing Feel free to submit issues and enhancement requests!