Managing multiple Git repositories can be a hassle, especially when we need to keep them up-to-date with the latest changes. Whether we're working on multiple projects or managing a large monorepo setup, manually cloning and pulling changes can be time-consuming. That's where git-sync.sh
comes in!
In this post, I'll introduce git-sync.sh
, a simple yet powerful shell / bash script that automates the process of cloning and pulling multiple Git repositories. This script not only saves you time but also provides clear feedback using emojis to indicate the success or failure of each operation.
Why Use git-sync.sh
?
git-sync.sh
is designed to:
- Automate Repository Cloning: Check if a repository is already cloned and clone it if not.
- Keep Repositories Up-to-Date: Pull the latest changes if the repository is already cloned.
- Provide Clear Feedback: Use emojis to show the status of each operation, making it easy to see what happened at a glance.
How to Use git-sync.sh
1. Set Up the Script
First, you need to create the git-sync.sh
file.
#!/bin/bash
# List of repositories to sync
REPOS=(
"https://github.com/user/repo1.git"
"https://github.com/user/repo2.git"
"https://github.com/user/repo3.git"
)
# Directory where repositories will be cloned/pulled
TARGET_DIR="$HOME/projects"
# Emoji for status
CLONE="⬇️"
CLONE_SUCCESS="⬇️✅"
CLONE_FAILURE="⬇️❌"
PULL="🔄"
PULL_SUCCESS="🔄✅"
PULL_FAILURE="🔄❌"
# Ensure target directory exists
mkdir -p "$TARGET_DIR"
# Function to clone or pull a repository
sync_repo() {
local repo_url=$1
local repo_name=$(basename "$repo_url" .git)
local repo_dir="$TARGET_DIR/$repo_name"
# Check if the directory already exists
if [ -d "$repo_dir" ]; then
echo "$PULL Pull latest changes for '$repo_name'"
cd "$repo_dir" || { echo "$PULL_FAILURE Failed to enter directory '$repo_dir'"; return; }
if git pull; then
echo "$PULL_SUCCESS Successfully pulled latest changes for '$repo_name'"
else
echo "$PULL_FAILURE Failed to pull latest changes for '$repo_name'"
fi
else
echo "$CLONE Cloning '$repo_name' Repository"
if git clone "$repo_url" "$repo_dir"; then
echo "$CLONE_SUCCESS Successfully cloned '$repo_name'"
else
echo "$CLONE_FAILURE Failed to clone '$repo_name'"
fi
fi
}
# Sync each repository
for repo in "${REPOS[@]}"; do
sync_repo "$repo"
done
Make sure the script is executable:
chmod +x git-sync.sh
2. Configure the Script
Edit git-sync.sh
to include your list of repositories and specify the target directory:
# List of repositories to sync
REPOS=(
"https://github.com/user/repo1.git"
"https://github.com/user/repo2.git"
"https://github.com/user/repo3.git"
)
# Directory where repositories will be cloned/pulled
TARGET_DIR="$HOME/projects"
3. Run the Script
Now, simply run the script:
./git-sync.sh
The script will automatically:
- Check if each repository in the list is already cloned in the target directory.
- Clone the repository if it's not present.
- Pull the latest changes if the repository is already cloned.
4. Status Feedback
The script provides status updates using emojis:
-
⬇️
: Cloning the repository. -
⬇️✅
: Successfully cloned the repository. -
⬇️❌
: Failed to clone the repository. -
🔄
: Pull latest changes from the repository. -
🔄✅
: Successfully pulled the latest changes. -
🔄❌
: Failed to pull the latest changes.
Example Output
Here's an example of what the output might look like:
Repository 'repo1' already exists. Pulling latest changes...
🔄✅ Successfully pulled latest changes for 'repo1'
Repository 'repo2' not found. Cloning...
⬇️✅ Successfully cloned 'repo2'
Repository 'repo3' already exists. Pulling latest changes...
🔄❌ Failed to pull latest changes for 'repo3'
Customization
You can customize git-sync.sh
to fit your workflow:
-
Add or Remove Repositories: Modify the
REPOS
array to include your repositories. -
Change Target Directory: Set
TARGET_DIR
to the desired location. - Customize Emojis: Personalize the emojis used for status feedback.
Troubleshooting
-
Permission Issues: Ensure the script is executable with
chmod +x git-sync.sh
. - Access Rights: Make sure you have the necessary SSH keys or credentials for private repositories.
- Network Problems: Ensure you have a stable internet connection.
Happy coding! 👨💻🎉
Top comments (0)