On windows you can specify file repositories with file:///\\<computer>\<path>
(ex: file:///\\homepc\repos\git-backup.git
).
It is always a good practice to postfix the folder with .git
to indicate that this folder is a bare repository.
#!/bin/bash | |
#./sync_repos_1branch.sh [path_to_work_in] [ssh/http-origin] [ssh/http-destination] [origin-branch] [destination-branch] | |
echo ScriptName is $0 | |
echo ParamCount is $# | |
if [ $# -ne 5 ]; then | |
echo The parameter count must be 5 | |
exit 1 | |
fi | |
echo LocalGitPath is $1 | |
echo GitRemoteOrigin is $2 | |
echo GitRemoteDestination is $3 | |
echo GitBranchOrigin is $4 | |
echo GitBranchDestination is $5 | |
if [ ! -d "$1" ]; then | |
echo Local Git path does not exist, creating it | |
mkdir "$1" | |
fi | |
echo Changing into local git path | |
cd $1 | |
if [ ! -d "$1/HEAD" ]; then | |
echo Local Git Path contains no Git repository, init a new one | |
git init --bare "$1" | |
if [ $? -ne 0 ]; then | |
echo Git init fails, exit | |
exit 1 | |
fi | |
fi | |
echo Setting up the remotes | |
git remote rm origin | |
git remote rm destination | |
git remote add origin "$2" | |
git remote add destination "$3" | |
echo fetching orign branch "$4" from "$2" | |
git fetch origin $4:origin/$4 --force | |
LASTERROR=$? | |
if [ $LASTERROR -ne 0 ] && [ $LASTERROR -ne 128 ]; then #128 = no changes found | |
echo git fetch operation fails, exit | |
exit 1 | |
fi | |
echo pushing orign branch "$4" to destination "$3" branch "$5" | |
git push destination origin/$4:$5 --force | |
LASTERROR=$? | |
if [ $LASTERROR -ne 0 ] && [ $LASTERROR -ne 128 ]; then #128 = no changes found | |
echo git push operation fails, exit | |
exit 1 | |
fi | |
echo done | |
exit 0 |
:: ./sync_repos_full.bat [ssh/http-origin] [ssh/http-destination] | |
@ECHO OFF | |
SET sourceRepository=%1 | |
SET targetRepository=%2 | |
IF "%1"=="" ( | |
SET error_msg=sourceRepository is missing | |
goto error | |
) | |
IF "%2"=="" ( | |
SET error_msg=targetRepository is missing | |
goto error | |
) | |
IF EXIST .\HEAD (goto fetch) ELSE (goto init) | |
:init | |
call git init --bare . | |
:fetch | |
call git remote rm origin | |
call git remote rm destination | |
call git remote add origin "%sourceRepository%" | |
call git remote add destination "%targetRepository%" | |
call git fetch origin +refs/heads/*:refs/heads/* --force | |
:push | |
call git push destination --all --force -v | |
call git push destination --tags --force -v | |
goto exit | |
:error | |
echo %error_msg% | |
:exit | |
echo --DONE-- |
#!/bin/bash | |
#./sync_repos_full.sh [path_to_work_in] [ssh/http-origin] [ssh/http-destination] | |
echo ScriptName is $0 | |
echo ParamCount is $# | |
if [ $# -ne 3 ]; then | |
echo The parameter count must be 3 | |
exit 1 | |
fi | |
echo LocalGitPath is $1 | |
echo GitRemoteOrigin is $2 | |
echo GitRemoteDestination is $3 | |
if [ ! -d "$1" ]; then | |
echo Local Git path does not exist, creating it | |
mkdir "$1" | |
fi | |
echo Changing into local git path | |
cd $1 | |
if [ ! -d "$1/HEAD" ]; then | |
echo Local Git Path contains no Git repository, init a new one | |
git init --bare "$1" | |
if [ $? -ne 0 ]; then | |
echo Git init fails, exit | |
exit 1 | |
fi | |
fi | |
echo Setting up the remotes | |
git remote rm origin | |
git remote rm destination | |
git remote add origin "$2" | |
git remote add destination "$3" | |
echo fetching orign "$2" | |
git fetch origin +refs/heads/*:refs/heads/* --force | |
LASTERROR=$? | |
if [ $LASTERROR -ne 0 ] && [ $LASTERROR -ne 128 ]; then #128 = no changes found | |
echo git fetch operation fails, exit | |
exit 1 | |
fi | |
echo pushing branches to destination "$3" | |
git push destination --all --force -v | |
LASTERROR=$? | |
if [ $LASTERROR -ne 0 ] && [ $LASTERROR -ne 128 ]; then #128 = no changes found | |
echo git push operation fails, exit | |
exit 1 | |
fi | |
echo pushing tags to destination "$3" | |
git push destination --tags --force -v | |
LASTERROR=$? | |
if [ $LASTERROR -ne 0 ] && [ $LASTERROR -ne 128 ]; then #128 = no changes found | |
echo git push operation fails, exit | |
exit 1 | |
fi | |
echo done | |
exit 0 |