自动同步Github的两个代码库 How to synchronize the Github repositories automatically
有时候需要同步两个git代码库,而这两个代码库并不是简单的fork关系。手动执行太烦人了,写了一个自动脚本。
#! /bin/sh WORKSPACE=sync-git-workspace SOURCE_GIT_REPO=https://github.com/account_source/source_repo_name.git SOURCE_BRANCH=master TARGET_GIT_REPO=https://github.com/account_target/target_repo_name.git TARGET_BRANCH=master TARGET_GIT_COMMIT_USERNAME=account_target TARGET_GIT_COMMIT_EMAIL=account_target@example.com TARGET_GIT_REPO_USERNAME=account_target TARGET_GIT_REPO_PASSWORD=******** SYNC_SOURCE_FOLDER=. SYNC_TARGET_FOLDER=. SOURCE_FOLDER=`echo ${SOURCE_GIT_REPO%.git} | rev | cut -d'/' -f 1 | rev` TARGET_FOLDER=`echo ${TARGET_GIT_REPO%.git} | rev | cut -d'/' -f 1 | rev` TARGET_GIT_REPO_WITH_AUTH=`echo $TARGET_GIT_REPO | sed 's/https:\/\//https:\/\/'$TARGET_GIT_REPO_USERNAME':'$TARGET_GIT_REPO_PASSWORD'@''/'` cd ~ if [ ! -d "$WORKSPACE" ]; then mkdir $WORKSPACE fi cd $WORKSPACE if [ ! -d "$SOURCE_FOLDER" ]; then git clone $SOURCE_GIT_REPO fi if [ ! -d "$TARGET_FOLDER" ]; then git clone $TARGET_GIT_REPO fi cd $SOURCE_FOLDER git reset HEAD --hard && git checkout $SOURCE_BRANCH git remote update && git pull origin cd ../$TARGET_FOLDER git reset HEAD --hard && git checkout $TARGET_BRANCH git remote update && git pull origin rsync -av --progress ../$SOURCE_FOLDER/$SYNC_SOURCE_FOLDER ./$SYNC_TARGET_FOLDER --exclude .git if [ "`git diff`" = "" ]; then echo "Nothing to synchronize. No file is changed." exit 0 fi git add --all git config user.email $TARGET_GIT_COMMIT_EMAIL git config user.name $TARGET_GIT_COMMIT_USERNAME git config push.default simple git commit -m "Synchronize the source code." git push --repo=$TARGET_GIT_REPO_WITH_AUTH echo "Source code is synchronized." exit 0
存在差分的时候会自动commit,并push到远程分支。
需要设置一下如下变量
SOURCE_GIT_REPO : 源代码库 SOURCE_BRANCH : 需要同步的分支(源代码库) TARGET_GIT_REPO : 目标代码库 TARGET_BRANCH : 需要同步的分支(目标代码库) TARGET_GIT_COMMIT_USERNAME : commit时候的author名,这个是可以随意设定的 TARGET_GIT_COMMIT_EMAIL : commit时候的email,其实也是可以随意设定的 TARGET_GIT_REPO_USERNAME : Github的账户,必须是短账户名,不能使用邮件地址 TARGET_GIT_REPO_PASSWORD : Github账户的密码 SYNC_SOURCE_FOLDER : 用于同步的源目录,. 为(源代码库的)根目录 SYNC_TARGET_FOLDER : 用于同步的目标目录,. 为(目标代码库的)根目录
在设定SYNC_SOURCE_FOLDER
和SYNC_TARGET_FOLDER
后,允许只同步部分目录。
比如将源代码库的所有文件同步到目标代码库的abc目录下:
SYNC_SOURCE_FOLDER=. SYNC_TARGET_FOLDER=abc
保存为sync-git.sh
,开跑:
chmod +x sync-git.sh ./sync-git.sh
设定为定时任务:crontab -e
每四小时运行一次脚本:
0 */4 * * * /home/ubuntu/sync-git.sh
还以为博主忘记了他有个博客