separate sync git script

This commit is contained in:
2026-01-28 20:04:24 +02:00
parent a3598a5f79
commit 9e57d9ebd2
3 changed files with 109 additions and 70 deletions

13
shared.sh Normal file
View File

@@ -0,0 +1,13 @@
#!/bin/bash
# Shared variables and configuration for sync scripts
# Colors for output
GREEN='\033[0;32m'
RED='\033[0;31m'
BLUE='\033[0;34m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
# SSH options - auto-accept new host keys
SSH_OPTS="-o StrictHostKeyChecking=accept-new"

85
sync-git-project.sh Normal file
View File

@@ -0,0 +1,85 @@
#!/bin/bash
# This script is used to clone a project from a remote server
# and setup lazygit for remote git operations.
# Called by sync-project.sh with --git flag.
# Get current script real directory (follow symlinks)
SCRIPT_PATH="$(realpath "$0")"
SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"
# Source shared variables
source "$SCRIPT_DIR/shared.sh"
# Arguments: SERVER_HOST SSH_PASSWORD SERVER_PROJECT_PATH LOCAL_FOLDER
SERVER_HOST="$1"
SSH_PASSWORD="$2"
SERVER_PROJECT_PATH="$3"
LOCAL_FOLDER="$4"
# Validate arguments
if [ -z "$SERVER_HOST" ] || [ -z "$SSH_PASSWORD" ] || [ -z "$SERVER_PROJECT_PATH" ] || [ -z "$LOCAL_FOLDER" ]; then
echo -e "${RED}Usage: sync-git-project.sh SERVER_HOST SSH_PASSWORD SERVER_PROJECT_PATH LOCAL_FOLDER${NC}"
exit 1
fi
# Clone repository
echo "Cloning repository..."
GIT_SSH_COMMAND="sshpass -p '${SSH_PASSWORD}' ssh $SSH_OPTS" \
git clone ${SERVER_HOST}:${SERVER_PROJECT_PATH} "${LOCAL_FOLDER}"
if [ $? -ne 0 ]; then
echo -e "${RED}Failed to clone repository${NC}"
exit 1
fi
echo -e "${GREEN}Repository cloned successfully${NC}"
# Extract username and host from SERVER_HOST
USERNAME="${SERVER_HOST%@*}"
HOST="${SERVER_HOST#*@}"
cd "${LOCAL_FOLDER}"
# Upload lazygit to server
echo "Uploading lazygit to server..."
sshpass -p "${SSH_PASSWORD}" scp $SSH_OPTS "${SCRIPT_DIR}/lazygit" ${SERVER_HOST}:${SERVER_PROJECT_PATH}
if [ $? -ne 0 ]; then
echo -e "${RED}Failed to upload lazygit${NC}"
exit 1
fi
echo -e "${GREEN}lazygit uploaded successfully${NC}"
# Mark lazygit as assume-unchanged on server
echo "Marking lazygit as assume-unchanged on server..."
sshpass -p "${SSH_PASSWORD}" ssh $SSH_OPTS ${SERVER_HOST} \
"cd ${SERVER_PROJECT_PATH} && git update-index --assume-unchanged lazygit"
# Pull to get lazygit locally, then mark as assume-unchanged
echo "Syncing and marking lazygit as assume-unchanged locally..."
GIT_SSH_COMMAND="sshpass -p '${SSH_PASSWORD}' ssh $SSH_OPTS" git pull
git update-index --assume-unchanged lazygit
echo -e "${GREEN}lazygit configured successfully${NC}"
# Generate ssh.sh script
echo "
#!/bin/bash
set -e
# Configuration
SERVER_USER=\"${USERNAME}\"
SERVER_HOST=\"${HOST}\"
SERVER_PASSWORD=\"${SSH_PASSWORD}\"
SERVER_PATH=\"${SERVER_PROJECT_PATH}/\"
REMOTE_PROGRESS=\".remote-in-progress\"
" > "ssh.sh"
# Append the ssh.sh template
cat "${SCRIPT_DIR}/scripts/ssh.sh" >> "ssh.sh"
echo -e "${GREEN}ssh.sh created successfully${NC}"
echo -e "${GREEN}Git clone complete!${NC}"
exit 0

View File

@@ -3,20 +3,14 @@
# This script is used to sync a project from # This script is used to sync a project from
# a remote server to a local machine. # a remote server to a local machine.
# Colors for output
GREEN='\033[0;32m'
RED='\033[0;31m'
BLUE='\033[0;34m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
# Get current script real directory (follow symlinks) # Get current script real directory (follow symlinks)
SCRIPT_PATH="$(realpath "$0")" SCRIPT_PATH="$(realpath "$0")"
SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"
ARCHIVE_NAME="sync.tar.gz"
# SSH options - auto-accept new host keys # Source shared variables
SSH_OPTS="-o StrictHostKeyChecking=accept-new" source "$SCRIPT_DIR/shared.sh"
ARCHIVE_NAME="sync.tar.gz"
# Parse command line arguments # Parse command line arguments
SFTP_ONLY=false SFTP_ONLY=false
@@ -104,67 +98,14 @@ if [ -z "$LOCAL_FOLDER" ]; then
exit 1 exit 1
fi fi
# Git clone mode - clone repository and setup lazygit # Git clone mode - delegate to sync-git-project.sh
if [ "$GIT_ONLY" = true ]; then if [ "$GIT_ONLY" = true ]; then
echo "Cloning repository..." "$SCRIPT_DIR/sync-git-project.sh" \
GIT_SSH_COMMAND="sshpass -p '${SSH_PASSWORD}' ssh $SSH_OPTS" \ "$SERVER_HOST" \
git clone ${SERVER_HOST}:${SERVER_PROJECT_PATH} "${LOCAL_FOLDER}" "$SSH_PASSWORD" \
"$SERVER_PROJECT_PATH" \
if [ $? -ne 0 ]; then "$LOCAL_FOLDER"
echo -e "${RED}Failed to clone repository${NC}" exit $?
exit 1
fi
echo -e "${GREEN}Repository cloned successfully${NC}"
# Extract username and host from SERVER_HOST
USERNAME="${SERVER_HOST%@*}"
HOST="${SERVER_HOST#*@}"
cd "${LOCAL_FOLDER}"
# Upload lazygit to server
echo "Uploading lazygit to server..."
sshpass -p "${SSH_PASSWORD}" scp $SSH_OPTS "${SCRIPT_DIR}/lazygit" ${SERVER_HOST}:${SERVER_PROJECT_PATH}
if [ $? -ne 0 ]; then
echo -e "${RED}Failed to upload lazygit${NC}"
exit 1
fi
echo -e "${GREEN}lazygit uploaded successfully${NC}"
# Mark lazygit as assume-unchanged on server
echo "Marking lazygit as assume-unchanged on server..."
sshpass -p "${SSH_PASSWORD}" ssh $SSH_OPTS ${SERVER_HOST} \
"cd ${SERVER_PROJECT_PATH} && git update-index --assume-unchanged lazygit"
# Pull to get lazygit locally, then mark as assume-unchanged
echo "Syncing and marking lazygit as assume-unchanged locally..."
GIT_SSH_COMMAND="sshpass -p '${SSH_PASSWORD}' ssh $SSH_OPTS" git pull
git update-index --assume-unchanged lazygit
echo -e "${GREEN}lazygit configured successfully${NC}"
# Generate ssh.sh script
echo "
#!/bin/bash
set -e
# Configuration
SERVER_USER=\"${USERNAME}\"
SERVER_HOST=\"${HOST}\"
SERVER_PASSWORD=\"${SSH_PASSWORD}\"
SERVER_PATH=\"${SERVER_PROJECT_PATH}/\"
REMOTE_PROGRESS=\".remote-in-progress\"
" > "ssh.sh"
# Append the ssh.sh template
cat "${SCRIPT_DIR}/scripts/ssh.sh" >> "ssh.sh"
echo -e "${GREEN}ssh.sh created successfully${NC}"
echo -e "${GREEN}Git clone complete!${NC}"
exit 0
fi fi
# Sync terminal info on full sync (no flags) # Sync terminal info on full sync (no flags)