Khởi tạo ban đầu

This commit is contained in:
Tran Anh Tuan
2025-11-28 16:59:57 +07:00
parent 2911be97b2
commit 4ba46a7df2
131 changed files with 28066 additions and 0 deletions

91
git-auto-push.sh Executable file
View File

@@ -0,0 +1,91 @@
#!/bin/bash
set -e
echo "=== Git Auto Push Script with Safe Pull and Error Handling ==="
# Hàm kiểm tra lỗi và thoát
handle_error() {
echo "❌ Lỗi: $1"
# Nếu có stash, hiển thị thông báo để người dùng biết cách xử lý
if [ "$stashed" = true ]; then
echo "⚠️ Có stash được lưu, hãy kiểm tra bằng 'git stash list' và xử lý thủ công nếu cần."
fi
exit 1
}
# Kiểm tra xem có trong Git repository không
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
handle_error "Thư mục hiện tại không phải là Git repository!"
fi
# Lấy nhánh hiện tại
current_branch=$(git branch --show-current)
if [ -z "$current_branch" ]; then
handle_error "Không thể xác định nhánh hiện tại!"
fi
echo "👉 Bạn đang ở nhánh: $current_branch"
# Hỏi nhánh chính, mặc định là 'master' nếu người dùng không nhập
read -p "Nhập tên nhánh chính (mặc định: master): " target_branch
target_branch=${target_branch:-master}
# Kiểm tra xem nhánh chính có tồn tại trên remote không
if ! git ls-remote --heads origin "$target_branch" >/dev/null 2>&1; then
handle_error "Nhánh $target_branch không tồn tại trên remote!"
fi
# --- Bước 1: Stash nếu có thay đổi chưa commit ---
stashed=false
if [[ -n $(git status --porcelain) ]]; then
echo "💾 Có thay đổi chưa commit -> stash lại..."
git stash push -m "auto-stash-before-pull-$(date +%s)" || handle_error "Lỗi khi stash code!"
stashed=true
fi
# --- Bước 2: Đồng bộ code từ nhánh chính về nhánh hiện tại ---
echo "🔄 Đồng bộ code từ $target_branch về $current_branch..."
git fetch origin "$target_branch" || handle_error "Lỗi khi fetch $target_branch!"
git merge origin/"$target_branch" --no-edit || {
handle_error "Merge từ $target_branch về $current_branch bị conflict, hãy xử lý thủ công rồi chạy lại."
}
# --- Bước 3: Nếu có stash thì pop lại ---
if [ "$stashed" = true ]; then
echo "📥 Pop lại code đã stash..."
git stash pop || handle_error "Stash pop bị conflict, hãy xử lý thủ công bằng 'git stash list' và 'git stash apply'!"
fi
# --- Bước 4: Commit & Push nhánh hiện tại ---
if [[ -n $(git status --porcelain) ]]; then
git add . || handle_error "Lỗi khi add files!"
read -p "Nhập commit message (mặc định: 'Update from $current_branch'): " commit_message
commit_message=${commit_message:-"Update from $current_branch"}
git commit -m "$commit_message" || handle_error "Lỗi khi commit!"
else
echo "⚠️ Không có thay đổi để commit."
fi
git push origin "$current_branch" || handle_error "Push nhánh $current_branch thất bại!"
# --- Bước 5: Checkout sang nhánh chính ---
echo "🔄 Chuyển sang nhánh $target_branch..."
git checkout "$target_branch" || handle_error "Checkout sang $target_branch thất bại!"
# --- Bước 6: Pull nhánh chính ---
echo "🔄 Pull code mới nhất từ remote $target_branch..."
git pull origin "$target_branch" --no-rebase || handle_error "Pull $target_branch thất bại!"
# --- Bước 7: Merge nhánh hiện tại vào nhánh chính ---
echo "🔀 Merge $current_branch vào $target_branch..."
git merge "$current_branch" --no-edit || {
handle_error "Merge từ $current_branch vào $target_branch bị conflict, hãy xử lý thủ công rồi chạy lại."
}
# --- Bước 8: Push nhánh chính ---
git push origin "$target_branch" || handle_error "Push $target_branch thất bại!"
# --- Quay lại nhánh hiện tại ---
echo "🔄 Quay lại nhánh $current_branch..."
git checkout "$current_branch" || handle_error "Checkout về $current_branch thất bại!"
echo "✅ Hoàn tất! Code từ $current_branch đã được merge vào $target_branch và đẩy lên remote."