Git Proxy

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску

Простое зеркало для GIT

Простой скрипт для того что б держать локальную копию - нужен когда, например, плохая связь с гитхабом.
Предпологается что Git-сервер установлен и настроен, в примере - на том же хосте DESTINATIOIN_REPO="git@localhost:gogs/$(basename ${REPO_NAME} )"

[Unit]
Description=Git Cloner
After=syslog.target
After=network.target
After=mariadb.service mysqld.service postgresql.service memcached.service redis.service

[Service]
#LimitNOFILE=65535
Type=simple
User=git
Group=git
WorkingDirectory=/home/git-clones
ExecStart=/home/git-clones/update_repos.sh
Restart=always
Environment=USER=git HOME=/home/git

ProtectSystem=full
PrivateDevices=yes
PrivateTmp=yes
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

#!/bin/bash



set -x

REPOS="repo1.git repo2 git.repo3.git"
WORKDIR="/home/git-clones"

update_repo() {
    SOURCE_REPO="https://github.com/${REPO_NAME}"
    DESTINATIOIN_REPO="git@localhost:gogs/$(basename ${REPO_NAME} )"
    if [ -d ${WORKDIR} ];
    then
	pushd ${WORKDIR}
    else
	mkdir -p ${WORKDIR}
	pushd ${WORKDIR}
    fi

    if [ -d $(basename ${REPO_NAME}) ];
    then
	pushd $(basename ${REPO_NAME})
	git \
	    remote \
	    set-url \
	    --push \
	    origin ${DESTINATIOIN_REPO}

        git \
	    fetch \
	    --all
	git \
	    push --mirror
        popd
    else
	git clone --mirror ${SOURCE_REPO}
    fi
    popd
}

update_all_repos() {
    for REPO_NAME in ${REPOS};
    do
	echo ${REPO_NAME}
	update_repo
    done
}

echo "Start"
while true;
do
    update_all_repos
done