adding Gitea Mirror
parent
c6b5700a0e
commit
65a242c7cb
2 changed files with 74 additions and 0 deletions
73
Gitea-Mirror.md
Normal file
73
Gitea-Mirror.md
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
## Mission
|
||||||
|
|
||||||
|
Mirror repositories from one Gitea instance to another, using a private SSH key from a 3rd workstation / server. This keeps the SSH private keypart secure on your own servers and allows for a password to be set on it as desired.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
1. Create a new SSH keypair to use as a Deploy Key on both Gitea instances:
|
||||||
|
```
|
||||||
|
ssh-keygen -t ed25519 -a 100 -f reposync -C reposync
|
||||||
|
```
|
||||||
|
2. Add the public keypart to the source repository as a Deploy Key without Write access
|
||||||
|
3. Add the public keypart to the destination repository as a Deploy Key with Write access
|
||||||
|
4. Disable Issues, Projects and Pull Requests on the destination repository (optional)
|
||||||
|
|
||||||
|
Gitea allows the same SSH keypair to be used as Deploy Keys for multiple repositories. If using a password on the SSH keypair, leverage `ssh-agent` / `ssh-add` as needed.
|
||||||
|
|
||||||
|
## Build Repos
|
||||||
|
|
||||||
|
One-time need, prepare the initial repository sync setup and test the initial mirroring.
|
||||||
|
|
||||||
|
**buildmirrors.sh**
|
||||||
|
```
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
WDIR="${HOME}/repos/mirror"
|
||||||
|
cd "${WDIR}" || exit 1
|
||||||
|
|
||||||
|
REPOS="repo1 repo2 repo3 repo4"
|
||||||
|
USER="frank"
|
||||||
|
EMAIL="frank@thetank"
|
||||||
|
SSH="ssh -a -o IdentitiesOnly=yes -i ~/.ssh/reposync -F /dev/null"
|
||||||
|
SRC="git@src.gitea.server:frankthetank"
|
||||||
|
DST="git@dst.gitea.server:frankthetank"
|
||||||
|
|
||||||
|
for repo in ${REPOS}; do
|
||||||
|
GIT_SSH_COMMAND="${SSH}" git clone --mirror ${SRC}/${repo}.git
|
||||||
|
if [[ -d ${repo}.git ]]; then
|
||||||
|
pushd "$(pwd)" >/dev/null
|
||||||
|
cd ${repo}.git
|
||||||
|
git config core.sshCommand "${SSH}"
|
||||||
|
git config user.name "${USER}"
|
||||||
|
git config user.email "${EMAIL}"
|
||||||
|
git remote set-url --push origin ${DST}/${repo}.git
|
||||||
|
git fetch -p origin
|
||||||
|
git push --mirror
|
||||||
|
popd >/dev/null
|
||||||
|
sleep 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
## Mirror Repos
|
||||||
|
|
||||||
|
To be used to keep the repos mirrored over time, whether automated or manual.
|
||||||
|
|
||||||
|
**repomirror.sh**
|
||||||
|
```
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
WDIR="${HOME}/repos/mirror"
|
||||||
|
cd "${WDIR}" || exit 1
|
||||||
|
|
||||||
|
for repo in *.git/; do
|
||||||
|
if [[ -d "${repo}" && ! -L "${repo}" ]]; then
|
||||||
|
pushd "$(pwd)" >/dev/null
|
||||||
|
cd "${repo}"
|
||||||
|
git fetch -q -p origin
|
||||||
|
git push -q --mirror
|
||||||
|
popd >/dev/null
|
||||||
|
sleep 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
- [[Git Quickstart]]
|
- [[Git Quickstart]]
|
||||||
- [[Git Rewrite User]]
|
- [[Git Rewrite User]]
|
||||||
- [[Git Server]]
|
- [[Git Server]]
|
||||||
|
- [[Gitea Mirror]]
|
||||||
- [[GitLab Anchors]]
|
- [[GitLab Anchors]]
|
||||||
- [[Glibc IPv4]]
|
- [[Glibc IPv4]]
|
||||||
- [[GnuPG Things]]
|
- [[GnuPG Things]]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue