110 lines
2.9 KiB
Bash
Executable File
110 lines
2.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Initializes a git repository and pushes to a remote using credentials from arguments
|
|
#
|
|
# Usage: ./git-init-from-config.sh <git-url> <git-user> <git-token>
|
|
#
|
|
# Arguments:
|
|
# git-url - Repository URL (e.g., https://gitea.example.com/user/repo.git)
|
|
# git-user - Git username
|
|
# git-token - Git token or password
|
|
#
|
|
# The branch name will be read from the VERSION file (first line)
|
|
|
|
set -e
|
|
|
|
if [ "$#" -lt 3 ]; then
|
|
echo "Usage: $0 <git-url> <git-user> <git-token>"
|
|
echo ""
|
|
echo "Arguments:"
|
|
echo " git-url - Repository URL (e.g., https://gitea.example.com/user/repo.git)"
|
|
echo " git-user - Git username"
|
|
echo " git-token - Git token or password"
|
|
exit 1
|
|
fi
|
|
|
|
GIT_URL="$1"
|
|
GIT_USER="$2"
|
|
GIT_TOKEN="$3"
|
|
|
|
if [ -z "$GIT_URL" ]; then
|
|
echo "Error: git-url is required"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$GIT_USER" ]; then
|
|
echo "Error: git-user is required"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$GIT_TOKEN" ]; then
|
|
echo "Error: git-token is required"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "VERSION" ]; then
|
|
echo "Error: VERSION file not found in current directory"
|
|
exit 1
|
|
fi
|
|
|
|
GIT_BRANCH=$(head -n 1 VERSION | tr -d '[:space:]')
|
|
|
|
if [ -z "$GIT_BRANCH" ]; then
|
|
echo "Error: VERSION file is empty"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Version detected: $GIT_BRANCH"
|
|
|
|
if [[ "$GIT_URL" == https://* ]]; then
|
|
URL_WITHOUT_PROTOCOL="${GIT_URL#https://}"
|
|
AUTH_URL="https://${GIT_USER}:${GIT_TOKEN}@${URL_WITHOUT_PROTOCOL}"
|
|
elif [[ "$GIT_URL" == http://* ]]; then
|
|
URL_WITHOUT_PROTOCOL="${GIT_URL#http://}"
|
|
AUTH_URL="http://${GIT_USER}:${GIT_TOKEN}@${URL_WITHOUT_PROTOCOL}"
|
|
else
|
|
echo "Error: URL must start with http:// or https://"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Configuring Git for large files..."
|
|
# Increase HTTP post buffer to handle large files (500MB)
|
|
git config --global http.postBuffer 524288000
|
|
# Optimize compression for large files
|
|
git config --global core.compression 9
|
|
# Increase timeout for long operations (30 minutes)
|
|
git config --global http.lowSpeedLimit 0
|
|
git config --global http.lowSpeedTime 1800
|
|
|
|
echo "Initializing git repository..."
|
|
git init
|
|
|
|
echo "Adding all files (this may take a while for large files)..."
|
|
git add -A
|
|
TOTAL_FILES=$(git ls-files | wc -l)
|
|
TOTAL_SIZE=$(du -sh . | cut -f1)
|
|
echo "Added $TOTAL_FILES files (total size: $TOTAL_SIZE)"
|
|
|
|
echo "Creating initial commit..."
|
|
git commit -m "Initial commit" || echo "Nothing to commit or already committed"
|
|
|
|
echo "Setting branch to $GIT_BRANCH..."
|
|
git branch -M "$GIT_BRANCH"
|
|
|
|
echo "Adding remote origin..."
|
|
git remote remove origin 2>/dev/null || true
|
|
git remote add origin "$AUTH_URL"
|
|
|
|
echo "Pushing to remote (this may take a while for large files)..."
|
|
# Use progress flag to show upload progress
|
|
git push --progress -u origin "$GIT_BRANCH" 2>&1 | while IFS= read -r line; do
|
|
echo "$line"
|
|
# Show progress indicators
|
|
if [[ "$line" =~ (Counting|Compressing|Writing|remote:) ]]; then
|
|
echo "$line"
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "Done! Repository pushed to $GIT_URL on branch $GIT_BRANCH"
|